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

hmtdttj4  于 2023-05-16  发布在  Nginx
关注(0)|答案(7)|浏览(168)

502 bad gateway错误:当我检查nginx错误日志时,我发现:
2017/05/06 02:36:04 [error] 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”,引用者:“主机名-1
我在网上搜索了很多,但什么也没找到。这里需要注意的一点是,这种间歇性错误只出现在特定的页面上。
这可能是代码问题吗?或者nginx配置问题>有人可以在这里帮助我吗?
我的nginx conf:

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;
}
bbuxkriu

bbuxkriu1#

502错误通常是由于NGINX无法将请求传递到“上游”,在这种情况下是您的Node.js服务器(这也是错误消息所建议的:* “连接被拒绝”*”)。
它可能会崩溃并重新启动,因此请检查其日志文件以查看导致崩溃的原因。

js4nwp54

js4nwp542#

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

  • 在任何控制台中,通过运行wget https://example.com/api/v1/ping来仔细检查是否出现错误,或者如果您通过ssh进入生产控制台,则可以执行wget 127.0.0.1:3006/api/v1/ping
  • 确保节点运行正常。在pm2中使用npm run build然后使用npm run start启动节点后,确保pm2使用pm2 status正确运行
  • 使用pm2 logs检查pm2的错误日志。这应该会显示API中console.log消息的正常输出。它是否显示正在正确的端口上运行?你可以让你的API在启动时记录你的端口,以确认它在正确的端口上。检查其他错误。您可以使用pm2 flush清除pm2中的所有日志
  • 现在确保您的服务器正在侦听您指定的端口上的传入流量sudo netstat -plunt将为您提供打开的端口和正在使用它们的程序的列表。
  • 您可以使用sudo ps aux | grep node获取有关节点应用程序的更多信息,以获取侦听端口的所有节点程序,它将显示节点文件路径的完整路径。您可以匹配上一个命令中的PID,以确保端口匹配。
  • 检查nginx的状态以确保它正在运行:sudo systemctl nginx status或将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来检查nginx配置文件的状态,以确保配置中没有任何错误
  • 检查/etc/nginx/nginx.config中的Nginx配置文件。此文件可能包括sites-enabled/default配置文件。请注意检查sites-available/default配置文件,以确保所有端口和服务器名称都是正确的,并确保没有重复(很可能会显示在错误日志中)。
  • 对于配置文件的任何更改,您需要使用sudo service nginx restart重新启动nginx系统

希望这对你们中的一些人有帮助!:)Happy Coding

taor4pac

taor4pac3#

在我的情况下,我收到了同样的错误,但当我检查我的日志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的大小。我就能解决我的问题了

u1ehiz5o

u1ehiz5o4#

我们得到了一个502,因为在require调用中路径的大小写不正确,在本例中是文件名。代码在本地执行(在VS Code中),但不在部署时执行。
const repoName = require('../data/reponame');//这应该是repoName

nkcskrwz

nkcskrwz5#

在我的场景中,我已经将图像保存在本地资产文件夹中,一旦我点击了post/patch请求,pm2就会继续监视并重新启动我的服务器,因为图像是新保存或更新的。因此,我在pm2命令中使用--ignore-watch“images/blog”,它会忽略新的图像
我的全部命令:pm2 start "npm start" --name myblog --watch --ignore-watch "node_modules" --ignore-watch "images/blog"
注意:--ignore-watch总是忽略文件夹,即images/blog,其中我的图像将被保存和node_modules太。

rjjhvcjd

rjjhvcjd6#

简单的技巧:杀死你的nginx进程并重启你的UI

4xy9mtcn

4xy9mtcn7#

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

相关问题