记录 Nginx 反向代理与负载均衡的常用配置和实践经验。

反向代理基础配置

将客户端请求转发到后端服务:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
server {
    listen 80;
    server_name api.example.com;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

关键 header 说明:

  • Host:传递原始域名,后端可识别请求来源。
  • X-Real-IP:传递客户端真实 IP。
  • X-Forwarded-For:代理链路 IP 记录。
  • X-Forwarded-Proto:传递原始协议(http/https)。

负载均衡配置

轮询(默认)

1
2
3
4
5
upstream backend {
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
    server 192.168.1.12:8080;
}

加权轮询

1
2
3
4
5
upstream backend {
    server 192.168.1.10:8080 weight=3;
    server 192.168.1.11:8080 weight=2;
    server 192.168.1.12:8080 weight=1;
}

IP 哈希(会话保持)

1
2
3
4
5
upstream backend {
    ip_hash;
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
}

最少连接数

1
2
3
4
5
upstream backend {
    least_conn;
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
}

健康检查

Nginx 开源版不自带主动健康检查,可用被动方式:

1
2
3
4
upstream backend {
    server 192.168.1.10:8080 max_fails=3 fail_timeout=30s;
    server 192.168.1.11:8080 max_fails=3 fail_timeout=30s;
}
  • max_fails=3:30 秒内失败 3 次则标记为不可用。
  • fail_timeout=30s:标记不可用后 30 秒内不再转发请求。

常用优化参数

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# 连接超时
proxy_connect_timeout 5s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;

# 缓冲区
proxy_buffer_size 16k;
proxy_buffers 4 32k;

# 限速
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
location /api/ {
    limit_req zone=api burst=20 nodelay;
    proxy_pass http://backend;
}

小结

Nginx 反向代理配置灵活,实际使用中需根据后端服务特性调整超时、缓冲和负载策略。后续会记录 Nginx Plus 主动健康检查与服务网格流量管理的对比。