我正在一个角度应用程序中处理网络套接字。我让它通过 nginx 连接到 python 后端。我发现大约 90% 的时间我都会收到 502“错误网关”错误。我会这样做:
- 在浏览器中加载页面并连接 Web 套接字
- Python后端将数据发送到角度前端
- 断开网络套接字
- 尝试重新连接 Web 套接字 <-- 502 Bad Gateway 错误
- 在 Chrome 中硬重新加载
- 在浏览器中加载页面并连接 Web 套接字 <-- 没有 502 错误
我无法弄清楚为什么会这样。我不知道为什么会收到 502 错误。我也无法弄清楚为什么进行硬重新加载可以解决问题。我尝试过的事情:
- 增加 nginx 日志级别以进行调试。日志仍然没有任何有用的信息。
- 我不保持任何网络套接字对象的状态。我这样做是为了以防某处缓存了某些东西。
- 我总是用关闭代码 1000 关闭网络套接字
- 我在服务器上手动运行 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;
}