当前位置: 首页 > 面试题库 >

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

董光霁
2023-03-14
问题内容

我有一个托管在lighttpd上的网站,可以在“ www”子域中访问。我还有一个聊天服务器,侦听由node.js和socket.io制成的8124端口。

我希望所有客户端流量都通过将所有请求重定向到“聊天”子域到端口8124来在端口80上发生。因此我启用了mod_proxy,并在lighttpd.conf中添加了:

$HTTP["host"] == "chat.myserver.com" {
    proxy.server = (
            "" => ((
                    "host" => "78.128.79.192",
                    "port" => "8124"
            ))
    )
}

在客户端上,当我连接到网络套接字时,

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上。这是否可能?


问题答案:

已知mod_proxy与websocket不兼容。

HAProxy是兼容的(我自己尚未对其进行测试,但这是有关websockets配置的文章)。



 类似资料:
  • 我应该在非80端口上使用WebSocket吗?它是否破坏了使用现有web/HTTP基础设施的全部目的?我认为它不再适合非80端口的WebSocket名称。 如果我在其他端口上使用WebSocket,为什么不直接使用TCP呢?或者WebSocket协议本身有什么特殊的好处吗? 由于当前WebSocket握手是HTTP UPGRADE请求的形式,这是否意味着我必须在端口上启用HTTP协议才能完成Web

  • 并打开端口localhost:80,看到docker入门页面。但是,我必须运行我的客户机的项目,它的端口也映射到localhost:80。因此,我无法在localhost:80上运行我客户的项目。除此之外,任何我随机打开docker然后切换到localhost:80的实例,它都会重定向到docker的入门教程。我想重置这个localhost:80端口,这样当我运行客户端的项目时,我可以将它们映射到

  • 我有以下代码来配置Jetty服务器: 和 Application.Properties作为 但找不到与Jetty相当的东西。非常感谢任何指针。

  • 我有一个网站<code>www.example。com使用RewriteEngine将HTTP流量重定向到HTTPS: 我发现的问题是谷歌已经索引了这个URL: 给出此错误: 我尝试重定向流量,添加来自80和443虚拟主机的永久重定向: 没有成功。什么是正确的方法来重定向从http://www.example.com:443(和衍生网页)到https://www.example.com的所有流量?

  • Spring靴:1.4.0.M1 我有一个IIS在端口80上运行,但是我已经通过STS配置属性将Sever.port更改为8090。STS屏幕快照 为什么STS embedded tomcat在更改后仍使用端口80?有点迷惑。

  • 我正在运行一个Java服务器应用程序(如果有人知道的话,就是Bungeecort),我正在为它编写插件。Bungeecort服务器在端口A上运行,但需要能够连接到端口A和端口B上的服务器。因此,如果一个人连接到端口A,一切都应该按预期工作。但是如果一个人连接到B,B的输入应该发送到端口A,通过B连接的输出需要从端口B发送。 问题是我的JavaBungeecort插件需要知道客户端是通过A还是B连接