我有一个节点应用程序(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'运行开发服务器。有什么想法吗?
谢谢!
答案 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;
}
感谢那些看过这个的人!