使用lighttpd重定向端口80上的websocket流量

8
我有一个托管在lighttpd上的网站,可以通过“www”子域名访问。我还有一个使用node.js和socket.io创建的监听端口8124的聊天服务器。
我希望所有客户端流量都在端口80上进行,通过将所有对“chat”子域的请求重定向到端口8124来实现。因此,我启用了mod_proxy,并在lighttpd.conf中添加了以下内容:
$HTTP["host"] == "chat.myserver.com" {
    proxy.server = (
            "" => ((
                    "host" => "78.128.79.192",
                    "port" => "8124"
            ))
    )
}

在客户端,当我连接到 WebSocket 时,
var socket = io.connect('http://chat.myserver.com');

我从Node.js收到了正确的信息:
debug - client authorized
info  - handshake authorized 6067470561567883577
debug - setting request GET /socket.io/1/websocket/6067470561567883577
debug - set heartbeat interval for client 6067470561567883577
debug - client authorized for 
debug - websocket writing 1::

但浏览器显示错误:
Firefox can't connect to server ws://chat.myserver.com/socket.io/1/websocket/6067470561567883577

当然,如果我直接连接到8124端口,一切都能正常工作:
var socket = io.connect('http://www.myserver.com:8124');

但是,正如我所说的,我希望所有客户端流量都在80端口上。这可能吗?
1个回答

8

已知mod_proxy与WebSockets不兼容。

HAProxy 兼容WebSockets(我自己没有测试过,但这里有一篇关于其配置WebSockets的文章)。


3
我刚刚安装了Haproxy,它完美地运作了。谢谢。 - lortabac
不客气。感谢您的确认,因为我还没有测试过它(正如我所说),并且期待着去做 :) - Denys Séguret
你好!我目前正在尝试让socket.io的websocket与lighttpd一起工作,但是我遇到了一个问题。它似乎无法连接到ws://<mydomain.com>/socket.io/1/<randomNumbers>/ : 'Connection' header is missing。你的HAProxy配置文件是什么样子的?因为你说它可以使用(而不是lighttp mod_proxy)。非常感谢! - D4V1D
我安装了HAProxy,它运行得非常好。谢谢! - D4V1D
3
这个解决方案并不是使用lighttpd在80端口上处理websocket流量,而是在没有使用lighttpd的情况下,在80端口上处理websocket流量。在相关文章中,lighttpd(或任何其他web服务器)监听8080端口,不参与任何ws连接的提供。 - TNT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接