You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Nginx实现双Node.js REST API服务器的负载均衡?

配置Nginx作为两台Node.js REST API服务器的负载均衡器

没问题,我来一步步教你完成这个配置——假设你已经确认两台Node.js服务器上的API都正常运行(比如都监听在3000端口,要是你的端口不一样,替换成实际的就行),接下来按以下步骤操作:

1. 创建Nginx负载均衡配置文件

在Ubuntu 16.04上,推荐给负载均衡单独建一个站点配置文件,比直接改主配置更清晰。先打开终端,创建并编辑配置文件:

sudo nano /etc/nginx/sites-available/api-load-balancer.conf

把下面的内容粘贴进去,记得替换掉示例中的服务器IP、端口和域名:

# 定义后端Node.js服务器集群
upstream node_api_cluster {
    # 第一台API服务器的内网/公网IP + 端口,weight是权重,数值越大分配的请求越多
    server 192.168.1.100:3000 weight=1;
    # 第二台API服务器
    server 192.168.1.101:3000 weight=1;

    # 可选:开启健康检查,自动剔除故障服务器
    # max_fails=3:连续3次请求失败就标记为不可用
    # fail_timeout=30s:30秒后重新尝试连接故障服务器
    server 192.168.1.100:3000 weight=1 max_fails=3 fail_timeout=30s;
    server 192.168.1.101:3000 weight=1 max_fails=3 fail_timeout=30s;

    # 可选:会话保持(如果你的API需要绑定用户会话到特定服务器)
    # 取消下面这行注释即可,它会根据客户端IP分配固定服务器
    # ip_hash;
}

# 反向代理的Server块,处理外部请求
server {
    listen 80;
    server_name your-api-domain.com; # 替换成你的域名或者Nginx服务器的公网IP

    location / {
        # 把请求转发到刚才定义的后端集群
        proxy_pass http://node_api_cluster;

        # 传递必要的请求头,让Node服务器能获取真实客户端信息
        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_send_timeout 10s;
        proxy_read_timeout 10s;
    }
}

2. 启用配置并重启Nginx

先把配置文件链接到Nginx的启用站点目录:

sudo ln -s /etc/nginx/sites-available/api-load-balancer.conf /etc/nginx/sites-enabled/

然后测试配置有没有语法错误,这一步很重要,避免配置错了导致Nginx崩了:

sudo nginx -t

如果输出是nginx: configuration file /etc/nginx/nginx.conf test is successful,就可以重启Nginx生效:

sudo systemctl restart nginx

3. 验证负载均衡效果

现在你可以多次访问Nginx服务器的域名/IP,然后去两台Node服务器的日志里看(比如用pm2 logs或者查看你自己的应用日志文件),就能看到请求被轮流分配到两台服务器上了。如果其中一台服务器宕机,开启了健康检查的话,Nginx会自动把请求都转到另一台可用的服务器上。

额外小贴士

  • 如果你的API用了HTTPS,记得在Nginx的Server块里配置SSL证书,监听443端口,同时把X-Forwarded-Proto设置为https。
  • 权重(weight)可以根据服务器性能调整,比如性能好的服务器设为weight=2,它会接收两倍于另一台的请求。
  • 要是不需要会话保持,别开ip_hash,Nginx默认的轮询策略就足够用了,能均匀分配请求。

内容的提问来源于stack exchange,提问作者APPGIS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:32:59