Nginx - WebSocket 握手期间出现错误:意外的响应代码:502

4

我正在使用pm2在我的Digital Ocean droplet上运行WebSocket服务器。同时,我还在使用websocket/ws WebSocket库。

enter image description here

它正在3030端口上监听。 在此输入图像描述 使用命令netstat -l -p,我可以看到它确实在监听。
以下是我的nginx sites-enabled配置文件设置。我在/网址中运行静态文件,并运行/socket网址。并且,由于安全原因,/path/to/blah已被修改。
 31 server {
 30   . . . listen 80;
 29   . . . listen [::]:80;
 28 
 27   . . . server_name xxxx.com www.xxxx.com;
 26   . . . return 302 https://$server_name$request_uri;
 25 }
 24 
 23 server {
 22   . . . # SSL configuration
 21 
 20   . . . listen 443 ssl http2 default_server;
 19   . . . listen [::]:443 ssl http2 default_server;
 18   . . . server_name xxxx.com www.xxxx.com;
 17 
 16   . . . ssl_certificate /path/to/cert;
 15   . . . ssl_certificate_key /path/to/key;
 14 
 13   . . . location / {
 12   . . . . . .proxy_pass http://127.0.0.1:5000;
 11   . . . }
 10 
  9   . . . location /socket {
  8   . . . . . . proxy_set_header   X-Forwarded-For $remote_addr;
  7   . . . . . . proxy_set_header   Host $http_host;
  6   . . . . . . proxy_pass http://127.0.0.1:3030;
  5   . . . . . . proxy_http_version 1.1;
  4   . . . . . . proxy_set_header Upgrade $http_upgrade;
  3   . . . . . . proxy_set_header Connection 'upgrade';
  2   . . . . }
  1 }

当使用wss://www.xxxx.com/socket连接到websocket时,我遇到了以下错误:

WebSocket握手期间发生错误:意外的响应代码:502

查看位于/var/log/nginx的Nginx日志文件,我看到了以下错误信息。

[error] 31009#31009: *19 upstream prematurely closed connection while reading response header from upstream, client: X.X.XX.XXX, server: xxxxx.com, request: "GET /socket HTTP/1.1", upstream: "http://127.0.0.1:3030/socket", host: "www.xxxxx.com"

检查此websocket的标头时,我得到了以下内容。 enter image description here

静态资源可以正常渲染,但是websocket服务器不能。 这告诉我至少wss://www.xxxx.com能够联系到我的Nginx服务器在/socket上,但似乎响应不正确。当我查看pm2日志和错误文件时,发现没有输出任何内容。在本地主机测试时,它可以正常工作。但是,在部署到服务器时,它就会出错。
2个回答

0

我已经找到了我的问题的解决方案。

我发现,如果出现这样的问题,通常与上游相关的问题,就像我这种情况下运行在端口3030上的应用程序。事实证明,我的websocket并没有做我期望它做的事情。

如果其他人也遇到了这个问题。我建议选择一个确信可以正常工作的非常简单的websocket,然后查看它是否在Nginx上工作。


太棒了!太好了!我觉得你可以帮我解决这个问题:https://stackoverflow.com/questions/63473220/error-during-websocket-handshake-unexpected-response-code-504-nginx-and-webs 我也遇到了同样的问题。 - Rogerio Brito Soares
2
你能否发布一些更具体的信息,说明你是如何解决这个问题的? - Choco

-2
我在忘记启动服务器时遇到了这个错误。所以请确保服务器正在运行 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接