Apache Config:Websockets代理向WS后端的WSS请求

Tra*_*urn 7 apache stomp rabbitmq websocket

在此先感谢您的帮助.

我试图使用Apache作为使用WSS的Web浏览器和后端WS服务器进程之间的代理.

浏览器<--- WSS ---> Apache <--- WS ---> RabbitMQ Stomp

我在Apache中正确设置了HTTPS,并通过443提供页面.

在Apache站点config:.../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>
Run Code Online (Sandbox Code Playgroud)

浏览器中的Javascript:

<script>
  var ws = new WebSocket('wss://MYSERVER.com:443/wss');
  var client = Stomp.over(ws);
Run Code Online (Sandbox Code Playgroud)

在Chrome调试器中,我看到:与'wss://MYSERVER.com/wss'的WebSocket连接失败:WebSocket握手期间出错:意外的响应代码:302

使用ws直接指向后端,这很有效,但我需要让wss工作.

我试图得到一个类似的解决方案,但是无法解决这个问题: Apache:Proxy websocket wss to ws

Jus*_*man 3

如果不存在,此行将Redirect /wss /wss/添加一个尾部斜杠/wss(默认情况下,它是 302 重定向)。并且您正在尝试连接到wss://MYSERVER.com:443/wss,这解释了重定向。

解决方案:尝试连接到wss://MYSERVER.com:443/wss/(带有尾部斜杠)。现在应该可以按预期工作了。