目录
1、负载均衡的作用
如果你的nginx服务器给2台web服务器做代理,负载均衡算法采用轮询,那么当你的一台机器web程序关闭造成web不能访问,那么nginx服务器分发请求还是会给这台不能访问的web服务器,如果这里的响应连接时间过长,就会导致客户端的页面一直在等待响应,对用户来说体验就打打折扣,这里我们怎么避免这样的情况发生呢。这里我配张图来说明下问题。
如果负载均衡中其中web2发生这样的情况,nginx首先会去web1请求,但是nginx在配置不当的情况下会继续分发请求道web2,然后等待web2响应,直到我们的响应时间超时,才会把请求重新分发给web1,这里的响应时间如果过长,用户等待的时间就会越长。
下面的配置是解决方案之一。
proxy_connect_timeout 1; #nginx服务器与被代理的服务器建立连接的超时时间,默认60秒
proxy_read_timeout 1; #nginx服务器向被代理服务器组发出read请求后,等待响应的超时间,默认为60秒。
proxy_send_timeout 1; #nginx服务器向被代理服务器组发出write请求后,等待响应的超时间,默认为60秒。
proxy_ignore_client_abort on; #客户端断网时,nginx服务器是否中断对被代理服务器的请求。默认为off。
使用upstream指令配置一组服务器作为被代理服务器,服务器中的访问算法遵循配置的负载均衡规则,同时可以使用该指令配置在发生哪些异常情况时,将请求顺次交由下一组服务器处理.
proxy_next_upstream timeout; #反向代理upstream中设置的服务器组,出现故障时,被代理服务器返回的状态值。error|timeout|invalid_header|http_500|http_502|http_503|http_504|http_404|off
error:建立连接或向被代理的服务器发送请求或读取响应信息时服务器发生错误。
timeout:建立连接,想被代理服务器发送请求或读取响应信息时服务器发生超时。
invalid_header:被代理服务器返回的响应头异常。
off:无法将请求分发给被代理的服务器。
http_400,....:被代理服务器返回的状态码为400,500,502,等
2、upstream配置
首先给大家说下 upstream 这个配置的,这个配置是写一组被代理的服务器地址,然后配置负载均衡的算法。这里的被代理服务器地址有2中写法。
upstream testapp {
server 192.168.18.134;
server 192.168.18.135;
}
server {
....
location / {
proxy_pass http://testapp; #请求转向 testapp 定义的服务器列表
}
upstream mysvr {
server http://192.168.18.134;
server http://192.168.18.135;
}
server {
....
location / {
proxy_pass http://mysvr; #请求转向mysvr 定义的服务器列表
}
3、准备工作(三台机器 1代理机 2服务机)
配置代理机
1、关闭防火墙与selinux
[root@server-01 ~]# systemctl stop firewalld && setenforce 0
2、启动nginx服务
[root@server-01 ~]# systemctl start nginx
3、开始配置代理机
[root@proxy ~]# vim /etc/nginx/conf.d/default.conf
upstream LN {
server 192.168.18.134:80;
server 192.168.18.135:80;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://LN;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
4、检查配置文件语法
5、重载nginx服务
[root@proxy ~]# nginx -s reload
配置第一台服务机
1、配置服务机配置文件
[root@server-01 ~]# vim /etc/nginx/conf.d/default.conf
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html;
}
}
2、检查配置文件语法 nginx -t
3、重载nginx服务
[root@server-02 ~]# nginx -s reload
配置第二台服务机
1、配置服务机配置文件
[root@server-02 ~]# vim /etc/nginx/conf.d/default.conf
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html;
}
}
2、检查配置文件语法 nginx -t
3、重载nginx服务
[root@server-02 ~]# nginx -s reload
4、测试访问代理服务机
第一次访问
第二次访问
代理成功,快学起来吧!