在 Linux 上使用 Nginx 做负载均衡,本质是利用 Nginx 的 upstream 模块,把客户端请求分发到多台后端服务器。下面从原理 → 配置 → 常用策略 → 示例 → 健康检查一步步说明。
客户端
|
Nginx(负载均衡器)
|---> 后端服务器1 (192.168.1.11)
|---> 后端服务器2 (192.168.1.12)
|---> 后端服务器3 (192.168.1.13)
Nginx 通常在 80 / 443,后端可以是 Tomcat / Spring Boot / Node / PHP 等。
# CentOS / Rocky / Alma
yum install -y nginx
# Ubuntu / Debian
apt update
apt install -y nginx
启动:
systemctl start nginx
systemctl enable nginx
编辑 Nginx 配置(推荐新建文件):
vim /etc/nginx/conf.d/upstream.conf
upstream backend {
server 192.168.1.11:8080 weight=2;
server 192.168.1.12:8080;
server 192.168.1.13:8080;
}
说明:
weight=2:权重(请求更多)vim /etc/nginx/conf.d/loadbalance.conf
server {
listen 80;
server_name 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;
}
}
测试并重启:
nginx -t
systemctl restart nginx
upstream backend {
server 192.168.1.11;
server 192.168.1.12;
}
→ 请求平均分配
server 192.168.1.11 weight=3;
server 192.168.1.12 weight=1;
upstream backend {
ip_hash;
server 192.168.1.11;
server 192.168.1.12;
}
→ 同一 IP 永远访问同一台服务器
upstream backend {
least_conn;
server 192.168.1.11;
server 192.168.1.12;
}
→ 谁闲发给谁
upstream backend {
fair;
server 192.168.1.11;
server 192.168.1.12;
}
server 192.168.1.11 max_fails=3 fail_timeout=30s;
health_checknginx_upstream_check_moduleserver {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
location / {
proxy_pass http://backend;
}
}
curl http://example.com
多次访问,观察不同后端日志或返回内容。
❌ 后端拿不到真实 IP
✅ 必须加:
proxy_set_header X-Real-IP $remote_addr;
❌ session 丢失
✅ 用 ip_hash 或 Redis 共享 session
❌ 防火墙未开放
✅ 后端端口必须允许 Nginx 访问
Nginx 负载均衡 = upstream 定义后端 + proxy_pass 转发 + 策略控制分发
如果你需要:
告诉我你的使用场景,我可以直接给你完整配置。