0

众所周知,此时 nginx 稳定版无法代理 tcp 连接。因此,如果 express 和 socket.io 将在同一个端口上工作,我们需要使用其他代理解决方案。

但是还有其他方法可以绕过这个问题:

  1. 如果我们将 socket.io 设置为监听不同的端口,然后 express 监听。例如:nginx代理80端口到8000端口,express监听8000端口,socket.io监听8001端口,客户端直接连接socket.io到8001端口。
  2. 使用nginx_tcp_proxy_module我们可以代理 tcp 连接,但我们不能在同一端口上使用 http。所以我们使用这样的解决方案:nginx代理80端口到8000端口和81端口(用于websockets)到8001,express监听8000端口,socket.io监听8001端口,客户端连接socket.io到81端口。

这些方法有什么优点和缺点?

4

2 回答 2

2

我更喜欢在前面使用Haproxy,并且只有一个公共开放端口。“生根”是按路径完成的。

配置看起来像这样(您可以轻松找到许多教程/资源)

frontend all 0.0.0.0:80

    acl is_websocket path_beg /websocket/
    use_backend nodejs if is_websocket
    default_backend nginx

backend nodejs
   server srv_node 127.0.0.1:16852

backend nginx
   balance roundrobin
   server srv_static 127.0.0.1:8080
于 2013-02-09T11:22:03.917 回答
-1

You can do it with Varnish and Nginx - http://blog.dealspotapp.com/post/40923117591/websockets-with-varnish-and-multiple-nginx-backends

or with Haproxy - http://blog.dealspotapp.com/post/41226162147/websockets-with-haproxy-ssl-and-multiple-backends

If you use Haproxy, make sure to set the tunnel timeout to something long, such as 1 day. otherwise you'll see new sockets being created every few seconds.

于 2013-02-09T22:30:27.133 回答