![Apache2 WSS 重写](https://linux22.com/image/708991/Apache2%20WSS%20%E9%87%8D%E5%86%99.png)
试试运气吧,因为 StackOverflow 不是提问的合适地方。希望这是我的问题!
最近几天,我一直在绞尽脑汁让 websockets 与 Apache2.4 配合使用。我终于找到了一个适合我的解决方案,即以下内容:
<VirtualHost *:80>
ServerName www.domain2.com
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/socket.io [NC]
RewriteCond %{QUERY_STRING} transport=websocket [NC]
RewriteRule /(.*) ws://localhost:3001/$1 [P,L]
ProxyPass / http://localhost:3001/
ProxyPassReverse / http://localhost:3001/
</VirtualHost>
问题是什么?好吧,一旦我切换到 wss,我就倒霉了。起初,我希望我可以将上面的 ws 更改为 wss,但这没有奏效,我仍然收到 500 错误。我可能遗漏了什么?(我使用 socket.io,请求如下所示:wss://xxx.yy/socket.io/?auth=YYY&EIO=3&transport=websocket&sid=XXX
答案1
我最近遇到了几乎完全相同的问题。它使用 HTTP 和 WS 时可以正常工作,但当我切换到 HTTPS 和 WSS 时它就停止工作了。我摆弄了一下,不知怎么就让它工作了。这是我的工作配置:
<VirtualHost *:443>
ServerName blabla
#SSL-stuff
...
# I don't think this is important but it's there
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
# Here's the fun stuff
<Location />
RewriteEngine on
RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
RewriteCond %{HTTP:CONNECTION} Upgrade$ [NC]
RewriteRule .* ws://localhost:3002%{REQUEST_URI} [P,L]
ProxyPass http://localhost:3001/
ProxyPassReverse http://localhost:3001/
</Location>
</VirtualHost>
它和你的没什么不同。它不是寻找 websocket 的路径和查询字符串,而是寻找 HTTP 请求中的升级和连接标头,这表明这应该成为一个 websocket。
URL 和查询参数将由您的应用程序处理
很抱歉,我无法确切地告诉你哪里出了问题,但希望我的配置也能适用于你的情况