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

通过Nginx部署两个Node.js实例失败:仅一个实例正常运行求助

解决Nginx代理多个Node.js实例的问题

嘿,我来帮你排查这个问题!你现在遇到的情况是80端口的代理能正常访问,但81端口的/test路径无法连接到Node.js 3001实例,咱们一步步来找出问题并解决:

第一步:确认Node.js 3001实例本身可访问

先排除后端服务的问题——直接在浏览器里访问 http://127.0.0.1:3001,看能不能正常加载内容:

  • 如果访问失败:检查你的Node.js代码是否正确监听了3001端口,有没有报错信息,或者用netstat -ano | findstr :3001(Windows命令)查看端口是否被其他程序占用。
  • 如果访问正常:那问题出在Nginx的配置或网络层面,继续往下排查。

第二步:修正Nginx代理路径的常见坑

你的第二个server配置里,proxy_pass的地址末尾没有加斜杠,这是很多新手会踩的坑:
当你访问 http://localhost:81/test 时,Nginx会把完整的/test路径传递给后端,也就是代理到 http://127.0.0.1:3001/test。如果你的Node.js 3001实例没有配置/test这个路由,就会返回404错误。

解决办法有两种,选一种适合你的:

方案A:让Nginx去掉/test前缀后代理

修改proxy_pass,在末尾加上斜杠:

server {
    listen 81;
    server_name localhost;
    location /test {
        proxy_pass http://127.0.0.1:3001/;  # 注意末尾的斜杠
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

这样配置后,访问http://localhost:81/test/xxx会被代理到http://127.0.0.1:3001/xxx,后端只需要处理根路径的路由即可。

方案B:给Node.js 3001实例添加/test路由

如果你的业务逻辑需要/test前缀,那就在Node.js代码里配置对应的路由(比如Express里的app.use('/test', router)),这样Nginx传递的/test路径就能被后端正确处理。

第三步:确保Nginx重载了配置

修改完nginx.conf后,必须让Nginx加载新配置才能生效:
在Windows上,打开管理员身份的命令提示符,进入Nginx安装目录(比如C:\nginx),执行命令:

nginx -s reload

如果之前Nginx没启动,先执行nginx启动服务,再重载配置。

第四步:检查Windows防火墙是否开放81端口

Windows防火墙可能会阻止81端口的入站请求,导致无法访问http://localhost:81:

  • 可以临时关闭防火墙测试,如果能访问了,就去防火墙的“高级设置”里添加一条允许Nginx通过81端口的入站规则。

第五步:查看Nginx错误日志定位问题

如果以上步骤都没解决,去Nginx的logs目录打开error.log,看看有没有相关错误信息:

  • 比如connect() failed (10061: No connection could be made because the target machine actively refused it):说明3001实例没启动或者端口不对。
  • 比如404 Not Found:说明后端没有对应的路由,回到第二步调整配置。

按照这些步骤排查,应该就能解决第二个实例无法访问的问题啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:25:41