我用 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>