我正在一个angular应用程序中开发web套接字。我让它通过nginx连接到python后端。我发现大约90%的时间我都会收到502个"坏网关"错误。我会这样做:
- 在浏览器中加载页面并连接web套接字
- Python后端向angular前端发送数据
- 断开web套接字
- 尝试重新连接web套接字<--502坏网关错误
- Chrome中的硬重新加载
- 在浏览器中加载页面并连接web套接字<--No 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;
}
不是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关闭了某种安全问题,导致设置不再工作。
为了使它发挥作用,我必须使用https而不是proxy_pass
配置的http
...
proxy_pass https://127.0.0.1:8080;
...