Nginx 实战-03-nginx 负载均衡

Nginx 实战-03-nginx 负载均衡
最新回答
毒药

2026-07-04 15:37:10

Nginx 负载均衡配置实战指南

一、核心配置步骤
  1. 安装 Nginx

    确保系统已安装 Nginx(通过 nginx -v 检查)

    未安装时执行:

    # Ubuntu/Debiansudo apt update && sudo apt install nginx# CentOS/RHELsudo yum install epel-release && sudo yum install nginx
  2. 配置负载均衡编辑 Nginx 配置文件(通常位于 /etc/nginx/nginx.conf 或 /etc/nginx/conf.d/load-balance.conf),添加以下内容:

    http { upstream backend_servers { server 127.0.0.1:3000 weight=1; server 127.0.0.1:3001 weight=1; # 可选参数: # least_conn; # 最少连接数策略 # ip_hash; # IP 哈希固定后端 } server { listen 80; location / { proxy_pass
    http://backend_servers;
    proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }}
  3. 验证并重启 Nginx

    sudo nginx -t # 测试配置语法sudo systemctl restart nginx # 重启服务
二、负载均衡策略详解
  1. 默认策略:轮询(Round Robin)

    请求按顺序分配到各服务器(如示例配置)。

  2. 加权轮询

    通过 weight 参数分配流量比例(如 server 127.0.0.1:3000 weight=2; 表示双倍流量)。

  3. 最少连接数

    在 upstream 中添加 least_conn;,优先分配给当前连接数最少的服务器。

  4. IP 哈希

    添加 ip_hash; 实现客户端 IP 固定后端,适合会话保持场景。

三、测试验证
  1. 启动测试服务

    node app.js # 启动 3000 端口服务node app2.js # 启动 3001 端口服务
  2. 循环请求验证

    for i in {1..10}; do curl
    http://127.0.0.1;
    done

    预期结果:交替返回两个服务的响应(轮询效果)。

  3. 检查访问日志

    tail -f /var/log/nginx/access.log

    观察请求是否均匀分布到后端服务器。

四、高级配置建议
  1. 健康检查

    upstream backend_servers { server 127.0.0.1:3000 max_fails=3 fail_timeout=30s; server 127.0.0.1:3001;}

    max_fails 和 fail_timeout 实现故障自动摘除。

  2. 动态 DNS 解析

    upstream backend { server backend.example.com resolve;}

    适用于云环境自动更新的后端 IP。

  3. 性能优化

    启用 keepalive 减少连接开销:

    upstream backend { server 127.0.0.1:3000; keepalive 32;}
五、常见问题排查
  1. 502 Bad Gateway

    检查后端服务是否运行(curl localhost:3000)。

    确认 Nginx 配置中 proxy_pass 地址与后端一致。

  2. 连接超时

    调整超时参数:

    location / { proxy_connect_timeout 60s; proxy_read_timeout 60s;}
  3. 日志分析

    错误日志路径:/var/log/nginx/error.log。

通过以上步骤,您已实现 Nginx 对两个 Node.js 服务的负载均衡。如需扩展至生产环境,建议结合监控工具(如 Prometheus + Grafana)持续观察流量分布和服务器状态。