Nginx 通过upstream服务器组实现轮询式负载均衡及我所遇到的问题 【关闭selinux服务】
十年河东,十年河西,莫欺少年穷
学无止境,精益求精
在进行本篇主题之前,先介绍下Nginx关键字proxy_pass 和 proxy_redirect 的语法
proxy_pass 后面是被代理的服务器域名 或 Ip ,例如:proxy_pass http://www.jd.com proxy_pass http://www.121.226.246.3/
proxy_pass 被代理服务器Ip/域名
proxy_redirect 是为了解决防止暴露真实服务器而使用的,他的语法为: proxy_redirect 被代理服务器域名/Ip Nginx服务器Ip/域名 ,例如:proxy_pass http://www.jd.com http://192.168.136.135
proxy_redirect 被代理服务器Ip/域名 Nginx服务器Ip/域名
查看Nginx 各路径
rpm -ql nginx
进入正题:Nginx 负载均衡
1、准备工作:
准备2台虚拟机,分别命名为nginxserver 、 webserver
分别在nginxserver 和 webserver做如下准备
开通centos7网络模块,可参考:linux centos 7 无法上网,ping 指令不通的问题
更新yum源为阿里云,可参考:Linux Centos7 修改Yum源
安装nginx,并设置为自启动,可参考:CentOS 7中安装Nginx 并设置自启动
2、开通端口
在nginxserver 开通 80端口
在webserver 开通 80、81、82、83端口,其中81 82 83 三个端口用来模拟三个内容相同的 web站点
[root@localhost nginx]# sudo firewall-cmd --add-port=80/tcp --permanent success [root@localhost nginx]# sudo firewall-cmd --add-port=81/tcp --permanent success [root@localhost nginx]# sudo firewall-cmd --add-port=82/tcp --permanent success [root@localhost nginx]# sudo firewall-cmd --add-port=83/tcp --permanent
3、修改webserver服务器Nginx配置文件,模拟4个相同web站点
server { listen 80; default_type text/html; server_name localhost; location / { return 200 '<h1> this is 80 server </h1>'; } } server { listen 81; default_type text/html; server_name localhost; location / { return 200 '<h1> this is 81 server </h1>'; } } server { listen 82; default_type text/html; server_name localhost; location / { return 200 '<h1> this is 82 server </h1>'; } } server { listen 83; default_type text/html; server_name localhost; location / { return 200 '<h1> this is 83 server </h1>'; } }
5、重新加载Nginx配置文件
nginx -s reload
6、尝试访问81端口服务器
端口开了,但无法访问,什么原因呢?
7、尝试重启Nginx
systemctl restart nginx
报错
输入提示的命令,获取答案
systemctl status nginx.service
journalctl -xe
原来是 SELinux 阻止了端口的访问
8、selinux服务关闭
setenforce 0
sed -i.bak s/'^SELINUX=enforcing$'/'SELINUX=disabled'/g /etc/selinux/config
8.1 查看selinux服务状态
getenforce --- 确认selinux服务是否开启或是关闭 [root@server ~]# getenforce Enforcing
8.2 临时关闭selinux服务
setenforce [1|0] --- 1表示临时开启Enforcing,0表示临时关闭Permissive getenforce --- 关闭后确认 [root@server ~]# setenforce 0 [root@server ~]# getenforce Permissive
8.3 永久关闭selinux服务
修改/etc/selinux/config文件
# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. --- 服务处于正常开启状态 # permissive - SELinux prints warnings instead of enforcing. --- 服务被临时关闭了 # disabled - No SELinux policy is loaded. --- 服务被永久关闭 SELINUX=enforcing
第一步:修改配置文件
[root@server ~]# vi /etc/selinux/config
SELINUX=disabled
第二步:系统重启生效配置
[root@server ~]# reboot
第三步:确认服务状态
[root@server ~]# getenforce
Disabled
9、关闭后,重启Nginx,并访问81服务器
systemctl restart nginx
ok,截止到这儿,我们的四个web站点就可以访问了
10、配置nginx服务器nginx.conf 文件
upstream backend { server 192.168.136.136; server 192.168.136.136:81; server 192.168.136.136:82; server 192.168.136.136:83; } server { listen 80; server_name localhost; location / { proxy_pass http://backend; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
这里需要注意的是:upstream 后的名称为:服务器组的名称,必须要和nginx侦听端口location中的保持一致。
此时我们访问服务器http://192.168.136.135/,输出如下:
及
他会通过轮询的模式选择服务器
因为服务器的配置不尽相同,针对配置好的服务器我们可以多量指向,那么通过加上权重,实现有选择性的访问
11、加权轮询访问
upstream backend { server 192.168.136.136 weight=1; server 192.168.136.136:81 weight=2; server 192.168.136.136:82 weight=3; server 192.168.136.136:83 weight=4; } server { listen 80; server_name localhost; location / { proxy_pass http://backend; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
权重最大的会被优先访问
nginx 负载均衡案例
案例1、
案例2、
案例3、
案列4、【域名要解析到nginx服务器对应的IP】
案例5、
@天才卧龙的博客
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2020-04-28 C# 多线程发送邮件 代码版
2019-04-28 JS 禁止Ctrl+C + 禁止右键操作
2018-04-28 大话设计模式之模板模式 C#