通过 Tomcat 和 Apache 在 Node.js 中提供 ws:// 服务

通过 Tomcat 和 Apache 在 Node.js 中提供 ws:// 服务

我用 Google 搜索了各种关键字组合,但找不到合适的描述来说明如何实现这一点。目前,我有一个运行 Apache 2 的网站,除端口 80 和 443 外,其他所有端口都被阻止。我已将 Tomcat 设置为通过 :80 和 :443 进行路由,方法是:

<Location /tomcat/> ProxyPass ajp://localhost:8009/tomcat/ Order allow,deny Allow from all </Location>

此外,现有的 Node.js http[s] 应用程序也已通过如下代码成功路由:

<Location /app_8201/> ProxyPass http://localhost:8201/ </Location>

我在 Azure 下的 CentOS 上运行 Apache/2.2.15、Tomcat 6 和 Node.js v0.10.26。Websocket 支持存在,因为运行示例应用程序引用localhost:9999工作正常。看起来应该有一个ProxyPass ws://localhost:9999,但如果我按照此处的说明进行操作

<Location /ws/> ProxyPass http://localhost:9999 ProxyPassReverse http://localhost:9999 </Location>

ws当我尝试通过 或http访问目录时收到 HTTP 500 错误ws

我使用mod_proxy_ajp而不是mod_jk因为据我理解ajp是“更好”。

答案1

WebSocket 支持首次出现在 Apache 2.4.5 中,通过 mod_proxy_wstunnel 模块实现,在 Apache 2.2 等早期版本中并不提供支持。

必须通过 ws:// 或 wss:// 明确选择协议,mod_proxy 的 AJP 和 HTTP 协议模块对 WebSockets 一无所知:

<Location /ws>
    ProxyPass ws://localhost:9999
    ProxyPassReverse ws://localhost:9999
</Location>

相关内容