云服务器负载均衡配置实战:Nginx反向代理与健康检查

为什么需要负载均衡?

当单台服务器无法承载高并发流量时,负载均衡通过将请求分发到多台后端服务器,实现水平扩展。Nginx作为高性能反向代理服务器,内置负载均衡功能,无需额外软件即可实现。

Nginx upstream基本配置

upstream backend {
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
    server 192.168.1.12:8080;
}

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,默认):请求按顺序依次分发到每台后端服务器,适合服务器配置相近的场景。

权重(Weight):根据服务器性能分配不同权重,性能强的服务器承担更多请求。

upstream backend {
    server 192.168.1.10:8080 weight=3;
    server 192.168.1.11:8080 weight=1;
}

IP哈希(ip_hash):同一客户端IP始终访问同一后端,适合需要Session保持的场景。

upstream backend {
    ip_hash;
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
}

最少连接(least_conn):将请求分发给当前活跃连接数最少的服务器,适合请求处理时间差异较大的场景。

健康检查配置

Nginx开源版支持被动健康检查,当后端节点连续返回错误时自动剔除:

upstream backend {
    server 192.168.1.10:8080 max_fails=3 fail_timeout=30s;
    server 192.168.1.11:8080 max_fails=3 fail_timeout=30s;
    server 192.168.1.12:8080 backup;  # 备用节点
}

参数说明:max_fails表示30秒内失败超过3次则标记为不可用;fail_timeout定义检测时间窗口和不可用持续时间;backup标记备用节点,仅主节点全部不可用时启用。

连接超时优化

location / {
    proxy_pass http://backend;
    proxy_connect_timeout 5s;
    proxy_read_timeout 60s;
    proxy_send_timeout 60s;
    proxy_next_upstream error timeout http_500 http_502 http_503;
}

proxy_next_upstream指定当后端返回特定错误时,自动重试其他节点,大幅提升可用性。

Session保持方案

在多节点场景下,Session保持是常见挑战。推荐方案:

  • Redis集中存储Session:所有节点共享同一Redis,最为推荐
  • IP哈希:简单但当节点变化时路由会打乱
  • JWT无状态认证:彻底解决Session问题的现代方案

验证负载均衡效果

每个后端节点返回不同内容(如节点编号),然后连续请求:for i in $(seq 1 9); do curl -s http://example.com/node; done,观察返回是否轮流切换,验证负载均衡生效。