整活 · 11 9 月, 2021 0

Nginx中配置负载均衡

黑历史

那一年,手头可以用作服务器的终端设备还比较紧俏。
那一年,某人认识了HAProxy。
那一年,某人用HAProxy,搞出了这样的操作👇

                <-> Nginx1
用户 <-> HAProxy <-> Nginx2
                <-> Nginx...

DUCK不必啊!!

Nginx自己就有负载均衡功能。配置案例如下👇

# 省略一万行
http{
    # 待选服务器列表(注意一定要写在server外面)
    upstream myproject{
        # ip_hash指令,将同一用户引入同一服务器。
        ip_hash;
        server 192.168.1.1;
        server 192.168.1.2 down;
        server 192.168.1.3 weight=2;
        server 192.168.1.4 backup;
    }

    server{
        listen 80;
        location / {
            proxy_pass http://myproject;
        }
    }
}

关于配置案例中IP地址后的参数

参数 说明
down Server不参与负载均衡
backup 当其他的server(非backup)出现故障或者忙的时候,才会请求backup机器
max_fails=N 允许请求失败的次数,默认为1。当失败次数达到该值,就认为该机器down掉了。 失败的指标是由proxy_next_upstream模块定义
fail_timeount=N 定义失败的超时时间,也就是说在该时间段内达到max_fails,才算真正的失败。默认是10秒
proxy_next_upstream 通过后端服务器返回的响应状态码,表示服务器死活。语法:proxy_next_upstream error / timeout / invalid_header / http_500 / http_502 / http_503 / http_504 / http_404 / off

其中关于proxy_next_upstream后接的参数

参数 说明
error 和后端服务器建立连接时,或者向后端服务器发送请求时,或者从后端服务器接收响应头时,出现错误
timeout 和后端服务器建立连接时,或者向后端服务器发送请求时,或者从后端服务器接收响应头时,出现超时
invalid_header 后端服务器返回空响应或者非法响应头
http_500 后端服务器返回的响应状态码为500
http_502 后端服务器返回的响应状态码为502
http_503 后端服务器返回的响应状态码为503
http_504 后端服务器返回的响应状态码为504
http_404 后端服务器返回的响应状态码为404
off 停止将请求发送给下一台后端服务器

参考&摘录:
https://segmentfault.com/a/1190000014483200
https://www.huaweicloud.com/articles/c8bae49910f7e96a5d0575d6d163c884.html