Apache配置:将Websockets代理WSS请求到WS后端

9
感谢您提前的任何帮助。
我正在尝试使用Apache作为Web浏览器和后端WS服务器进程之间WSS代理。
浏览器<---WSS---> Apache <---WS---> RabbitMQ Stomp 我已经在Apache中正确设置了HTTPS,并通过443提供页面。
在Apache站点配置文件:... / sites-enabled / site.conf中:
<VirtualHost *:80>
    RewriteEngine on

    RewriteCond %{SERVER_NAME} =MYSERVER.com [OR]
    RewriteCond %{SERVER_NAME} =www.MYSERVER.com
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

</VirtualHost>


<VirtualHost *:443>
    SSLEngine On
    SSLProxyEngine On

    SSLCertificateFile      /etc/letsencrypt/live/MYSERVER.com/fullchain.pem
    SSLCertificateKeyFile   /etc/letsencrypt/live/MYSERVER.com/privkey.pem

    Redirect /wss /wss/
    ProxyPass /wss/ ws://127.0.0.1:15674/stomp/websocket/
    ProxyPassReverse /ws/ wss://127.0.0.1:15674/stomp/websocket/

    ErrorLog ${APACHE_LOG_DIR}/error.log
    LogLevel warn
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    ServerName MYSERVER.com
    ServerAlias www.MYSERVER.com

</VirtualHost>

在浏览器中的Javascript:
<script>
  var ws = new WebSocket('wss://MYSERVER.com:443/wss');
  var client = Stomp.over(ws);

在Chrome调试器中,我看到: WebSocket连接到'wss://MYSERVER.com/wss'失败:WebSocket握手期间出错:意外的响应代码:302
这个只使用指向后端的ws很好地工作,但我需要让wss工作。
我尝试了一个类似于这个示例的解决方案,但未能成功: Apache:代理websocket wss到ws
1个回答

3

这行代码Redirect /wss /wss/会在 /wss 没有斜杠的情况下加上斜杠(默认情况下是302 重定向)。你试图连接到wss://MYSERVER.com:443/wss,这就解释了为什么会重定向。

解决办法: 尝试连接到 wss://MYSERVER.com:443/wss/(带斜杠)。这个操作应该可以正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接