我想用 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 + socket.io 通过端口 80 进行代理的工作示例吗?
不,这还不可能; nginx 1.2 合并了 1.1.x 开发分支的内容,其中确实包含 HTTP/1.1 反向代理。 Websocket 连接是使用 HTTP/1.1“升级”标头建立的,但事实上 nginx 现在支持这种标头并不意味着它支持 websockets(websockets 是不同的协议,而不是 HTTP)。
(我自己使用 1.1.x 分支进行了尝试(我发现它对于我的目的来说足够稳定),并且没有 tcp_module 就无法工作)
Websockets 可能会在 1.3.x 中得到支持(http://trac.nginx.org/nginx/roadmap http://trac.nginx.org/nginx/roadmap ).
您的替代方案是:
- 继续使用node-http-proxy
- 使用不带 tcp 模块的 nginx; socket.io 不会使用 websockets 而是使用其他东西(例如长轮询)
- 带有 tcp 模块的 nginx:在这种情况下,我认为您需要为此模块提供一个额外的端口(我自己从未尝试过)
- 在前面放一些其他东西作为反向代理:我在nginx和node前面使用HAProxy(支持websockets)。 Nginx 现在只是充当静态文件服务器,而不是代理。如果您需要额外的缓存,Varnish 是另一种选择。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)