Nginx系列-11.配置Nginx反向代理和负载均衡
目录 - Nginx系列
Nginx系列-1.Linux下安装Nginx
Nginx系列-2.配置LNMP(Linux、Nginx、MySQL、PHP)架构
Nginx系列-3.配置Nginx虚拟主机
Nginx系列-4.Nginx日志配置及日志切割
Nginx系列-5.配置Nginx的防盗链
Nginx系列-6.配置Nginx的HTTPS
Nginx系列-7.配置Nginx使用uwsgi支持web.py框架
Nginx系列-8.配置Nginx+Apache实现动静分离
Nginx系列-9.配置NFS实现Nginx实现动静分离
Nginx系列-10.采用Nginx搭建正向代理服务
Nginx系列-11.配置Nginx反向代理和负载均衡
实验环境
三台最小化的 CentOS 7.3 虚拟机
server1-ip: 192.168.204.133
server2-ip: 192.168.204.134
server3-ip: 192.168.204.135
实验拓扑
一、server1 安装 nginx
-
安装nginx
yum install -y epel-* yum install -y nginx vim
-
关闭防火墙
setenforce 0 systemctl stop firewalld systemctl disable firewalld
- 编辑nginx配置文件,删除或注释主配置文件中的
server
块vim /etc/nginx/nginx.conf
删除或注释主配置文件中的
server
块,以排除实验中的意外影响
二、server2/server3 同时安装 Apache 和 PHP
-
安装Apache和PHP
yum install -y httpd php
- 关闭防火墙
setenforce 0 systemctl stop firewalld systemctl disable firewalld
三、server2/server3同时配置web服务
-
在
server2
建立主页文件,并启动Apachecd /var/www/html echo -e "Server2" >> index.html systemctl start httpd
-
在
server3
建立主页文件,并启动Apachecd /var/www/html echo -e "Server3" >> index.html systemctl start httpd
- 在
server1
访问server2
和server3
curl http://192.168.204.134/ curl http://192.168.204.135/
四、server1配置nginx反向代理
反向代理实验拓扑
-
编辑
nginx
配置文件vim /etc/nginx/conf.d/vhosts.conf
-
添加如下内容
server { listen 8081; location / { proxy_pass http://[server2's ip]; } } server { listen 8082; location / { proxy_pass http://[server3's ip]; } }
-
启动
nginx
systemctl start nginx
- 测试反向代理
- 在宿主机访问反向代理端口
访问http://192.168.204.133:8081
,可返回server2
上的资源
访问http://192.168.204.133:8082
,可返回server3
上的资源
- 或者是在
server1
访问反向代理curl http://192.168.204.133:8081 curl http://192.168.204.133:8082
依次返回'server2', 'server3'
- 在宿主机访问反向代理端口
五、server1配置一般轮询nginx负载均衡
-
重新编辑nginx配置文件
vim /etc/nginx/conf.d/vhosts.conf
-
删除原内容,重新添加如下内容
#configuring virtual hosts server { listen 80; server_name _; location / { proxy_pass http://web_server; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } #configure load balancing upstream web_server { #ip_hash; server 192.168.204.134; #server2's ip server 192.168.204.135; #server3's ip }
-
重新启动nginx
systemctl restart nginx
-
编写验证脚本
#!/bin/bash # filename: balance.sh for((i=1;i<=30;i++)); do curl http://192.168.204.133/ echo -e "" done #END
- 执行脚本,验证负载均衡
/bin/bash ./balance.sh
显示的结果为
server2
和server3
交替出现
六、nginx负载均衡算法
upstream
的两种配置方式- 第一种
upstream web_server { server 192.168.204.134:80; server 192.168.204.135:80; } location / { proxy_pass http://web_server; #... }
- 第二种
upstream web_server { server http://192.168.204.134:80; server http://192.168.204.135:80; } location / { proxy_pass web_server; #... }
- 第一种
-
热备
两台服务器中,只有当一台服务器宕掉的时候,才启用另一台
服务器处理请求的顺序为:AAAAAAA,A宕机了,BBBBBBupstream web_server { server 192.168.204.134:80 backup; server 192.168.204.135:80; }
重启nginx
后运行测试脚本
宕掉server3
再次运行测试脚本
-
ip_hash
Nginx会让相同的客户端IP请求相同的服务器upstream web_server { ip_hash; server 192.168.204.134:80; server 192.168.204.135:80; }
重启nginx
后运行测试脚本
-
轮询
Nginx中轮询的权重默认都是1
服务器处理请求的顺序为:ABABABABABABABupstream web_server { server 192.168.204.134; server 192.168.204.135; }
重启nginx
后运行测试脚本
-
加权轮询
根据配置的加权的大小而分发给不同服务器不同的请求。默认是1
下面配置的请求顺序为:ABBABBABBABBupstream web_server { server 192.168.204.134:80 weight=1; server 192.168.204.135:80 weight=2; }
重启nginx
后运行测试脚本
-
Nginx负载均衡配置的几个状态
Nginx的负载均衡多参数配合使用upstream { server 192.168.204.134:80 weight=2 max_fails=2 fail_timeout=2; server 192.168.204.135:80 weight=2 max_fails=2 fail_timeout=2; }
down
表示当前的server暂时不参与负载均衡。backup
预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻。max_fails
允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误。fail_timeout
在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用。