nginx的1.2.0 - socket.io - HTTP / 1.1 - 代理WebS

2019-07-29 04:09发布

我想取代我的节点-HTTP代理nginx的proxy_pass模块模块。 是否有可能用新发行nginx的版本,因为我已阅读,它支持HTTP / 1.1开箱。 我看到一些线程这一问题struggeling,那WebSockets的不nginx的支持。

在我的情况IM运行在后台的几个节点项目,并要路由我WebSocket连接从80端口8000-8100,视域。 是否有这样做的WebSocket代理/反向代理,而无需使用附加tcp_module原生的方式?

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

任何人都面临同样的问题? 有没有人有nginx的+ spcket.io,代理过一个80端口的工作的例子吗?

Answer 1:

不,这是没有可能的; 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代理
  • 使用nginx的无TCP模块; socket.io不会使用WebSockets,但别的东西(如长轮询)
  • nginx的与TCP模块:在这种情况下,我认为你需要一个额外的端口,这个模块(从来没有试过这样我自己)
  • 放在前面别的东西作为反向代理:我在nginx的和节点的前面使用HAProxy的(支持WebSockets的)。 Nginx的现在只是作为一个静态的文件服务器,而不是代理。 光油是另一种选择,如果你想要更多的缓存。


Answer 2:

关于nginx的与TCP模块有我所遇到的一些问题。 但最棘手的一个试图与EC2实例在80端口nginx的运行您的WebSockets。

我描述了整体配置在这里



文章来源: nginx 1.2.0 - socket.io - HTTP/1.1 - Proxy websocket connections