【Nginx 学习之路】nginx入门和深入理解(超详解)

1. 编译安装

出了很多篇关于Docker的博文,对"容器"的理解也更深了一步,浅浅的入了一些门。我们都知道,在docker上启容器真的非常高效,讨程序员喜欢。不过今天我开始学nginx,从编译安装开始把。其实编译安装也有他的特点:个性化,即只安装自己需要的模块,其他“重”的,我不需要的,我可以不装。
综上所述,编译安装Nginx可以获得更好的性能、稳定性、安全性、可定制性和灵活性,是一种优秀的安装方式。废话不多说,装~

1.1 下载源码包,安装好依赖包

利用xftp将你在windows从nginx官网下载的源码包传入你的linux机器。(最好提前建好自己的nginx目录)并且安装好依赖包。

[root@jd-exporter ~]# mkdir /opt/nginx -p
[root@jd-exporter ~]# yum  install pcre2 pcre2-devel zlib zlib-devel openssl  openssl-devel -y

在这里插入图片描述

1.2 解压缩 进入目录

[root@jd-exporter ~]# tar xf nginx-1.21.6.tar.gz 
[root@jd-exporter nginx]# cd nginx-1.21.6
[root@jd-exporter nginx-1.21.6]# ls
auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  Makefile  man  objs  README  src

1.3 配置

[root@jd-exporter ~]# useradd -s /sbin/nologin jiangda
[root@jd-exporter ~]# mkdir /usr/local/jiangda
[root@jd-exporter nginx-1.21.6]# ./configure --prefix=/usr/local/jiangda  --user=jiangda --with-threads  --with-http_ssl_module --with-http_v2_module

./configure …
配置好之后就会生成makefile

1.4 编译以及安装

[root@jd-exporter nginx-1.21.6]# make && make install

2. 编写systemctl unit

2.1 修改环境变量PATH

永久修改

[root@jd-exporter ~]# vim ~/.bashrc

在最后一行添加PATH=/usr/local/jiangda/sbin:$PATH
即可。
修改成功:
在这里插入图片描述

2.2 编写systemctl unit

[root@jd-exporter nginx-1.21.6]# cd /usr/lib/systemd/system
[root@jd-exporter system]# vim nginx.service

nginx.service的内容如下:(粘贴即可)

