我对服务器配置比较陌生,不知道该怎么做。 我有一个带有反向代理的网络服务器,它可以工作:
<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
有几件事您需要牢记:
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 服务器