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

Posted

技术标签:

【中文标题】使用 lighttpd 重定向端口 80 上的 websocket 流量【英文标题】:Redirecting websocket traffic on port 80 with lighttpd 【发布时间】:2012-06-08 10:39:23 【问题描述】:

我有一个托管在 lighttpd 上的网站,可通过“www”子域访问。我也有一个聊天服务器在用 node.js 和 socket.io 监听 8124 端口。

我希望所有客户端流量都发生在端口 80 上,方法是将所有请求重定向到“聊天”子域到端口 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】:

已知 mod_proxy 与 websockets 不兼容。

HAProxy 是兼容的(我自己没有测试过,但这里有一个article on its configuration for websockets)。

【讨论】:

我刚刚安装了 Haproxy,它运行良好。谢谢 不客气。感谢您的确认,因为我没有测试它(正如我所说)并且期待这样做:) 嗨!我目前正在尝试使用 socket.io 使 websocket 与 lighttpd 一起使用,但我遇到了一个问题。似乎无法连接到ws://<mydomain.com>/socket.io/1/<randomNumbers>/ : 'Connection' header is missing。正如您所说的那样,您的 HAProxy conf 文件是什么(而不是 lighttp mod_proxy)。非常感谢! 我安装了 HAProxy,它就像一个魅力。谢谢! 这个解决方案并不是真正的使用 lighttpd 的端口 80 上的 websocket 流量,而是 端口 80 上的 websocket 流量 没有 lighttpd。在链接的文章中,lighttpd(或任何其他网络服务器)侦听端口 8080,并且不以任何方式参与提供 ws 连接。

以上是关于使用 lighttpd 重定向端口 80 上的 websocket 流量的主要内容,如果未能解决你的问题,请参考以下文章

将 Web 服务器从端口 5000 重定向到 localhost (Fedora) 上的端口 80

如何在 lighttpd 中为特定域设置 HTTP 到 HTTPS 重定向?

通过地址重写, 解决ingress在使用非标准端口(80, 443)时, 引起的重定向丢失端口问题

通过地址重写, 解决ingress在使用非标准端口(80, 443)时, 引起的重定向丢失端口问题

django admin 在保存时重定向到错误的端口

复杂的重定向:HTTP 到 HTTPS + localhost 上的端口和裸域到 www,除了 localhost