Nginx-负载均衡

1. 负载均衡策略

Nginx支持多种负载均衡算法,通过upstream模块配置:

1.1 轮询(Round Robin)

  • 默认策略,按顺序分发请求。

  • 配置示例

    nginx 复制代码
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
    }

1.2 权重(Weighted Round Robin)

  • 根据服务器权重分配流量,权重越高请求越多。

  • 适用场景:后端服务器性能不均。

  • 配置示例

    nginx 复制代码
    upstream backend {
        server backend1.example.com weight=3;  # 处理3/5的请求
        server backend2.example.com weight=2;  # 处理2/5的请求
    }

1.3 IP哈希(IP Hash)

  • 根据客户端IP的哈希值固定分配到同一服务器。

  • 适用场景:需要会话保持(如Session)。

  • 配置示例

    nginx 复制代码
    upstream backend {
        ip_hash;
        server backend1.example.com;
        server backend2.example.com;
    }
  • 注意 :与weight参数不兼容,服务器宕机可能导致会话丢失。

1.4 最少连接(Least Connections)

  • 将请求分发给当前连接数最少的服务器。

  • 适用场景:处理长连接或请求耗时差异大的服务。

  • 配置示例

    nginx 复制代码
    upstream backend {
        least_conn;
        server backend1.example.com;
        server backend2.example.com;
    }

2. 健康检查

通过max_failsfail_timeout实现被动健康检查:

2.1 参数说明

  • max_fails :在fail_timeout时间内失败次数超过此值,标记服务器不可用。
  • fail_timeout:服务器被标记为不可用的时长,之后重新尝试。

2.2 配置示例

nginx 复制代码
upstream backend {
    server backend1.example.com max_fails=3 fail_timeout=30s;
    server backend2.example.com max_fails=2 fail_timeout=20s;
}
  • 行为 :30秒内失败3次,则backend1暂停30秒;20秒内失败2次,则backend2暂停20秒。

2.3 主动健康检查(需第三方模块)

  • 使用nginx_upstream_check_module模块定期主动探测:

    nginx 复制代码
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
        check interval=3000 rise=2 fall=5 timeout=1000 type=http;
        check_http_send "GET /health HTTP/1.1\r\nHost: localhost\r\n\r\n";
        check_http_expect_alive http_2xx http_3xx;
    }
    • interval:检查间隔(毫秒)。
    • rise:成功次数后标记为健康。
    • fall:失败次数后标记为不健康。

3. 高级配置

3.1 备用服务器(Backup)

  • 当主服务器全部不可用时启用。

    nginx 复制代码
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
        server backup.example.com backup;  # 备用服务器
    }

3.2 故障转移

  • 使用proxy_next_upstream定义重试条件:

    nginx 复制代码
    location / {
        proxy_pass http://backend;
        proxy_next_upstream error timeout http_500 http_502;
    }

3.3 动态DNS解析

  • 解决后端服务器IP变更问题:

    nginx 复制代码
    resolver 8.8.8.8 valid=30s;  # 使用Google DNS,30秒刷新
    upstream backend {
        server backend.example.com resolve;  # 动态解析域名
    }

4. 场景与策略选择

场景 推荐策略 配置要点
无状态服务,服务器性能均衡 轮询 无需额外参数。
服务器性能不均 权重 按性能分配weight值。
需要会话保持 IP哈希 确保用户请求固定后端。
长连接或处理时间差异大 最少连接 优化负载分配。
高可用性要求 健康检查 + Backup 设置max_failsbackup服务器。

5. 完整配置示例

nginx 复制代码
http {
    upstream backend {
        least_conn;
        server backend1.example.com weight=3 max_fails=2 fail_timeout=15s;
        server backend2.example.com weight=2 max_fails=3 fail_timeout=20s;
        server backup.example.com backup;
    }

    server {
        listen 80;
        location / {
            proxy_pass http://backend;
            proxy_next_upstream error timeout http_500;
        }
    }
}

6. 验证与测试

  1. 语法检查

    bash 复制代码
    nginx -t
  2. 重新加载配置

    bash 复制代码
    nginx -s reload
  3. 日志监控

    bash 复制代码
    tail -f /var/log/nginx/error.log

通过合理配置策略和健康检查,Nginx能有效提升服务的可用性和性能。

相关推荐
Evan芙2 小时前
搭建nexus服务,实现本地仓库、代理仓库
java·nginx·tomcat
秋田君3 小时前
前端工程化部署入门:Windows + Nginx 实现多项目独立托管与跨域解决方案
前端·windows·nginx
Evan芙4 小时前
nginx核心配置总结,并实现nginx多虚拟主机
运维·数据库·nginx
邂逅星河浪漫7 小时前
【域名解析+反向代理】配置与实现(步骤)-SwitchHosts-Nginx
linux·nginx·反向代理·域名解析·switchhosts
sg_knight7 小时前
Nuxt 4 生产环境部署指南 (Node.js + Nginx)
运维·nginx·node.js·nuxt·ssr
中年程序员一枚11 小时前
Nginx配置运行python的uvicorn项目
chrome·python·nginx
苹果醋311 小时前
Java设计模式实战:从面向对象原则到架构设计的最佳实践
java·运维·spring boot·mysql·nginx
元气满满-樱13 小时前
Nginx负载均衡
运维·nginx·负载均衡
原神启动114 小时前
Nginx云计算大数据——安装AND版本升级(普通升级+平滑升级+失败回滚)
大数据·nginx·云计算
那你能帮帮我吗1 天前
nginx路径相关配置汇总
nginx