温馨提示×

linux nginx如何做负载均衡

小樊
40
2026-10-19 14:19:46
栏目: 云计算

在 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 等。


二、安装 Nginx(如未安装)

# CentOS / Rocky / Alma
yum install -y nginx

# Ubuntu / Debian
apt update
apt install -y nginx

启动:

systemctl start nginx
systemctl enable nginx

三、核心配置(重点)

1️⃣ 定义后端服务器组(upstream)

编辑 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:权重(请求更多)
  • 默认端口可省略(如 80)

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

四、负载均衡策略(重点)

✅ 1. 轮询(默认)

upstream backend {
    server 192.168.1.11;
    server 192.168.1.12;
}

→ 请求平均分配


✅ 2. 权重(常用)

server 192.168.1.11 weight=3;
server 192.168.1.12 weight=1;

✅ 3. IP Hash(会话保持)

upstream backend {
    ip_hash;
    server 192.168.1.11;
    server 192.168.1.12;
}

→ 同一 IP 永远访问同一台服务器


✅ 4. least_conn(最少连接)

upstream backend {
    least_conn;
    server 192.168.1.11;
    server 192.168.1.12;
}

→ 谁闲发给谁


✅ 5. fair(需第三方模块)

upstream backend {
    fair;
    server 192.168.1.11;
    server 192.168.1.12;
}

五、健康检查(非常重要)

基础(Nginx 自带)

server 192.168.1.11 max_fails=3 fail_timeout=30s;
  • 30 秒内失败 3 次 → 暂时剔除

高级(nginx-plus / 第三方)

  • health_check
  • nginx_upstream_check_module

六、HTTPS 负载均衡(示例)

server {
    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 转发 + 策略控制分发

如果你需要:

  • ✅ Nginx + Spring Boot
  • ✅ Nginx + WebSocket
  • ✅ Nginx + Docker
  • ✅ keepalived 高可用

告诉我你的使用场景,我可以直接给你完整配置。

0 踩