温馨提示×

linux nginx如何做负载

小樊
33
2026-10-07 21:28:20
栏目: 智能运维

在 Linux 上使用 Nginx 做负载均衡,本质上就是利用 Nginx 的 反向代理 + upstream 模块 把请求分发到多台后端服务器。下面从「原理 → 配置 → 常用策略 → 示例 → 健康检查」一步步说明。


一、基本架构

客户端
   |
  Nginx(负载均衡器)
   |------------------\
   |        |         |
后端1    后端2     后端3

Nginx 监听一个端口(如 80 / 443),将请求转发到 upstream 中定义的一组服务器。


二、最基础的负载均衡配置

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

http {
    upstream backend {
        server 192.168.1.101:8080;
        server 192.168.1.102:8080;
        server 192.168.1.103:8080;
    }
}

2️⃣ 配置反向代理

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 默认使用 轮询(round-robin) 方式分发请求。


三、常用负载均衡策略

1️⃣ 轮询(默认)

upstream backend {
    server 192.168.1.101;
    server 192.168.1.102;
}

2️⃣ 加权轮询

upstream backend {
    server 192.168.1.101 weight=3;
    server 192.168.1.102 weight=1;
}

3️⃣ IP Hash(同一 IP 固定后端,适合 session)

upstream backend {
    ip_hash;
    server 192.168.1.101;
    server 192.168.1.102;
}

4️⃣ 最少连接(least_conn)

upstream backend {
    least_conn;
    server 192.168.1.101;
    server 192.168.1.102;
}

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

Nginx 开源版(基础)

server 192.168.1.101 max_fails=3 fail_timeout=30s;

含义:

  • 30 秒内失败 3 次
  • 暂停该节点 30 秒

Nginx Plus(商业版,高级健康检查)

health_check;

五、示例:完整配置

http {
    upstream app {
        least_conn;
        server 10.0.0.1:8080 weight=2;
        server 10.0.0.2:8080;
        server 10.0.0.3:8080 backup;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://app;
            proxy_set_header Host $host;
        }
    }
}

backup:主节点都挂了才启用


六、HTTPS + 负载(常见)

server {
    listen 443 ssl;
    ssl_certificate /etc/nginx/ssl/cert.pem;
    ssl_certificate_key /etc/nginx/ssl/key.pem;

    location / {
        proxy_pass http://backend;
    }
}

七、验证 & 重载

nginx -t
systemctl reload nginx

八、常见坑

❌ session 丢失 → 用 ip_hash 或 Redis 存 session
❌ 后端端口不对
❌ 防火墙未开放
❌ 未配置 Host 头


如果你愿意,我可以:

  • 给你 Docker + Nginx 负载示例
  • 教你 Nginx + Keepalived 高可用
  • 按你的 业务场景(API / 网站 / WebSocket) 给配置

你现在是哪种使用场景?

0 踩