温馨提示×

nginx在linux如何负载均衡

小樊
49
2026-10-29 03:27:17
栏目: 云计算

在 Linux 下,Nginx 本身就可以作为反向代理和负载均衡器,常用于将请求分发到多台后端服务器(如 Tomcat、Node、Python、PHP 等)。

下面从 原理 → 配置示例 → 常用策略 → 健康检查 → 实用建议 一步步说明。


一、Nginx 负载均衡基本原理

Nginx 通过 upstream 模块定义一组后端服务器,然后在 server 中通过 proxy_pass 将请求转发到这组服务器。

客户端 → Nginx(负载均衡) → 后端服务器1
                           → 后端服务器2
                           → 后端服务器3

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

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 中转发请求

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;
    }
}

✅ 默认使用 轮询(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;
}

➡ 101 处理 3/4 的请求


✅ 3. IP Hash(会话保持)

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

✅ 同一 IP 始终访问同一台服务器
❌ 不支持服务器动态上下线


✅ 4. least_conn(最少连接)

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

适合 请求耗时不均 的场景


✅ 5. fair(第三方模块)

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

⚠ 需要 nginx-upstream-fair 模块


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

基础方式(被动)

server 192.168.1.101 max_fails=3 fail_timeout=30s;

含义:

  • 30 秒内失败 3 次
  • 暂停该服务器 30 秒

主动健康检查(推荐)

Nginx Plus(商业)

health_check;

开源方案(常用)

  • nginx_upstream_check_module
  • 或使用 keepalived + VIP
  • 或用 HAProxy

五、完整示例(生产可用)

http {
    upstream app_cluster {
        least_conn;
        server 10.0.0.11:8080 max_fails=3 fail_timeout=20s;
        server 10.0.0.12:8080 max_fails=3 fail_timeout=20s;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://app_cluster;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_connect_timeout 5s;
            proxy_read_timeout 10s;
        }
    }
}

六、检查与生效

nginx -t
systemctl reload nginx

七、常见搭配方案

场景 推荐
Web 服务 Nginx
TCP 负载 LVS / HAProxy
高可用 Nginx + Keepalived
微服务 Nginx + Consul / K8s

如果你愿意,我可以:

  • ✅ 给你 Nginx + Keepalived 高可用方案
  • ✅ 针对 Java / PHP / Docker 场景配置
  • ✅ 帮你排查当前 Nginx 负载不均问题

你现在的后端是什么服务?

0 踩