【问题标题】:Can a WebSocket server coexist with a HTTP Apache server in the same public port (80), but locally in different address?WebSocket 服务器能否与 HTTP Apache 服务器共存于同一公共端口(80),但本地地址不同?
【发布时间】:2020-02-26 17:31:24
【问题描述】:

首先,我在 Windows 中有一个带有 Apache 2.4 的 HTTP 服务器,可以在一个简单的网站上完美运行, 所以我将外部端口 80 转发到路由器中 Windows 机器的本地端口 80。

我想在我的 Raspberry PI 上运行一个 WebSocket 服务器来用 python 做一些疯狂的事情,我试图将外部端口 80 也转发到 Raspberry 的本地端口 80。 我尝试使用网站中的 JS 脚本连接到在我的 Raspberry 上运行的 python WebSocket 服务器,它显示:net::ERR_CONNECTION_REFUSED。

然后我注意到我的 Apache 服务器中的简单网站没有正确加载(非常缓慢),大多数时候它根本没有加载它,chrome 说:连接被拒绝。然后我撤消了 Raspberry 端口规则,然后它就可以正常加载了。

那么,这两个协议不能共存吗(可能是)?还是只是端口转发的问题?

提前感谢您的宝贵时间

【问题讨论】:

    标签: http websocket portforwarding


    【解决方案1】:

    这是路由的限制。当您在路由器中使用端口转发时,它发生在 OSI model 的传输层 (4) 上。这里的套接字由 3 个东西定义:协议、地址、端口。在这种情况下是tcp:<Your-IP-Address>:80。您只能将其转发到一个位置。 HTTP 和 WebSocket 协议位于较高层,对路由器不可见,它们仅作为数据传递。

    您需要为其中一个使用不同的端口号,或者使用反向代理服务器,例如 HAProxy 或 nginx,它们可以相应地处理更高级别的协议和路由器。

    【讨论】:

      猜你喜欢
      • 2016-02-24
      • 1970-01-01
      • 2014-04-25
      • 2020-07-10
      • 2020-02-12
      • 2011-05-08
      • 1970-01-01
      • 2011-04-29
      • 1970-01-01
      相关资源
      最近更新 更多