Nginx配置及负载均衡策略

Posted by KANG's BLOG on Tuesday, March 15, 2022

Nginx配置

http {
    keepalive_timeout  65;
    
    upstream upstream_name{
        server 192.168.0.28:8001;
        server 192.168.0.28:8002;
    }

    server {
        listen       8080;
        server_name  localhost;

        location / {
            proxy_pass http://upstream_name;#请求转向upstream_name定义的服务器列表
            proxy_set_header Host $host;#将请求头转发给后端服务器
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
            #client_max_body_size 10m;#允许客户端请求的最大单文件字节数
            #client_body_buffer_size 128k;#缓冲区代理缓冲用户端请求的最大字节数
            #proxy_connect_timeout 90;#nginx跟后端服务器连接超时时间(代理连接超时)
            #proxy_send_timeout 90;#后端服务器数据回传时间(代理发送超时)
            #proxy_read_timeout 90;#连接成功后,后端服务器响应时间(代理接收超时)
            #proxy_buffer_size 4k;#设置代理服务器(nginx)保存用户头信息的缓冲区大小
            #proxy_buffers 4 32k;#proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
            #proxy_busy_buffers_size 64k;#高负荷下缓冲大小(proxy_buffers*2)
            #proxy_temp_file_write_size 64k;#设定缓存文件夹大小,大于这个值,将从upstream服务器传
        }
    }
}

Nginx负载均衡策略

1 轮询(默认)

参数 描述
fail_timeout 与max_fails结合使用
max_fails 设置在fail_timeout参数设置的时间内最大失败次数,如果在这个时间内,所有针对该服务器的请求都失败了,那么认为该服务器会被认为是停机了
fail_time 服务器会被认为停机的时间长度,默认为10s。
backup 标记该服务器为备用服务器。当主服务器停止时,请求会被发送到它这里。
down 标记服务器永久停机了。
 upstream upstream_name{
     server 192.168.0.28:8001;
     server 192.168.0.28:8002;
 }

2 权重

通过weight参数制定轮询的几率,weight默认为1

upstream foo {
    server localhost:8001 weight=2;
    server localhost:8002;
    server localhost:8003 backup;
    server localhost:8004 max_fails=3 fail_timeout=20s;
}

3 ip_hash

通过对ip进行hash,确保同一个客户端请求一直落在相同服务器上

upstream foo {
    ip_hash;
    server localhost:8001 weight=2;
    server localhost:8002;
    server localhost:8003;
    server localhost:8004 max_fails=3 fail_timeout=20s;
}

4 least_conn 最小连接

把请求转发给连接数较少的后端服务器

upstream foo {
    least_conn;
    server localhost:8001 weight=2;
    server localhost:8002;
    server localhost:8003 backup;
    server localhost:8004 max_fails=3 fail_timeout=20s;
}

在某个ip请求失败后会把请求打到其他ip上进行重试,默认参数是0(不限制重试次数)