如何在 apache 2.4 上通过反向代理允许 websocket

问题描述 投票:0回答:1

我对服务器配置比较陌生,不知道该怎么做。 我有一个带有反向代理的网络服务器,它可以工作:

<VirtualHost *:80>
    ServerName vtt.domain.com
    ProxyPreserveHost On

    # setup the proxy
    <Proxy *>
        Order allow,deny
        Allow from all
    </Proxy>
    ProxyPass / https://localhost:30000/
    ProxyPassReverse / https://localhost:30000/

    RewriteEngine on
    RewriteCond %{SERVER_NAME} =vtt.domain.com
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

但是端口 30000 上的 docker 也需要通过相同 URL 的 Web 套接字连接,这是我无法弄清楚的部分。

我尝试将其修改为:

<VirtualHost *:80>
    ServerName vtt.domain.de
    ProxyPreserveHost On

    # setup the proxy
    <Proxy *>
        Order allow,deny
        Allow from all
    </Proxy>
   RewriteCond %{HTTP:Connection} Upgrade [NC]
   RewriteCond %{HTTP:Upgrade} websocket [NC]
   RewriteRule /(.*) ws://127.0.0.1:30000/$1 [P,L]

   ProxyRequests off
   <Location />
      ProxyPass http://127.0.0.1:30000/
      ProxyPassReverse /
   </Location>
</VirtualHost>

但这不起作用。浏览器仍然只是

WebSocket connection to 'wss://vtt.domain.de/socket.io/?session=10dce06dhf5dfcc88ca8bdbau&EIO=4&transport=websocket' failed
我需要做什么才能让它允许网络套接字? 服务器运行在 Ubuntu 22.04 上,apache 版本为 2.4.52

websocket apache2
1个回答
0
投票

有几件事您需要牢记

1st,您需要配置 apache2 以允许代理连接,这可以通过使用以下内容来实现:

sudo a2enmod proxy                             
sudo a2enmod proxy_http
sudo a2enmod proxy_wstunnel

2nd,您需要确保Web套接字连接与http连接相同。因此,如果您的网站使用 https 那么您的 Web 套接字连接字符串需要使用

连接到服务器
wss://...

wss 代表

secure socket connection

额外提示

不要对任何 websocket 连接使用“http”

在服务器端,不要配置任何连接以使用“wss”连接到 websocket 服务器

© www.soinside.com 2019 - 2024. All rights reserved.