[英]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 以确保您的端口匹配。sudo systemctl nginx status
或用 start 替换 status 以启动它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.