为什么angular-socket-io在WebSocket握手期间抱怨错误:意外的响应代码:400?'

时间:2015-04-23 00:26:24

标签: angularjs sockets

我有一个节点应用程序(angular-fullstack),我从http移动到https。一切正常,但套接字连接不是。我错过了什么?

在socketFactory中我有:

var ioSocket = io('https://localhost', {
  path: '/socket.io-client'
});

我认为已经导致运输使用' wss://'。 https连接都很好。有一段时间,我相信不知何故nginx没有正确处理代理。然而这是不正确的。

接下来,我更改了表格' https://locahost'到' https://xxx_actual_server_url_xxxx'现在一切都在初始页面重新加载后正常工作。但是,我确实看到了一个:

WebSocket connection to 'wss://xxx_actual_server_url_xxxx/
socket.io-client/?EIO=3&transport=websocket&sid=Y4_cKvyTERz_F1ZCAAAK' 
failed: Error during WebSocket handshake: Unexpected response code: 400

可能导致这种情况的原因是什么?以及如何绕过它?我没有做任何负载平衡或任何事情,只是使用' grunt serve'运行开发服务器。有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

经过多次搜索和搜索,我发现当使用带有nginx的套接字时,我需要将以下内容添加到我的代理内容中:

proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

完成后,现在一切都很好。希望这会帮助别人。 使用nginx转发代理的完整参数集是:

 location / {
    proxy_set_header   X-Real-IP $remote_addr;
    proxy_set_header   Host      $host;
    proxy_pass https://127.0.0.1:9000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }

感谢那些看过这个的人!

相关问题