nginx upstream 高级配置

upstream 模块的高级用法:健康检查、会话保持、慢启动

语法

upstream name { ... }

参数

参数说明示例级别
least_conn 最少连接数策略 least_conn; 常用
ip_hash IP 哈希(会话保持) ip_hash; 常用
hash 自定义哈希键 hash $request_uri consistent; 进阶
keepalive 与后端保持长连接数 keepalive 32; 进阶
down 标记服务器为下线 server 127.0.0.1:3001 down; 常用

示例

会话保持(IP Hash)

upstream app {
    ip_hash;
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
    server 192.168.1.12:8080;
}
同一 IP 始终访问同一后端

长连接优化

upstream backend {
    server 127.0.0.1:3000;
    keepalive 32;
}
server {
    location / {
        proxy_pass http://backend;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
    }
}
减少 TCP 连接建立开销

灰度发布

upstream app_v1 {
    server 127.0.0.1:3001;
}
upstream app_v2 {
    server 127.0.0.1:3002;
}
server {
    location / {
        # 10% 流量到新版本
        set $backend app_v1;
        if ($cookie_version = "v2") {
            set $backend app_v2;
        }
        proxy_pass http://$backend;
    }
}
通过 Cookie 控制流量分配

常见错误

keepalive 不生效 必须设置 proxy_http_version 1.1 和清空 Connection 头

技巧

相关命令