API聚合中转站负载均衡配置实战:Nginx分流与健康检查

1. 你需要做哪些准备工作

在动手配置 API聚合中转站的负载均衡之前,请确认以下条件已满足:

  • 你至少有 两台服务器或两个API节点(可以是同一台机器不同端口模拟)。
  • 任一台服务器上安装了 Nginx(版本建议 1.18+),如果还没装,用 yum install nginx(CentOS)或 apt install nginx(Ubuntu)。
  • 知道每个API节点的地址和端口(例如 http://192.168.1.10:8080http://192.168.1.11:8080)。
  • 开放了Nginx的监听端口(默认80)以及后端节点的端口。

如果你用的是宝塔面板,也可以直接在面板里操作,但本文以原生Nginx配置为例,更通用。

2. 编辑Nginx配置文件,实现分流与健康检查

Nginx的负载均衡核心是 upstream 模块,配合 proxy_pass 指向它即可。
下面给出一个标准的配置片段,假设你的API聚合中转站入口域名为 api.example.com

2.1 创建 upstream 组

打开Nginx配置文件(通常位于 /etc/nginx/nginx.conf/etc/nginx/conf.d/default.conf),在 server外部 添加:

upstream api_backend {
    # 默认轮询策略,按请求依次分发
    server 192.168.1.10:8080 weight=3 max_fails=3 fail_timeout=30s;
    server 192.168.1.11:8080 weight=1 max_fails=3 fail_timeout=30s;
    # 可选:添加健康检查,需要 ngx_http_upstream_check_module(编译安装,或使用商业版)
    # 如果未开启健康检查,建议 keepalive 连接池加速
    keepalive 64;
}

说明:

  • weight=3:权重,数值越大分配请求越多。
  • max_fails=3:连续失败3次后标记为不可用。
  • fail_timeout=30s:标记不可用后等待30秒再重新尝试。
  • keepalive:保持连接池,减少握手开销。

2.2 配置 server 块转发请求

server 块内,添加 location 规则:

server {
    listen 80;
    server_name api.example.com;

    location / {
        proxy_pass http://api_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;
        proxy_set_header X-Forwarded-Proto $scheme;

        # 超时设置,防止某个后端卡死
        proxy_connect_timeout 5s;
        proxy_read_timeout 60s;
        proxy_send_timeout 60s;
    }
}

如果只对特定路径(如 /api/)做分发,可修改 location /api/

2.3 检查并重载Nginx

nginx -t                    # 检查语法
systemctl reload nginx      # 或 nginx -s reload

没有报错说明配置生效。

3. 避坑指南:这些细节容易导致负载均衡失效

  • 后端节点必须返回正确的状态码:如果后端API无响应或返回非200,Nginx会把请求继续转发给其他节点。但如果节点一直返回500但Nginx认为连接成功,就仍会分发。建议后端配合 /health 端点返回200。
  • keepalive 与健康检查冲突:默认upstream模块不支持被动健康检查,上面的 max_fails 只能检测连接失败或超时。若需要主动探测,可考虑集成 nginx_upstream_check_module(编译安装)或使用商业版OpenResty。
  • 权重分配不均:如果某个节点性能较差,但权重过高,会导致该节点过载。建议先测试各节点平响应对再设置权重。
  • 日志没有显示来源:记得添加 proxy_set_header X-Real-IP 等 header,否则后端无法获取真实客户端IP。

4. 如何验证分流是否正常

4.1 通过日志查看

在Nginx http 块中配置日志格式(已有则忽略):

log_format upstream '$remote_addr - $upstream_addr - $request - $status';
access_log /var/log/nginx/access.log upstream;

然后发起几次请求,查看日志:

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

你会看到类似 192.168.1.100 - 192.168.1.10:8080 - GET /api/v1/data - 200,说明发到了第一个节点;
下次请求可能变成第二个节点。

4.2 编写简易测试脚本

使用 curl 连续请求100次,统计每个节点接收的次数:

for i in $(seq 1 100); do curl -s -o /dev/null http://api.example.com/api/health; done
# 然后检查后端节点访问日志确认次数

如果权重为3:1,理想比例大约是75:25。

4.3 模拟节点故障

临时停掉其中一个后端服务:

systemctl stop your-api-service   # 或直接kill端口进程

再发起请求,Nginx应自动把流量全部转发到正常节点,访问日志里 upstream_addr 只显示健康节点。
等待 fail_timeout 过后,Nginx会尝试恢复连接。

5. 常见问题解答

Q:配置后发现访问全是502怎么回事?
A:最常见原因是后端节点没跑起来或端口没放行。检查 systemctl status nginxnetstat -tlnp | grep 8080。也可以尝试直接访问后端地址确认。

Q:Nginx不轮询,总是发到一个节点?
A:如果用了 ip_hashsticky 会话保持,请求会固定发到同一节点。检查 upstream 里是否加了相关指令。本教程默认轮询。

Q:负载均衡之后,API聚合节点如何获取真实IP?
A:确保 proxy_set_header 包含 X-Real-IPX-Forwarded-For,后端程序读取这些头即可。

Q:如何实现更精细的健康检查?
A:可以结合第三方模块(如 ngx_healthcheck_module)或使用 nginx-plus 商业版;最简单的方式是后端提供一个 /health 接口,然后配合 http_healthcheck_module 或使用独立的探活工具(如 consul)。

6. 写在最后

完成 API聚合中转站的负载均衡配置后,你的系统可以平滑分发请求、自动容错,访问体验和稳定性都会明显提升。
如果遇到异常,优先回顾 避坑指南 中的细节,并检查Nginx错误日志 /var/log/nginx/error.log
你也可以继续在文章末尾的标签中找到更多相关教程来拓展学习。

分享到:
上一篇
企业合规MaaS模型中转平台搭建教程
下一篇
家用住宅机器散热降噪改造:家用服务器散热降噪改造
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意