Node.js Nginx-WebSocket握手期间出错:意外响应代码:502

Node.js Nginx-WebSocket握手期间出错:意外响应代码:502,node.js,nginx,websocket,server,Node.js,Nginx,Websocket,Server,我正在使用pm2在我的数字海洋水滴上运行websocket服务器。另外,我正在使用websocket库 它正在监听端口3030。 使用命令netstat-l-p,我可以看到它确实在监听 下面是my nginx sites enabled配置文件上的设置。我正在运行/url中的静态文件,并运行/socketurl。并且,出于安全原因修改了/path/to/blah 31 server { 30 . . . listen 80; 29 . . . listen [::]:80;

我正在使用pm2在我的数字海洋水滴上运行websocket服务器。另外,我正在使用websocket库

它正在监听端口3030。

使用命令netstat-l-p,我可以看到它确实在监听

下面是my nginx sites enabled配置文件上的设置。我正在运行
/
url中的静态文件,并运行
/socket
url。并且,出于安全原因修改了/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握手期间出错:意外响应代码:502

查看位于
/var/log/Nginx
的Nginx日志文件。这就是我看到的错误

[错误]31009#31009:*19上游过早关闭连接 正在从上游读取响应头,客户端:X.X.XX.XXX,服务器: xxxxx.com,请求:“GET/socket HTTP/1.1”,上游: “”主机:“www.xxxxx.com”

检查此腹板箱的收割台时。这就是我得到的。

静态资源可以很好地渲染,但websocket服务器不能。
这告诉我至少wss://www.xxxx.com 可以通过/socket联系我的Nginx服务器,但似乎响应不正确。当我查看pm2日志和错误文件时,我发现它没有输出任何内容。当我用localhost测试它时,它工作得很好。但是,当部署到服务器时,它会中断

我找到了解决问题的办法

我发现,如果出现这样的问题,通常是与上游相关的问题,在我的例子中,上游是在端口3030上运行的应用程序。事实证明,我的websocket并没有达到我预期的效果


如果其他人也遇到了这个问题。我建议您使用一个非常简单的websocket,您肯定知道它是有效的,然后看看它在Nginx上是否有效

我忘记启动服务器时出现了这个错误。因此,请确保服务器正在运行:)

太棒了!布里尔!我想你可以帮我解决这个问题:我也面临着同样的问题。你能发布一些更具体的关于你如何解决这个问题的文章吗?