如何解决NGINX 502错误网关错误?

时间:2020-04-17 19:57:52

标签: nginx websocket http-status-code-502

我正在使用角度应用程序中的Web套接字。我通过nginx将其连接到python后端。我发现大约90%的时间出现502个“错误的网关”错误。我将这样做:

  1. 在浏览器中加载页面并连接Web套接字
  2. Python后端将数据发送到有角度的前端
  3. 断开Web套接字
  4. 尝试重新连接Web套接字<-502 Bad Gateway错误
  5. 在Chrome中进行硬重装
  6. 在浏览器中加载页面并连接Web套接字<-否502错误

我不知道为什么会这样。我不知道为什么会出现502错误。我也无法弄清楚为什么进行硬重装可以解决此问题。我尝试过的事情:

  • 增加nginx日志级别以进行调试。日志仍然没有任何有用的信息。
  • 我没有保持任何Web套接字对象的状态。我这样做是为了防止某处缓存某些东西。
  • 我总是关闭代码为1000的Web套接字
  • 我在服务器上手动运行python服务,以便可以观看它。发生502错误时,该服务不会显示任何异常。
  • 将nginx max_fails设置为0。将fail_timeout设置为0。这些更改似乎均无效。 (我在其他SO答案中找到了这个建议)

我该找些什么来帮助我解决这个问题?

编辑:这是我的nginx conf.d文件:

server {
  listen  80;

  index index.html;
  root /var/www/mysite;

  location / {
    access_log  /var/log/nginx/mysite/ui.access.log;
    error_log /var/log/nginx/mysite/ui.error.log;
    try_files $uri $uri/ /index.html;
  }

  location /ws/ {
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_http_version 1.1;
    proxy_set_header Host $proxy_host;
    proxy_pass http://WEBSOCKET/;
    access_log  /var/log/nginx/mysite/ws_services.access.log;
    error_log /var/log/nginx/mysite/ws_services.error.log;
    proxy_read_timeout 300s;
  }
}

upstream WEBSOCKET {
    ip_hash;
    server 127.0.0.1:8765;
}

1 个答案:

答案 0 :(得分:0)

OP所遇到的问题不一样,但以防万一有人碰到这个问题,并且设置与我相同:

我正在使用SSL上的WebSockets(因此使用wss://协议),并且弹出了502,即使该配置以前曾起作用过。配置如下:

...
proxy_pass http://127.0.0.1:8080;
...

在后端,我使用带有ws软件包的Node来创建websocket服务器

正如我所说:它曾经工作过,但是突然停止了工作。另外,nginx将upstream prematurely closed connection while reading response header from upstream个错误写入错误日志。我想nginx或node都关闭了某种安全性问题,导致设置不再起作用。

为了使其能够正常工作,我要做的是在proxy_pass配置中使用https而不是http

...
proxy_pass https://127.0.0.1:8080;
...