【发布时间】:2015-05-16 14:56:31
【问题描述】:
我正在尝试通过 nginx 1.6 提供静态文件,并使用 socket.io 代理来自 Node.js Web 服务器的套接字流量。
这是nginx.conf的相关部分:
location /socket.io/ {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
}
它直接在浏览器和 Node.js 之间完美运行,但是 socket.io 在使用 nginx 1.6 代理时花费的时间太长。握手协议需要花费太多时间,但如果不中断,它最终会在几分钟后开始工作。
通过 nginx 传递静态文件完美运行。
可能是什么问题?
更新:
我分析了一下网络流量,确定以下请求持续了大约一分钟(正是请求升级的时间):
Sec-WebSocket-Key: LhZ1frRdl+myuwyR/T03lQ==
Cookie: io=1-A7tpvwmoGbrSvTAAA5
Connection: keep-alive, Upgrade
Upgrade: websocket
....
预期的响应是代码 101 并且:
Connection: upgrade
Sec-WebSocket-Accept: HXx3KKJadQYjDa11lpK5y1nENMM=
Upgrade: websocket
...
相反,浏览器收到 400 并且:
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: http://localhost:8888
Connection: keep-alive
Content-Type: application/json
Server: nginx/1.6.2
Transfer-Encoding: chunked
更新 2:
我确定相同的配置在我的办公室计算机上完美运行,这意味着这是我家用计算机的问题。无论如何,确定到底出了什么问题会非常好。
【问题讨论】:
-
家庭和办公系统的系统配置差别大吗?