【问题标题】:Nginx - Error during WebSocket handshake: Unexpected response code: 502Nginx - WebSocket 握手期间出错:意外的响应代码:502
【发布时间】:2020-09-19 07:10:24
【问题描述】:

我正在使用 pm2 在我的 Digital Ocean 液滴上运行 websocket 服务器。另外,我正在使用websocket/ws websocket 库。

它正在侦听端口 3030。

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

以下是我启用 nginx 站点的配置文件中的设置。我在/ 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 时。我收到此错误:

WebSocket 握手期间出错:意外响应代码:502

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

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

检查此 websocket 的标头时。这就是我得到的。

静态资源可以正常渲染,但 websocket 服务器不行。 这告诉我至少 wss://www.xxxx.com 能够在 /socket 处联系我的 Nginx 服务器,但似乎响应不正确。当我查看我的 pm2 日志和错误文件时,我发现它什么也没输出。当我用 localhost 测试它时,它运行良好。但是,当部署到服务器时,它会中断。

【问题讨论】:

    标签: node.js nginx websocket server


    【解决方案1】:

    我找到了解决问题的方法。

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

    如果其他人也遇到此问题。我建议你使用一个非常简单的 websocket,你知道它肯定可以工作,看看它是否可以在 Nginx 上工作。

    【讨论】:

    • 太棒了!布里尔!我想你可以帮我解决这个问题:stackoverflow.com/questions/63473220/…我面临同样的问题。
    • 您能否发表一些更具体的关于您如何解决此问题的内容?
    【解决方案2】:

    我忘记启动服务器时收到此错误。所以请确保服务器正在运行:)

    【讨论】:

      猜你喜欢
      • 2019-11-26
      • 1970-01-01
      • 2014-05-02
      • 2017-11-16
      • 2014-05-15
      • 2020-05-20
      • 1970-01-01
      • 2020-08-01
      • 2018-01-21
      相关资源
      最近更新 更多