插件窝 干货文章 Nginx负载均衡配置,打造高可用Web集群

Nginx负载均衡配置,打造高可用Web集群

backend server example Nginx 1056    来源:    2025-04-16

Nginx负载均衡配置:打造高可用Web集群指南

一、负载均衡基础概念

负载均衡是通过将网络流量分发到多个服务器来提高系统性能、可靠性和可用性的技术。Nginx作为高性能的反向代理服务器,可以实现HTTP、HTTPS、TCP和UDP等多种协议的负载均衡。

二、Nginx负载均衡配置核心

1. 基本配置结构

http {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }

    server {
        listen 80;

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

2. 负载均衡算法

Nginx支持多种负载均衡算法:

  • 轮询(round-robin):默认算法,请求按时间顺序分配到不同服务器
  • 加权轮询(weighted round-robin):根据服务器权重分配
  • 最少连接(least_conn):优先分配给当前连接数最少的服务器
  • IP哈希(ip_hash):基于客户端IP的哈希分配,保证同一IP访问同一服务器
  • 通用哈希(hash):基于任意键的哈希分配
upstream backend {
    # 加权轮询示例
    server backend1.example.com weight=3;
    server backend2.example.com weight=2;
    server backend3.example.com;

    # 最少连接示例
    # least_conn;

    # IP哈希示例
    # ip_hash;

    # 通用哈希示例
    # hash $request_uri consistent;
}

三、高可用性配置

1. 健康检查

upstream backend {
    server backend1.example.com max_fails=3 fail_timeout=30s;
    server backend2.example.com max_fails=3 fail_timeout=30s;

    # 被动健康检查参数
    # max_fails - 失败次数阈值
    # fail_timeout - 失败后暂停时间
}

2. 主动健康检查(需要Nginx Plus或第三方模块)

upstream backend {
    zone backend 64k;
    server backend1.example.com;
    server backend2.example.com;

    health_check interval=5s fails=3 passes=2 uri=/health;
}

3. 会话保持

upstream backend {
    ip_hash;  # 基于IP的会话保持

    # 或者使用cookie
    # sticky cookie srv_id expires=1h domain=.example.com path=/;

    server backend1.example.com;
    server backend2.example.com;
}

四、高级配置技巧

1. 多级负载均衡

# 第一级负载均衡
upstream frontend {
    server nginx-lb1.example.com;
    server nginx-lb2.example.com;
}

# 第二级负载均衡
upstream backend {
    server app-server1.example.com;
    server app-server2.example.com;
    server app-server3.example.com;
}

2. TCP/UDP负载均衡

stream {
    upstream tcp_backend {
        server backend1.example.com:3306;
        server backend2.example.com:3306;
    }

    server {
        listen 3306;
        proxy_pass tcp_backend;
    }
}

3. 动态配置(Nginx Plus)

upstream backend {
    zone backend 64k;
    state /var/lib/nginx/state/backend.conf;

    server backend1.example.com resolve;
    server backend2.example.com resolve;
}

五、监控与维护

1. 状态监控(Nginx Plus或开源模块)

server {
    listen 8080;

    location /status {
        stub_status;
        allow 192.168.1.0/24;
        deny all;
    }

    location /upstream_conf {
        upstream_conf;
        allow 127.0.0.1;
        deny all;
    }
}

2. 日志配置

log_format upstream_log '$remote_addr - $remote_user [$time_local] '
                       '"$request" $status $body_bytes_sent '
                       '"$http_referer" "$http_user_agent" '
                       'rt=$request_time uct="$upstream_connect_time" '
                       'uht="$upstream_header_time" urt="$upstream_response_time" '
                       'upstream_addr=$upstream_addr';

access_log /var/log/nginx/access.log upstream_log;

六、安全配置

upstream backend {
    server backend1.example.com:443;
    server backend2.example.com:443;
}

server {
    listen 443 ssl;
    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    location / {
        proxy_pass https://backend;
        proxy_ssl_verify on;
        proxy_ssl_trusted_certificate /path/to/ca.pem;
        proxy_ssl_verify_depth 2;
    }
}

七、性能优化建议

  1. 调整缓冲区大小:
proxy_buffers 16 32k;
proxy_buffer_size 64k;
proxy_busy_buffers_size 128k;
  1. 启用连接复用:
upstream backend {
    keepalive 32;
    server backend1.example.com;
    server backend2.example.com;
}
  1. 启用响应缓存:
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;
proxy_cache_key "$scheme$request_method$host$request_uri";

通过以上配置,您可以构建一个高性能、高可用的Web集群系统。根据实际业务需求和环境特点,可以灵活调整各项参数以达到最佳效果。