如何将 websocket 请求从 Apache httpd 转发到 Apache Tomcat?

Posted

技术标签:

【中文标题】如何将 websocket 请求从 Apache httpd 转发到 Apache Tomcat?【英文标题】:How can I forward websocket request to Apache Tomcat from Apache httpd? 【发布时间】:2013-03-02 14:13:46 【问题描述】:

我有像 Apache2 + mod_jk + 两个 Tomcat (7.0.33) 实例这样的服务器设置。现在我正在使用tomcat的气氛。长轮询的气氛工作得很好。但现在我想在大气中使用网络套接字作为传输协议。但似乎 Apache 无法将请求转发给 Tomcat,它给了我错误

无法在 ws://localhost/Myapp/update/?X-Atmosphere-tracking-id=0&X-Atmosphere-Framework=1.1&X-Atmosphere-Transport=websocket&X-Cache-Date 建立与服务器的连接=0&Content-Type=application/json.

【问题讨论】:

【参考方案1】:

从 Apache 2.4.6 开始,Apache httpd 转发/代理 websockets

【讨论】:

这将更适合评论而不是答案。一旦您have enough reputation,请考虑将其移至对该问题的评论。【参考方案2】:

Mod_Jk 意味着将请求从 HTTP 转换为 AJP/13 协议,这意味着 Web 服务器应该具有处理/处理请求的能力。 使用 mod_proxy 来建立 apache-tomcat 通信可能会更好地为您服务。

【讨论】:

【参考方案3】:

Apache不支持WebSocket,需要使用Ningx或者HAProxy。

【讨论】:

谢谢。但我只想让 apache 将 webscoket 请求转发给 mod_jk 而不是处理它们。 nignix 或 HAProxy 也会在这方面帮助我。【参考方案4】:

我认为你可以使用一个名为 mod_proxy_wstunnel 的模块来做到这一点

https://httpd.apache.org/docs/2.4/mod/mod_proxy_wstunnel.html

我认为最初提出问题时不存在这种情况。在 2.4.5 版本中,Apache 增加了对这个 mod 的支持。

【讨论】:

以上是关于如何将 websocket 请求从 Apache httpd 转发到 Apache Tomcat?的主要内容,如果未能解决你的问题,请参考以下文章

Apache CXF 中基于 WebSocket 的 SOAP?

尝试使用 websockets 从 FastAPI 获取实时数据流时如何修复错误(不支持的升级请求。)?

如何将 HTTP 请求升级到 Websocket (Autobahn & Twisted Web)

预警通报关于Apache Tomcat WebSocket拒绝服务 漏洞的预警通报

LAMP 专家如何轻松实现 WebSockets?

如何在 Django API GET 请求中与 websocket 通信?