【发布时间】:2017-01-31 22:19:04
【问题描述】:
我依赖的 websocket 库 (PHP-Websockets) 还不支持安全套接字 (wss)。我的网站通过https 提供服务,所以我不能使用不安全的ws 连接。
我正在尝试使用Apache's mod_proxy 将来自浏览器的安全请求转发到客户端。
Javascript
var ws = new WebSocket('wss://example.com/_ws_/');
Apache 虚拟主机
ProxyPass "/_ws_/" "ws://127.0.0.1:8080/"
ProxyPassReverse "/_ws_/" "ws://127.0.0.1:8080/"
# I've also tried "/_ws_/" "ws://example.com:8080/" Same error below
在尝试连接时,浏览器会收到一个500 Server Error。日志显示:
没有对 URL /_ws_/ 有效的协议处理程序。如果您使用的是 DSO 版本的 mod_proxy,请确保代理子模块包含在使用 LoadModule 的配置中。
我已经确认,如果我删除代理规则,停止将用户重定向到 https 并尝试从浏览器连接到不安全的套接字:new WebSocket('ws://example.com/'),一切正常。
我加载的 Apache 模块包括 mod_ssl.c、mod_proxy.c 和 mod_proxy_http.c
Apache 2.4
【问题讨论】:
-
我对 bitnami tomcat 堆栈有类似的问题。不幸的是,我没有足够的技能来设置 mod 代理,我完全删除了 apache2 网络服务器。但请查看此对话,可能会有所帮助:community.bitnami.com/t/tomcat-8-websockets/39477/3
-
@degr 感谢您的链接
-
mod_proxy_wstunnel模块呢? -
@gre_gor 我花了一整夜才意识到这就是我所缺少的。我回来写了我的解决方案,但如果你愿意(如果是这样,请提供文档链接:httpd.apache.org/docs/2.4/mod/mod_proxy_wstunnel.html),我很乐意选择你的答案。
标签: apache ssl websocket mod-proxy