繁体   English   中英

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

[英]502 Bad Gateway error for my server running with Node JS on nginx proxy

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

2017/05/06 02:36:04 [错误] 48176#0:*135 连接()失败(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;
}

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

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

我对这些东西有点菜鸟,但我花了几个小时试图调试我的问题。 结果是我的 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 的错误pm2 logs 这应该显示 API 中console.log消息的正常输出。 它是否说它在正确的端口上运行? 您可以让您的 api 在启动时记录您的端口,以确认它在正确的端口上。 也检查其他错误。 您可以使用pm2 flush pm2 中的所有日志
  • 现在确保您的服务器正在侦听您指定的端口上的传入流量sudo netstat -plunt将为您提供打开的端口列表以及正在使用它们的程序。
  • 您可以使用sudo ps aux | grep node获取有关节点应用程序的更多信息。 sudo ps aux | grep node让所有 node 程序监听端口,它会显示 node 文件路径的完整路径。 您可以匹配上一个命令中的 PID 以确保您的端口匹配。
  • 检查 nginx 的状态以确保它正在运行: sudo systemctl nginx status或用 start 替换 status 以启动它
  • 现在确保您的 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检查 nginx 配置文件的状态以确保配置中没有任何错误
  • 检查/etc/nginx/nginx.config的 Nginx 配置文件。 该文件可能包含sites-enabled/default配置文件。 还要注意检查sites-available/default配置文件,以确保所有端口和服务器名称都是正确的,并确保没有重复项(很可能会出现在错误日志中)。
  • 对于对配置文件所做的任何更改,您需要使用sudo service nginx restart nginx 系统

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

由于路径在 require 调用中没有正确的大小写,我们得到了 502,在这种情况下是文件名。 代码在本地(在 VS Code 中)执行,但在部署时不执行。

const repoName = require('../data/reponame'); //这应该是repoName

就我而言,我收到了同样的错误,但是当我检查 ingress-nginx 的日志时。 我找到了这个

upstream sent too big header while reading response header from upstream,
 client: xxx.xxx.xxx.xx, server: sample-site.domain, request:

为了克服这个问题,我只是增加了节点的--max-http-header-size 我能够解决我的问题。

简单的技巧:杀死您的 nginx 进程并重新启动您的 UI

确保您正在运行npm start或运行应用程序的脚本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM