Bee*_*ice 7 ssl mod-proxy apache-2.4 websocket
我依赖的 websocket 库 ( PHP-Websockets ) 尚不支持安全套接字 ( wss
)。不过我的网站已经结束https
,所以我不能使用不安全的ws
连接。
我正在尝试使用Apachemod_proxy
将来自浏览器的安全请求转发到客户端。
Javascript
var ws = new Websocket('wss://example.com/_ws_/');
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
尝试连接时,浏览器会收到一个500 Server Error
. 日志显示:
没有协议处理程序对 URL /_ws_/ 有效。如果您使用的是 mod_proxy 的 DSO 版本,请确保使用 LoadModule 将代理子模块包含在配置中。
我已经确认,如果我删除代理规则,停止将用户重定向到https
并尝试从浏览器连接到不安全的套接字:new Websocket('ws://example.com/')
,一切正常。
我加载的 Apache 模块包括mod_ssl.c
,mod_proxy.c
和mod_proxy_http.c
Apache 2.4
为了让事情工作,我还需要加载 mod_proxy_wstunnel
一旦我这样做了,这个规则集就开始工作了:(在VirtualHost
接收和代理 websocket 请求的域中)
<IfModule mod_proxy.c>
ProxyPass "/_ws_/" "ws://127.0.0.1:8080/"
ProxyPassReverse "/_ws_/" "ws://127.0.0.1:8080/"
</IfModule>
Run Code Online (Sandbox Code Playgroud)
然后浏览器可以通过 HTTPS 端口联系后端 WS 服务器:
var ws = new Websocket('wss://example.com/_ws_/');
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12779 次 |
最近记录: |