
配置 Nginx 的负载均衡功能可以将客户端请求分发到多个后端服务器,提高系统的可用性和性能。以下是 详细步骤 和 最佳实践:
1. 基础负载均衡配置
(1) 定义后端服务器组 (upstream
)
在 http
块中定义一组后端服务器:
http {
upstream backend {
server 10.0.0.1:8080; # 后端服务器1
server 10.0.0.2:8080; # 后端服务器2
server 10.0.0.3:8080; # 后端服务器3
}
}
(2) 配置代理转发 (proxy_pass
)
在 server
块中将请求转发到后端服务器组:
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend; # 指向upstream名称
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
2. 负载均衡算法选择
Nginx 支持多种算法,根据需求选择:
算法 | 配置指令 | 适用场景 |
---|---|---|
轮询(默认) | 无需指定 | 后端服务器性能均衡的无状态服务 |
加权轮询 | server ... weight=3; |
后端服务器配置不均(权重越高,请求越多) |
IP 哈希 | ip_hash; |
需要会话保持(如用户登录状态) |
最少连接 | least_conn; |
后端服务器处理时间差异大 |
随机(带权重) | random; |
避免轮询热点 |
示例:加权轮询
upstream backend {
server 10.0.0.1:8080 weight=3; # 处理3倍请求
server 10.0.0.2:8080 weight=1;
}
示例:IP 哈希
upstream backend {
ip_hash;
server 10.0.0.1:8080;
server 10.0.0.2:8080;
}
3. 健康检查与故障转移
自动标记不可用服务器并启用备用节点:
upstream backend {
server 10.0.0.1:8080 max_fails=3 fail_timeout=30s; # 允许失败3次,超时30秒
server 10.0.0.2:8080 backup; # 备用服务器(主节点全部不可用时启用)
}
- 参数说明:
max_fails
:最大失败次数。fail_timeout
:服务器恢复时间。backup
:标记为备用节点。
4. 高级优化配置
(1) 长连接复用
减少连接建立开销:
upstream backend {
server 10.0.0.1:8080;
keepalive 32; # 每个Worker保持的连接池大小
}
server {
location / {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
(2) 动态DNS解析
自动更新后端服务器IP(适用于云环境):
upstream backend {
server backend.example.com resolve; # 定期解析域名
resolver 8.8.8.8 valid=30s; # 指定DNS服务器和缓存时间
}
(3) 分片缓存
缓存后端响应,减轻负载:
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m;
server {
location / {
proxy_pass http://backend;
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
}
}
5. 完整配置示例
http {
upstream backend {
least_conn; # 最少连接算法
server 10.0.0.1:8080 weight=2 max_fails=3 fail_timeout=30s;
server 10.0.0.2:8080;
server 10.0.0.3:8080 backup;
keepalive 32;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 超时控制
proxy_connect_timeout 3s;
proxy_read_timeout 10s;
}
# 健康检查端点(可选)
location /health {
access_log off;
return 200 "OK";
}
}
}
6. 验证与监控
(1) 测试负载均衡
# 模拟请求(观察后端服务器日志)
for i in {1..10}; do curl http://example.com; done
(2) 监控状态
Nginx 状态页(需编译
ngx_http_stub_status_module
):location /nginx_status { stub_status on; allow 127.0.0.1; deny all; }
访问
http://localhost/nginx_status
查看活跃连接数。第三方工具:
- Prometheus + Grafana
- Zabbix
常见问题
- 502 Bad Gateway
- 检查后端服务是否运行,防火墙是否放行端口。
- 负载不均
- 调整算法(如改用
least_conn
)或权重。
- 调整算法(如改用
- DNS 解析失败
- 确保
resolver
配置正确,网络可达。
- 确保
总结
- 基础步骤:定义
upstream
→ 配置proxy_pass
→ 选择算法。 - 关键优化:健康检查、长连接、缓存。
- 生产建议:
- 使用最少连接或IP哈希算法维持会话。
- 启用健康检查避免请求转发到故障节点。
- 监控后端服务器负载及时扩容。
学在每日,进无止境!更多精彩内容请关注微信公众号。

原文出处:
内容由AI生成仅供参考,请勿使用于商业用途。如若转载请注明原文及出处。
出处地址:http://www.07sucai.com/tech/970.html
版权声明:本文来源地址若非本站均为转载,若侵害到您的权利,请及时联系我们,我们会在第一时间进行处理。