You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Apache 2.4反向代理中启用WebSocket支持

解决Apache反向代理下的WebSocket连接问题

关键前提:启用必需的Apache模块

首先确保Apache加载了处理WebSocket代理的核心模块,执行以下命令:

sudo a2enmod proxy proxy_http proxy_wstunnel rewrite ssl
sudo systemctl restart apache2

可以通过以下命令验证模块是否生效:

sudo apache2ctl -M | grep -E 'proxy|rewrite|ssl'

输出应包含proxy_module、proxy_http_module、proxy_wstunnel_module、rewrite_module和ssl_module。

修正VirtualHost配置

你的问题核心在于WebSocket配置放错了端口:浏览器请求的是wss://(基于HTTPS的WebSocket),对应Apache的443端口,而非80端口。以下是完整的正确配置:

80端口VirtualHost(仅处理HTTP到HTTPS的重定向)

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

443端口VirtualHost(处理HTTPS和WebSocket请求)

<VirtualHost *:443>
    ServerName vtt.domain.de
    ProxyPreserveHost On
    ProxyRequests Off

    # 处理WebSocket升级请求
    RewriteEngine On
    RewriteCond %{HTTP:Upgrade} websocket [NC]
    RewriteCond %{HTTP:Connection} upgrade [NC]
    RewriteRule ^/?(.*) wss://localhost:30000/$1 [P,L]

    # 处理普通HTTPS请求反向代理
    ProxyPass / https://localhost:30000/
    ProxyPassReverse / https://localhost:30000/

    # 替换为你的SSL证书路径(如果用Let's Encrypt,可保留默认Include)
    SSLCertificateFile /path/to/your/certificate.pem
    SSLCertificateKeyFile /path/to/your/private-key.pem
    Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>

配置说明

  1. 端口对应:wss://请求会进入443端口的VirtualHost,这里的WebSocket规则才会生效,之前你把规则放在80端口的配置里完全不会被触发。
  2. 模块依赖:mod_proxy_wstunnel是处理WebSocket代理的必需模块,没有启用的话Apache无法识别wss://代理目标。
  3. 协议匹配:如果你的Docker后端服务是用HTTP而非HTTPS运行,需将配置中的wss://改为ws://,https://改为http://,确保前后端协议一致。
  4. 语法校验:每次修改配置后执行以下命令检查语法,避免重启失败:
sudo apache2ctl configtest

验证

配置完成并重启Apache后,重新测试WebSocket连接,应该可以正常建立。

内容的提问来源于stack exchange,提问作者Haissem55

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 02:35:58