Nginx负载均衡配置,upstream多台服务器
时间:2026-10-7 07:43 作者:emer 分类: 无
前言
网站访问量上来了,一台服务器扛不住,想用多台服务器一起跑。Nginx 的负载均衡功能就是干这个的:前面一台 Nginx 当入口,后面多台服务器一起干活。
什么是负载均衡
用户请求 → Nginx(负载均衡)→ 服务器A
→ 服务器B
→ 服务器C
Nginx 把请求按规则分发到不同的后端服务器,分担压力。
基础配置
第一步:定义 upstream
在 http 块里定义后端服务器组:
upstream backend {
server 192.168.1.101:80;
server 192.168.1.102:80;
server 192.168.1.103:80;
}
第二步:反向代理到后端
server {
listen 80;
server_name www.example.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
负载均衡策略
轮询(默认)
默认就是轮询,一个一个轮流来。
upstream backend {
server 192.168.1.101;
server 192.168.1.102;
}
加权轮询
服务器性能不一样,性能好的多分点请求:
upstream backend {
server 192.168.1.101 weight=3;
server 192.168.1.102 weight=1;
}
意思是:每4个请求,3个给101,1个给102。
ip_hash
同一个用户的请求永远打到同一台服务器(解决 session 问题):
upstream backend {
ip_hash;
server 192.168.1.101;
server 192.168.1.102;
}
健康检查
某台服务器挂了,Nginx 自动把它踢出去:
upstream backend {
server 192.168.1.101 max_fails=3 fail_timeout=30s;
server 192.168.1.102 max_fails=3 fail_timeout=30s;
}
意思是:3次失败就暂停30秒不发请求给它。
完整配置示例
http {
upstream backend {
server 192.168.1.101 weight=3 max_fails=3 fail_timeout=30s;
server 192.168.1.102 weight=1 max_fails=3 fail_timeout=30s;
}
server {
listen 80;
server_name www.example.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
常见坑
坑1:session 不一致
用户登录了,刷新一下又掉登录。
原因: 轮询把请求分到不同服务器,session 没共享。
解决: 用 ip_hash,或者用 Redis 统一存 session。
坑2:后端服务器改了但 Nginx 没生效
加了一台新服务器,配置也写了,但没重载。
解决: nginx -s reload。
坑3:后端服务端口不对
后端跑在 8080 端口,upstream 里写的 80。
解决: upstream 里写对端口。
坑4:后端获取不到真实 IP
后端日志里记的都是 Nginx 的 IP。
解决: 加 X-Forwarded-For 头:
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
总结
负载均衡就两步:
- upstream 定义后端服务器列表
- proxy_pass 转发到 upstream
记住: 多台服务器用负载均衡,记得处理 session 共享问题。
遇到问题加QQ23979811 协助处理