如何配置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
相关产品推荐
相关产品推荐

