nginx 1.2.0 - socket.io - HTTP/1.1 - 代理websocket连接

ayk*_*ayk 25 proxy reverse-proxy nginx websocket socket.io

我想用nginx proxy_pass模块替换我的node-http-proxy模块.是否可以使用新发布的nginx版本,正如我已经读过的那样,它支持开箱即用的HTTP/1.1.我看到一些线程与这个问题有关,nginx不支持websockets.

在我的情况下,我在后台运行几个节点项目,并希望将我的websocket连接从端口80路由到8000-8100,具体取决于域.有没有使用tcp_module插件进行websocket代理/反向代理的本地方法?

我试图建立一个在上游与nginx.conf到proxy_passing,但如果我尝试过的WebSocket连接到端口80,我得到一个502网关错误.

有人遇到同样的问题吗?有没有人有一个nginx + spcket.io的工作示例,代理端口80?

Mat*_*ias 35

不,这还不可能; nginx 1.2包含来自1.1.x开发分支的东西,它确实包含HTTP/1.1反向代理.Websocket连接是使用HTTP/1.1"Upgrade"标头建立的,但nginx现在支持这种标头这一事实并不意味着它支持websockets(websockets是一种不同的协议,而不是HTTP).(我自己尝试使用1.1.x分支(我发现它足够稳定以达到我的目的)并且没有tcp_module它不起作用)

1.3.x(http://trac.nginx.org/nginx/roadmap)可能支持Websockets .

您的替代方案是:

  • 继续使用node-http-proxy
  • 使用没有tcp模块的nginx; socket.io不会使用websockets而是使用其他东西(例如长轮询)
  • nginx与tcp模块:在这种情况下,我认为你需要一个额外的端口为这个模块(从来没有尝试过这个)
  • 把一些其他东西放在前面作为反向代理:我在nginx和node之前使用HAProxy(它支持websockets).Nginx现在只是充当静态文件服务器,而不是代理.如果您想要额外的缓存,Varnish是另一种选择.