代理websocket wss://到ws:// apache

问题描述 投票:4回答:3

我搜索了很多,但我无法连接我的websocket到wss://,我发现有一种代理方式wss://domain.com:9090和apache应用代理并将请求重定向到正常的ws:/ /domain.com:9090服务器正在运行

ProxyPass /websocket ws://domain.com:9090
ProxyPassReverse /websocket ws://domain.com:9090

apache config中的这段代码将从以/ websocket结尾的任何地址向ws发送请求://domain.com:9090 ex:ws:// websocket将是ws://domain.com:9090

我想为wss做这个://也是ex wss:// websocket必须指向ws://domain.com:9090

它不起作用,我在浏览器控制台中收到此错误:

failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED

这里有什么错吗?谢谢 。

apache websocket wss proxypass
3个回答
10
投票

我工作24小时找到这个,并搜索了很多论坛,但没有人写成功。这是我的服务器配置:

CentOS版本6.7,Apache 4.2.18

这是我最后做的:首先我发现模块/ mod_proxy_wstunnel.so必须在apache配置文件中启用,但是我的apache没有那个模块,经过大量搜索我发现模块在apache 2.4.5中可用然后。

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

我下载https://archive.apache.org/dist/httpd/httpd-2.4.18.tar.gz解压缩httpd-2.4.18 \ modules \ proxy \ mod_proxy_wstunnel.c并上传到我的服务器root然后从终端可以用这些commonds再次编译它:

chmod 755 mod_proxy_wstunnel.c #set permission
pxs -i -a -c mod_proxy_tunnel.c #compile module

pxs命令确实编译了模块并在apache配置文件中写入以加载它

LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so

之后我将这些行添加到apache配置文件的末尾:

RewriteEngine on
ProxyRequests Off
ProxyPreserveHost on
ProxyPass /myws ws://mysite.com:8091
ProxyPassReverse /myws ws://mysite.com:8091

现在:它有效!在客户端js你可以像这样设置ws url:

var protocol = 'ws://'; 
if (window.location.protocol === 'https:') {
            protocol = 'wss://';
   }

 var wsUri =protocol+ "mysite.com/myws";  

 var ws = new WebSocket(wsUri);

并且它会将请求转发给ws://mysite.com:8091与加载https或http的页面无关,它会将所有以/ my ws结尾的请求指向ws://mysite.com:8091


1
投票

wss需要以下模块在apache conf的httpd.conf中取消注释行LoadModule proxy_wstunnel_module modules / mod_proxy_wstunnel.so


-1
投票

您的ProxyPass配置路径中缺少/ websocket路径。

使用:

ProxyPass /websocket ws://example.com:9090/websocket
ProxyPassReverse /websocket ws://example.com:9090/websocket

附加信息:与其他提到的一样,您必须取消注释该行:

LoadModule proxy_wstunnel_module modules / mod_proxy_wstunnel.so

如果您还使用相对路径为“/”的http ProxyPass(直接转发所有内容),则必须首先配置特定的“/ websocket”路径配置,否则首先“/”抓取。

ProxyPass /websocket ws://example.com:9090/websocket
ProxyPassReverse /websocket ws://example.com:9090/websocket

ProxyPass balancer://ac-cluster/
ProxyPassReverse / http://example.com:9090
© www.soinside.com 2019 - 2024. All rights reserved.