Apache2 WSS 重写

Apache2 WSS 重写

试试运气吧,因为 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 和查询参数将由您的应用程序处理

很抱歉,我无法确切地告诉你哪里出了问题,但希望我的配置也能适用于你的情况

相关内容