我的服务器在 nginx 代理上使用 Node JS 运行时出现 502 Bad Gateway 错误

新手上路,请多包涵

我收到 502 bad gateway 错误:当我检查 nginx 错误日志时,我发现:

2017/05/06 02:36:04 [错误] 48176#0: *135 connect() 在连接到上游时失败(111:连接被拒绝),客户端:10.163.XX.X,服务器:abc-def-ghi,请求:“GET /favicon.ico HTTP/1.1”,上游:“ https://127.0.0.1:5300/favicon.ico ”,主机:“hostnname”,引用者:“hostname-1

我在互联网上搜索了足够多的东西,但找不到任何东西。这里要注意的一件事是,这种间歇性错误仅出现在特定页面上。

这可能是代码问题吗?或 nginx 配置问题>任何人都可以在这里帮助我。

我的一些 nginx 配置文件:

   upstream node_api_server {
    server localhost:5300 fail_timeout=0;
  }

location / {
    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_set_header Host $http_host;
    proxy_set_header X-NginX-Proxy true;
    proxy_read_timeout 5m;
    proxy_connect_timeout 5m;
    proxy_pass_header Set-Cookie;

    proxy_pass https://node_api_server;
    proxy_redirect off;
    proxy_buffer_size   128k;
    proxy_buffers   4 256k;
    proxy_busy_buffers_size   256k;
    break;
}

原文由 undefined 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.6k
2 个回答

502 错误通常是由于 NGINX 无法将请求传递给“上游”,在这种情况下是您的 Node.js 服务器(这也是错误消息所暗示的: _“连接被拒绝_”)。

它可能正在崩溃并重新启动,因此请检查其日志文件以查看导致崩溃的原因。

原文由 robertklep 发布,翻译遵循 CC BY-SA 3.0 许可协议

我对这些东西有点菜鸟,但我花了几个小时试图调试我的问题。结果是我的 API 中端口的全局变量没有被正确分配,所以节点没有监听正确的端口。由于我很少使用这些东西,所以我写下了将来应该如何解决它并想分享一下。同样,这是针对我的 API,因此您可能会略有不同(我使用的是端口 3006)。

  • 在任何控制台中,通过运行 wget https://example.com/api/v1/ping 仔细检查您是否收到错误,或者如果您通过 ssh 进入生产控制台,您可以执行 wget 127.0.0.1:3006/api/v1/ping
  • 确保该节点正常运行。在使用 npm run build 然后 npm run start 在 pm2 中启动节点后,确保 pm2 正确运行 pm2 status
  • 使用 pm2 logs 检查 pm2 的错误日志。这应该显示来自 console.log 消息的正常输出在您的 API 中。它说它在正确的端口上运行吗?你可以让你的 api 在启动时记录你的端口以确认它在正确的端口上。还要检查其他错误。您可以使用 pm2 flush
  • 现在确保您的服务器正在侦听您指定的端口上的传入流量 sudo netstat -plunt 将为您提供已打开端口的列表以及正在使用它们的程序。
  • 您可以使用 sudo ps aux | grep node 获取有关节点应用程序的更多信息 --- 让所有节点程序侦听端口,它将显示节点文件路径的完整路径。您可以匹配上一个命令中的 PID 以确保您的端口匹配。
  • 检查 nginx 的状态以确保它正在运行: sudo systemctl nginx status 或将状态替换为 start 以启动它
  • 现在确保您的 nginx 端口正在使用该传入端口。使用 sudo vim /var/log/nginx/error.log 检查 nginx 错误日志以确认您的端口和服务器名称是正确的。每次向服务器发送命令时,它都会在此处记录 502 错误和错误消息: 2021/02/20 03:05:28 [error] 26646#26646: *644 connect() failed (111: Connection refused) while connecting to upstream, client: XXX.XXX.XXX.XX, server:example.com, request: "GET /api/v1/ping HTTP/1.1", upstream: "http://127.0.0.1:3006/api/v1/ping", host: "example.com"
  • 您可以通过执行 sudo nginx -t
  • 检查 /etc/nginx/nginx.config 中的 Nginx 配置文件。该文件可能包含 sites-enabled/default 配置文件。还要注意检查 sites-available/default 配置文件,以确保所有端口和服务器名称都正确,并确保没有重复项(很可能会显示在错误日志中)。
  • 对于对配置文件所做的任何更改,您需要使用 sudo service nginx restart 重新启动 nginx 系统

希望对你们中的一些人有所帮助! :) 快乐编码

原文由 Kevin Veverka 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题