[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/usr/local/jiangda/logs/nginx.pid
ExecStart=/usr/local/jiangda/sbin/nginx -c /usr/local/jiangda/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID

[Install]
WantedBy=multi-user.target

2.3 重新加载nginx.service配置

[root@jd-exporter ~]# systemctl daemon-reload

2.4 测试

[root@jd-exporter ~]# systemctl stop nginx
[root@jd-exporter ~]# systemctl start nginx

开启成功:
在这里插入图片描述

3. 熟悉nginx的配置文件

主配置文件 – /usr/local/sanchuang/conf/nginx.conf

[root@jd-exporter system]# cd /usr/local/jiangda/conf/
[root@jd-exporter conf]# vim nginx.conf

在这里插入图片描述
user:指定nginx进程运行的用户和组。
worker_processes:指定nginx使用的工作进程数,通常设置为CPU核心数的两倍。
error_log:指定错误日志的路径。
pid:指定nginx进程的PID文件路径。
events:指定事件模型和连接数等参数。
http:指定HTTP协议相关的配置,包括虚拟主机、代理服务器、负载均衡等。
server:指定一个虚拟主机的配置,包括监听端口、域名、SSL证书等。
location:指定虚拟主机中某个URI的配置,包括访问限制、反向代理等。
总之,nginx.conf是nginx的主配置文件,它包含了nginx的全局配置和http配置等内容,通过配置nginx.conf可以实现nginx的各种功能,如虚拟主机、反向代理、负载均衡等。

3.1 connection指令

在Nginx配置文件nginx.conf中,connection指令用于设置连接的超时时间和缓冲区的大小。具体来说,它包括以下两个参数:keepalive_timeout:设置客户端与Nginx服务器之间的长连接超时时间。当客户端与服务器建立了长连接后,如果在指定时间内没有活动,连接就会被关闭。默认值为75秒,可以通过在http、server或location块中设置来覆盖默认值。
client_body_buffer_size:设置请求体缓冲区的大小。当客户端发送请求体时,Nginx会将请求体缓存在内存中,等待后续处理。如果请求体大小超过缓冲区大小,Nginx会将请求体写入到磁盘中。默认值为8k,可以通过在http、server或location块中设置来覆盖默认值。
通过调整connection指令中的参数,可以优化Nginx服务器的性能和稳定性。例如,增加keepalive_timeout的值可以减少连接的创建和关闭次数,从而减少服务器的负担。而增加client_body_buffer_size的值可以缓存更多的请求体,从而减少磁盘I/O,提高服务器的响应速度

3.2 worker_connections指令

worker_connections是指令,用于设置Nginx服务器每个worker进程的最大连接数。具体来说,它指定了worker进程可以同时处理的最大连接数,包括客户端与Nginx之间的连接、Nginx与后端服务之间的连接等。worker_connections对服务器的性能和稳定性有很大影响,因此需要根据实际情况进行配置
例如,在高并发的情况下,如果worker_connections设置过小,就可能导致Nginx服务器无法处理所有的连接请求,从而出现连接超时、服务器负载过高等问题。而如果worker_connections设置过大,就可能导致服务器内存占用过高,从而影响服务器的性能和稳定性
通常情况下,可以根据服务器的硬件配置预估的并发连接数来设置worker_connections。例如,如果服务器的CPU和内存较好,可以适当增加worker_connections的值,以提高服务器的并发处理能力。而如果服务器的硬件配置较低,应该适当减小worker_connections的值,以避免服务器过载和性能下降。
在默认情况下,worker_connections的值为1024。如果需要修改,可以通过在http或server块中设置worker_connections指令来实现.
在这里插入图片描述
#最大连接数,对于HTTP请求本地资源来说,能够支持的最大并发数量是worker_connections * worker_processes,
#而如果是HTTP作为反向代理来说,最大并发数量应该是worker_connections * worker_processes/2。

3.3 nginx高并发和高效率原因分析

3.3.1 异步非阻塞的事件驱动模型

即,使用单个进程或线程处理多个连接请求,而不是为每个连接请求创建一个新的进程或线程。这种模型可以避免创建和销毁大量的进程或线程带来的开销,从而提高服务器的并发处理能力和效率。

3.3.2 轻量级的内存占用

Nginx的设计非常精简,代码量相比其他Web服务器较小,没有复杂的模块和框架。同时,Nginx使用内存池技术来管理内存,可以避免频繁的内存分配和释放,从而降低内存占用和垃圾回收的开销。

3.3.3 高效的事件处理机制

使用epoll或kqueue等高效的事件处理机制,可以快速地处理大量的连接请求和数据传输。同时,Nginx提供了一些高效的缓存机制,如磁盘文件缓存、内存缓存等,可以减少磁盘I/O和数据库查询等操作,从而提高服务器的响应速度和效率。关于epoll模型机制可以看我的另一篇博客【Linux】高并发之epoll模型详解

3.3.4 负载均衡和反向代理

Nginx内置了负载均衡和反向代理功能,可以将请求分发到多个后端服务器上,并对后端服务器进行健康检查和故障转移。这样可以在保证高可用性的同时,提高服务器的并发处理能力和效率。(后面我们详细讲述)

3.4 启用零拷贝(sendfile)

启用零拷贝,作静态web服务器会大大提升效率!
零拷贝(Zero-copy)是一种数据传输技术,可以减少CPU的拷贝操作,从而提高数据传输的效率。在sendfile操作中,零拷贝技术可以帮助我们实现高效的文件传输,其基本思想是将文件的数据从磁盘直接传输到网络协议栈中,避免了将数据从磁盘读入内存再从内存复制到网络协议栈中的操作,从而减少了CPU的拷贝操作,提高了数据传输的效率。具体来说,sendfile的零拷贝操作可以分为以下几个步骤:
1.应用程序调用sendfile函数,并指定文件描述符和socket描述符;
2.内核通过DMA(直接内存访问)方式将文件数据传输到网络协议栈中的缓冲区中,避免了CPU的拷贝操作;
3.网络协议栈将缓冲区中的数据直接传输到网络中,避免了CPU的拷贝操作;
4.数据传输完成后,应用程序可以继续进行其他操作,如关闭socket等。

需要注意的是,sendfile的零拷贝操作并不是完全“零拷贝”,因为在数据传输过程中仍然需要进行少量的内存拷贝操作,但是这些拷贝操作的数量和大小都非常小,可以忽略不计。同时,sendfile的零拷贝操作依赖于硬件的支持,需要操作系统和硬件平台的共同支持,才能实现高效的文件传输。
说这么多,感觉不如这张图,一图可抵千言万语hhhhhhhh,结合着看更明白~
在这里插入图片描述

3.5 安装openresty对比

yum install yum-utils -y
yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo
yum install openresty
yum  install openresty-resty

#安装路径:
/usr/local/openresty

3.6 配置文件作用域

全局块 – work运行用户 work进程的数量
event – worker_connections 连接数的限制
http – 设置日志格式 access日志 指定一些参数 是否零拷贝 是否需要nagle
– server – access日志 指定虚拟主机域名 端口
– location – url匹配

4. nginx server 配置(领略nginx的数多功能)

在nginx.conf文件中, http配置模块里添加

include  conf.d/*.conf;

在这里插入图片描述
在这里插入图片描述
记得建好目录并进入,创建xx.conf文件

[root@jd-exporter conf.d]# ls
sc.conf
[root@jd-exporter conf.d]# pwd
/usr/local/jiangda/conf/conf.d

############黑白名单
allow 192.168.1.106;
deny all;

########限流
ngx_http_limit_req_module
需要先开辟一个内存空间 去保留用户的ip访问次数 当访问次数达到限制 就可以触发限流 返回500

########地理位置
ngx_http_geoip_module
数据文件需要下载
之后可以根据不同的地理位置做不同的处理

4.1 功能1:状态统计(常用在监控)

–with-http_stub_status_module 需要编译时添加这个模块(我们前面配置时已经添加)

location /status {
   stub_status on;
   allow  192.168.1.0/24;
   deny all;
}

在这里插入图片描述
测试:访问本机地址和端口(可以从”listen 81“我指定的时81端口):http://192.168.1.194:81/status
在这里插入图片描述
在这里插入图片描述

4.2 功能2:简单认证(支持http基本认证)

4.2.1 添加server域
[root@jd-exporter conf.d]# vim sc.conf 

        auth_basic  "please enter your username and password";
        auth_basic_user_file /usr/local/sanchuang/htpasswd;
         #指定用户名和密码文件

在这里插入图片描述

4.2.2 安装加密工具
yum install httpd-tools
4.2.3 添加用户名和密码

添加用户名和密码 并创建密码保存文件 /usr/local/jiangda/htpasswd

[root@jd-exporter conf.d]# htpasswd -c /usr/local/jiangda/htpasswd jd
New password: 
Re-type new password: jd123456
Adding password for user jd

后续若需要添加用户,可执行:(-b)

htpasswd -b /usr/local/jiangda/htpasswd jd2  123456
[root@jd-exporter conf.d]# cd /usr/local/jiangda
[root@jd-exporter jiangda]# ls
client_body_temp  conf  fastcgi_temp  html  htpasswd  logs  proxy_temp  sbin  scgi_temp  uwsgi_temp
[root@jd-exporter jiangda]# cat htpasswd 
jd:$apr1$IBgBl75H$6Z0bsag484DtfLbSRqVyF/
4.2.4 测试访问

因为我已经访问过了,浏览记录已经记录过了,我这边就已经直接进入/status页面。你们可以清楚浏览器缓存或者是第一次进入,不管你的url是什么,都会进入验证页面,需要你输入用户名和密码。(下血本了,把浏览器一些数据都清除了555)只为给你们看效果。。。。访问http://192.168.1.194:81/status
在这里插入图片描述
把你”拦“了下来,输入刚刚设置的用户名:jd密码:jd123456
访问成功,进入:
在这里插入图片描述

4.2.5 小总结

http基本认证原理:
把用户名和密码放在Authorization头部字段
Authorization: Basic base64(用户名:密码)
在这里插入图片描述
在这里插入图片描述
Authorization: Basic amQ6amQxMjM0NTY=
我们可以Basic后面这一串字符串复制这一段:amQ6amQxMjM0NTY=
在这里插入图片描述
在这里插入图片描述
所以说,那些不是https的网站,你还敢把自己密码”放上去吗(“hhh),不需要黑客就把你密码轻松拿到。

4.3 其他功能

不同的功能对于不同的模块配置,我在这里就讲了2个,其他的你们可以根据官方文档自己实践操作。(在这里再给3个功能的思路)
############黑白名单
allow 192.168.1.106;
deny all;

########限流
ngx_http_limit_req_module
需要先开辟一个内存空间 去保留用户的ip访问次数 当访问次数达到限制 就可以触发限流 返回500

########地理位置
ngx_http_geoip_module
数据文件需要下载
之后可以根据不同的地理位置做不同的处理

5. 较复杂的两个点(对于小白)

5.1 location的匹配规则

在nginx中,location指令的匹配规则非常灵活,可以根据不同的匹配规则进行精确匹配或模糊匹配,具体的匹配规则如下:
1.精确匹配:使用“=”符号开头,表示只匹配URI路径与location指令中所定义的路径完全相等的请求。

2.前缀匹配:使用“^~”符号开头,表示只匹配URI路径以location指令中所定义的路径开头的请求,并且不再进行正则匹配。

3.正则匹配:使用“~”或“~*”符号开头,表示使用正则表达式进行匹配。其中,“~”表示区分大小写,“~* ”表示不区分大小写。

4.最长字符串匹配:如果没有匹配到以上三种情况的location,nginx会选择URI路径最长的location进行匹配。

location = #精确匹配
location ^~ 匹配普通字符前缀
location ~ 匹配正则表达式
location ~* 匹配正则表达式,大小写不敏感
location /sc1 location后面不带字符参数,等效于^~规则,只不过它不会立即返回,它会先查看有没有其他匹配规则可以匹配上。
如果有就返回其他匹配规则的处理,如果没有,就返回自己的规则处理

匹配顺序
1、 先看有没有 精确匹配 =
2、 查找^~ 和 空白 ,如果^~匹配上了就立即处理返回。如果空白匹配上了就再查找其他匹配(~, ~*)。
其他匹配成功,就返回其他匹配项处理。不成功,就返回空白匹配处理
3、^~ 同等级按最长匹配规则来匹配。
4、 ~ 同等级按先后顺序来匹配。

还要注意一个 "空白"约等于 ^~ ,但会保留继续比较!!!
在这里插入图片描述
还要注意,命名location(不负责匹配)
在这里插入图片描述

5.2 理解nginx中的rewrite

在nginx中,rewrite是一个非常重要的指令,用于对请求的URI路径进行重写。它可以将某个URI路径重写为另一个URI路径,或者根据不同的条件进行重写。具体来说,rewrite指令可以实现以下几种功能:

5.2.1 简单重写

将某个URI路径重写为另一个URI路径。例如:

rewrite /old_path /new_path;

此时,当请求的URI路径为/old_path时,nginx会将其重写为/new_path。

5.2.2 正则重写

根据正则表达式对URI路径进行重写。例如:

rewrite ~^(.*)\.html$ $1.php;

此时,当请求的URI路径以.html结尾时,nginx会将其重写为同名的.php文件。

5.2.3 重定向

#强制重定向https

rewrite /(.*)   https://www.test.com/$1;

https://www.w3cschool.cn/nginxsysc/nginxsysc-rewrite.html
将请求重定向到另一个URI路径。例如:

rewrite ^/login$ http://www.example.com/login.html permanent;

此时,当请求的URI路径为/login时,nginx会将其重定向到http://www.example.com/login.html,并返回301状态码。

301,永久重定向,301永久重定向会影响老域名的排名 ,一般用于新老域名的切换。
302,临时重定向。

临时重定向不会缓存新域名的解析记录,但是永久重定向会缓存新域名的解析记录。

5.2.4 标志位:

last(默认) last可以跨location重写访问 地址栏不变
break 不能跨location重写 地址栏不变
redirect 临时重定向 地址栏改变 302
permanent 永久重定向 地址栏改变 301

5.2.5 小总结

需要注意的是,rewrite指令的匹配规则与location指令类似,也是按照优先级进行匹配。如果某个请求可以匹配到多条rewrite规则,nginx会依次尝试匹配,直到找到第一条匹配成功的规则,并进行重写或重定向操作。

总之,rewrite是nginx中非常重要的一个指令,可以实现对URI路径的重写和重定向,通过合理地使用rewrite指令,可以帮助我们更好地进行URL重写和重定向等操作。

6. 反向代理

6.1 实验准备

1.刚刚一直实验nginx的机器当作”代理“机器。
2.准备好两台后端机器,安装好flask。
3.编写test_flask.py(记住默认绑到localhost,要修改绑到当前的服务器上)
在这里插入图片描述
再启动两台后端服务器

6.2 upstream模块

在Nginx upstream模块中,可以设定每台后端服务器在负载均衡调度中的状态,常用的状态有:

down,表示当前的server暂时不参与负载均衡
weight 默认为1,weight越大,负载的权重就越大。
backup,预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的访问压力最低
max_fails,允许请求失败的次数,默认为1,当超过最大次数时,返回proxy_next_upstream模块定义的错误。
fail_timeout,请求失败超时时间,在经历了max_fails次失败后,暂停服务的时间。max_fails和fail_timeout可以一起使用。

  location /sc {
        proxy_pass http://flask_backend;  
       # proxy_pass http://flask_backend/; #如果在最后添加/ 就表示把/sc后面携带的url,向后端真实服务器发送请求
       proxy_pass http://192.168.1.174:81;
    }

upstream flask_backend {
    server 192.168.1.137:5000;
    server 192.168.1.174:5000;
}

upstream flask_backend {
    server 192.168.1.137:5000 max_fails=5 fail_timeout=600;
    server 192.168.1.174:5000 max_fails=5 fail_timeout=600;
}

6.3 健康检查

在分布式系统中,健康检查是保证系统可用性和稳定性的重要手段之一。Nginx提供了健康检查模块,可以对后端服务器进行健康检查,以便及时发现不可用服务器,并将请求转发到其他可用服务器上。常用的健康检查模块有以下几个:
1.ngx_http_upstream_module:该模块是Nginx自带的模块,可以对后端服务器进行健康检查。通过设置upstream模块中的相关指令来配置健康检查功能。例如:

upstream backend {
    server 127.0.0.1:8000;
    server 127.0.0.1:8001;
    check interval=3000 rise=2 fall=5 timeout=1000 type=http;
}

上述配置表示定义一个名为backend的upstream,包含两个后端服务器127.0.0.1:8000和127.0.0.1:8001,并对它们进行健康检查。其中,check指令用来启用健康检查功能,interval表示检查间隔时间,rise表示成功次数,fall表示失败次数,timeout表示超时时间,type表示检查类型。

2.ngx_http_healthcheck_module:该模块是第三方模块,可以对后端服务器进行更为细致的健康检查。通过设置healthcheck指令来配置健康检查功能。例如:

upstream backend {
    server 127.0.0.1:8000;
    server 127.0.0.1:8001;
    health_check uri=/health status=200;
}

上述配置表示定义一个名为backend的upstream,包含两个后端服务器127.0.0.1:8000和127.0.0.1:8001,并对它们进行健康检查。其中,health_check指令用来启用健康检查功能,uri表示检查路径,status表示检查状态码。

总之,Nginx提供了多种健康检查模块,可以根据不同的需求进行选择和配置,帮助我们更好地保护系统可用性和稳定性。需要根据实际情况选择合适的健康检查模块,并进行合理的配置和调整。
这里有一篇挺不错的关于健康检查博客。(什么主动健康检查之类的)https://blog.csdn.net/icanflyingg/article/details/122431814

7. 负载均衡

7.1 负载均衡算法

负载均衡是分布式系统中常用的一种技术手段,它可以将请求均匀地分配到多个服务器上,从而提高系统的可用性和性能。常用的负载均衡算法有以下几种:

轮询算法(Round-robin):将请求按照顺序依次分配到各个服务器上,每个服务器接收到的请求数量大致相同。适用于各个服务器的性能相近的情况。

加权轮询算法(Weighted Round-robin):为各个服务器设置不同的权重值,按照权重值的大小依次分配请求。适用于各个服务器的性能不同的情况。

随机算法(Random):将请求随机地分配到各个服务器上,每个服务器接收到的请求数量随机。适用于各个服务器的性能相近的情况。

IP哈希算法(IP Hash):将请求的IP地址作为哈希值,根据哈希值的大小将请求分配到对应的服务器上,同一个IP地址的请求始终被分配到同一个服务器上。适用于需要保持会话一致性的情况。

最少连接数算法(Least Connections):将请求分配到当前连接数最少的服务器上,保证各个服务器的负载均衡。适用于各个服务器的性能不同的情况。

最短响应时间算法(Shortest Response Time):将请求分配到响应时间最短的服务器上,保证各个服务器的负载均衡。适用于各个服务器的性能不同的情况。

需要根据不同的应用场景选择合适的算法,并进行合理的配置和调整,以达到最优的负载均衡效果。
在这里插入图片描述

7.2 七层转发和四层转发

七层转发指的是在应用层进行负载均衡,即根据HTTP协议的请求内容进行负载均衡。Nginx通过对请求的URI、Host、Cookie等内容进行解析,将请求分发到不同的后端服务器上,并在响应过程中对结果进行处理。七层转发可以根据请求内容进行动态路由,提高了系统的灵活性和可扩展性。

四层转发指的是在传输层进行负载均衡,即根据TCP/UDP协议的源IP地址、目标IP地址、源端口号、目标端口号进行负载均衡。Nginx通过对请求的IP地址和端口号进行解析,将请求分发到不同的后端服务器上,并在响应过程中对数据进行简单的转发。四层转发可以快速地将请求分发到不同的服务器上,提高了系统的性能和吞吐量。

在实际应用中,七层转发和四层转发常常结合使用。例如,可以通过四层负载均衡将请求分发到多个Nginx服务器上,再通过七层负载均衡将请求分发到多个后端服务器上,从而实现高可用性和高性能的服务架构。

需要根据实际应用场景选择合适的负载均衡方式,并进行合理的配置和调整,以达到最优的负载均衡效果。

简单配置:
在nginx.conf全局块添加:
include stream_conf/*.conf;
在stream_conf下添加 stream_sc.conf

stream {
   upstream flask_backend {
    server 192.168.1.174:5000;
    server 192.168.1.137:5000;
   }
   server { 
     listen 5000;
     proxy_pass flask_backend;
   }
}

7.3 后端服务器日志获取真实ip地址

   location /sc {
        proxy_set_header    Host    $http_host;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_pass http://flask_backend;
    }
gunicorn test_flask:app --bind 192.168.1.137:5000 --access-logfile='./access_sc.log' --access-logformat='%({x-forwarded-for}i)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"'

8. 大总结

几个问题总结一下吧

怎么理解nginx反向代理?
Nginx反向代理是指Nginx服务器接收客户端请求后,将请求转发给后端的另一台或多台服务器,然后将后端服务器响应的结果返回给客户端。这种方式的代理被称为反向代理,因为它隐藏了后端服务器的真实IP地址和其他详细信息,使得客户端无法直接访问到后端服务器,只能通过Nginx服务器来访问。
反向代理有很多优点,比如可以帮助负载均衡、提高网站的安全性和可靠性、减轻后端服务器的压力等。通过反向代理,可以将不同的客户端请求分发到不同的后端服务器处理,从而提高了网站的响应速度和吞吐量。同时,反向代理还可以缓存静态内容,减轻后端服务器的负担,从而提高了网站的可靠性和稳定性。
总之,Nginx反向代理是一种非常实用的技术,可以帮助网站提高性能、安全性和可靠性,具有很广泛的应用场景。


怎么理解负载均衡?
负载均衡是指将客户端请求分摊到多个服务器上进行处理,从而提高系统的整体性能和可靠性的技术。当一个服务器无法承担过多的请求负载时,就需要将请求分配到多个服务器上进行处理,这就是负载均衡的基本原理。
负载均衡可以分为两类,一类是硬件负载均衡,另一类是软件负载均衡。硬件负载均衡通常采用专用的硬件设备,比如负载均衡器,它可以通过硬件加速和优化来提高负载均衡的性能和可靠性。而软件负载均衡则是通过软件实现的,它通常采用反向代理、DNS轮询、IP散列等技术来实现负载均衡。
负载均衡的优点是可以提高系统的性能和可靠性,通过将请求分配到多个服务器上处理,可以避免单个服务器负载过高的问题,从而提高系统的整体性能。同时,负载均衡还可以提高系统的可靠性,当某个服务器出现故障时,可以将请求分配到其他正常的服务器上进行处理,从而保证系统的正常运行。


进程池的概念是什么?
进程池是指一组预先创建好的进程,这些进程可以被重复使用来处理多个任务。当有新的任务需要处理时,进程池中的某个进程会被分配给该任务进行处理,任务处理完成后,进程会被归还给进程池,等待下一个任务的到来。进程池通常用于提高程序的性能和效率,因为进程的创建和销毁都需要耗费系统资源,而进程池可以避免频繁地创建和销毁进程,从而减少系统资源的消耗。进程池可以用于各种多进程编程的场景,如Web服务器、并发网络编程、图像处理等。常见的进程池库包括Python的multiprocessing模块、Java的java.util.concurrent包、Node.js的cluster模块等。


systemctl的reload的原理?
systemctl reload命令是用于重新加载systemd配置文件的命令。当执行systemctl
reload命令时,systemd会重新读取配置文件,并尝试应用更改,而不会终止正在运行的服务。相比于systemctl
restart命令,reload命令可以实现无缝升级,避免了服务停止和重新启动的过程。 systemd的reload机制基于以下两个原理:

信号通知:systemd会向所有正在运行的服务进程发送SIGHUP信号,告诉它们重新读取配置文件。服务进程在接收到信号后,会重新加载配置文件,并尝试应用更改。

文件监控:systemd会监控配置文件的变化,一旦文件发生变化,就会自动重新加载配置文件,并尝试应用更改。这个机制基于inotify机制实现,可以实现实时监控文件的变化。
总之,systemctl
reload命令是用于重新加载systemd配置文件的命令,它基于信号通知和文件监控两个原理来实现配置文件的重新加载和应用更改。


理解ospf协议?
OSPF(Open Shortest Path
First)协议是一种基于链路状态的路由协议,用于在IP网络中选择最短路径。OSPF协议是一种自治系统(AS)级别的协议,即在一个AS内,OSPF协议可以为不同类型的网络(如LAN、MAN、WAN等)提供动态路由选择。OSPF协议的工作原理如下:

邻居发现:OSPF协议通过发送Hello消息来发现相邻的路由器,并建立相邻关系。

状态同步:OSPF协议通过发送Link State
Advertisement(LSA)来告知其他路由器自己的网络拓扑状态,其他路由器会把这些信息存储在它们的链路状态数据库(Link
State Database,LSDB)中。

路由计算:OSPF协议使用Dijkstra算法来计算最短路径,它通过将网络拓扑抽象成一个图来计算出每个路由器到其他路由器的最短路径,并将这些路径存储在路由表中。

路由选择:当一个路由器需要向某个目的地址发送数据包时,它会从路由表中选择一条最短路径,并将数据包发送到该路径上的下一个路由器,直到数据包到达目的地。
OSPF协议的特点如下:

高效性:OSPF协议采用了链路状态广播的方式,能够快速地将网络拓扑信息传递给其他路由器,从而提高路由计算的效率。

稳定性:OSPF协议采用了多种机制来保证路由的稳定性,如快速收敛、路由汇总、路由重分布等。

灵活性:OSPF协议支持多种网络类型、路由器类型和链路类型,可以为复杂的网络拓扑提供动态路由选择。
总之,OSPF协议是一种高效、稳定、灵活的路由协议,可以为IP网络提供动态路由选择功能,从而提高网络的可用性和可靠性。


怎么理解正向代理?有什么用?

正向代理是指客户端通过代理服务器来访问其他服务器的方式。在这种情况下,客户端并不知道访问的是代理服务器,而不是真正的目标服务器。代理服务器会接收客户端的请求,然后将请求转发给目标服务器,同时将服务器返回的响应返回给客户端。正向代理的作用是隐藏客户端的真实IP地址和其他详细信息,保护客户端的隐私安全,并且可以访问被墙的网站等。
正向代理常见的应用场景有:

访问被墙的网站。一些国家或地区可能会对某些网站进行封锁,此时客户端可以通过正向代理来访问被封锁的网站。

访问外网。一些企业或学校的网络可能受到限制,无法直接访问外网,此时可以通过正向代理来访问外网。

隐藏客户端真实IP地址。客户端可以通过正向代理来隐藏自己的真实IP地址,保护隐私安全。

加速访问。正向代理可以缓存网站的静态内容,提高网站的访问速度和响应时间。

访问内部资源。一些内部资源可能只能在局域网内访问,此时可以通过正向代理来访问内部资源。
总之,正向代理是一种非常实用的技术,可以帮助客户端访问被墙的网站、保护隐私安全、加速访问等,具有很广泛的应用场景。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

日 近 长 安 远

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值