记录 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 主动健康检查与服务网格流量管理的对比。