nginx学习
节点规划:
master:172.16.23.120 node1:172.16.23.121 node2:172.16.23.122 zabbix:172.16.23.131
以master节点作为nginx负载均衡进行配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | [root@master conf] # cat nginx.conf|grep upstream -C 20|egrep -v "#|^$" worker_connections 1024; } http { include mime.types; default_type application /octet-stream ; sendfile on; keepalive_timeout 65; upstream backend { server node1; server node2; } server { listen 80; server_name localhost; location / { root html; index index.html index.htm; proxy_pass http: //backend ; } |
然后测试访问为均衡访问:
1 2 3 4 5 | [root@master conf] # for i in `seq 1 4`;do curl http://master;done node1 node2 node1 node2 |
现在将upstream里面的后端机器进行backup主备模式进行配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | [root@master conf] # cat nginx.conf|grep upstream -C 20|egrep -v "#|^$" worker_connections 1024; } http { include mime.types; default_type application /octet-stream ; sendfile on; keepalive_timeout 65; upstream backend { server node1; server node2 backup; } server { listen 80; server_name localhost; location / { root html; index index.html index.htm; proxy_pass http: //backend ; } |
看上面标红的设置,将node2设置为backup,这样设置的目的是:当node1和node2服务都正常的话,backup模式也就是node2不会进行提供服务,而当node1服务异常后,node2也就是backup备才会进行提供服务
1 2 3 4 5 | [root@master conf] # for i in `seq 1 4`;do curl http://master;done node1 node1 node1 node1 |
现在将node1进行停止,然后再访问master:
1 2 3 | [root@node1 nginx] # ./sbin/nginx -s stop [root@node1 nginx] # ps -ef|grep nginx root 82341 125945 0 15:32 pts /0 00:00:00 grep --color=auto nginx |
现在进行访问测试:
1 2 3 4 5 | [root@master conf] # for i in `seq 1 4`;do curl http://master;done node2 node2 node2 node2 |
而当node1服务恢复正常后,访问master后继续node1而不再是node2备节点了
下面将展示两个机房的访问关系:
master:nginx负载均衡,后端挂两个服务:node1,node2
zabbix-server:nginx负载均衡,后端挂两个服务:node1,node2
node3:nginx负载均衡,后端挂master以及zabbix-server
具体配置如下:
由node3进行最外层的提供服务,涉及两个idc,node1在idc1机房,node2在idc2机房
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | [root@node3 conf] # cat nginx.conf|grep upstream -C 30|egrep -v "#|^$" worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application /octet-stream ; sendfile on; keepalive_timeout 65; upstream backend { server master; server zabbix-server; } upstream idc1 { server master; } upstream idc2 { server zabbix-server; } server { listen 80; server_name localhost; location / { root html; index index.html index.htm; proxy_set_header X-Real-IP $remote_addr; if ($remote_addr ~ "172.16.23.121" ) { proxy_pass http: //idc1 ; break ; } if ($remote_addr ~ "172.16.23.122" ) { proxy_pass http: //idc2 ; break ; } proxy_pass http: //backend ; } |
而master配置如下,master优先访问node1,也就是idc1机房,idc2机房作为backup,当idc1挂掉后才会访问idc2也就是node2,backup关键字的作用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | [root@master conf] # cat nginx.conf|grep upstream -C 30|egrep -v "#|^$" worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application /octet-stream ; sendfile on; keepalive_timeout 65; upstream backend { server node1; server node2 backup; } server { listen 80; server_name localhost; location / { root html; index index.html index.htm; proxy_set_header X-Real-IP $remote_addr; proxy_pass http: //backend ; } error_page 500 502 503 504 /50x .html; location = /50x .html { root html; } |
而zabbix-server的配置,zabbix-server优先访问idc2机房的node2,idc1的node1作为backup,当idc2的node2出现异常才会访问idc1的node1服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | [root@zabbix-server conf] # cat nginx.conf|grep upstream -C 20|egrep -v "#|^$" worker_connections 1024; } http { include mime.types; default_type application /octet-stream ; sendfile on; keepalive_timeout 65; upstream backend { server node1 backup; server node2; } server { listen 80; server_name localhost; location / { root html; index index.html index.htm; proxy_pass http: //backend ; } |
以上配置完成后在node1所属idc1机房进行访问http://node3:
1 2 3 4 | [root@node1 nginx] # curl http://node3 node1 [root@node1 nginx] # curl http://node3 node1 |
在node2所属机房idc2进行访问:
1 2 3 4 | [root@node2 html] # curl http://node3 node2 [root@node2 html] # curl http://node3 node2 |
现在将node1的服务进行stop,然后在node1进行访问,也就是idc1不能提供服务,那么会去访问idc2机房的node2应用:
1 2 3 4 5 6 7 | [root@node1 nginx] # ./sbin/nginx -s stop [root@node1 nginx] # ps -ef|grep nginx root 84131 125945 0 18:06 pts /0 00:00:00 grep --color=auto nginx [root@node1 nginx] # curl http://node3 node2 [root@node1 nginx] # curl http://node3 node2 |
而当idc1机房的node1服务正常恢复后,那么访问依然会回到idc1机房的node1应用:
1 2 3 4 5 6 7 8 9 | [root@node1 nginx] # ./sbin/nginx [root@node1 nginx] # ps -ef|grep nginx root 84145 1 0 18:07 ? 00:00:00 nginx: master process . /sbin/nginx nobody 84146 84145 0 18:07 ? 00:00:00 nginx: worker process root 84148 125945 0 18:07 pts /0 00:00:00 grep --color=auto nginx [root@node1 nginx] # curl http://node3 node1 [root@node1 nginx] # curl http://node3 node1 |
nginx根据Ip或者ip网段转发到指定的后端服务器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | [root@node3 conf] # cat nginx.conf|grep upstream -C 30|egrep -v "#|^$" worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application /octet-stream ; sendfile on; keepalive_timeout 65; upstream backend { server master; server zabbix-server; } upstream idc1 { server master; } upstream idc2 { server zabbix-server; } server { listen 80; server_name localhost; location / { root html; index index.html index.htm; proxy_set_header X-Real-IP $remote_addr; if ($remote_addr ~ "172.16.23.121" ) { proxy_pass http: //idc1 ; break ; } if ($remote_addr ~ "172.16.23.122" ) { proxy_pass http: //idc2 ; break ; } proxy_pass http: //backend ; } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2017-10-11 saltstack之keepalived的安装配置