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

Apache 2.4反向代理WebSocket连接提示Connection头无upgrade token如何解决

问题根因

你当前的VirtualHost配置存在2个核心错误导致WebSocket请求无法正常转发:

  1. 路径匹配规则错误
    你的WebSocket实际请求路径是/crownies/ws/upload/file,但你写的RewriteRule规则是匹配^/ws(.*),也就是路径以/ws开头的请求才会触发WebSocket代理,实际你的请求路径前缀是/crownies/ws,完全匹配不上这条规则,导致WebSocket请求被后面的普通HTTP代理规则转发,普通HTTP代理不会传递Upgrade、Connection这类WebSocket专用头,所以Golang服务端识别不到WebSocket协议。
  2. 缺少必要的头传递配置
    即使路径匹配正确,你没有明确配置代理时保留WebSocket所需的升级头,部分Apache版本默认不会主动传递这些头,也会导致同样的报错。

修复步骤

第一步:确认已启用必要的Apache模块

先执行以下命令开启所需模块,重启Apache生效:

# CentOS8环境执行
sudo dnf install mod_proxy_wstunnel -y
sudo a2enmod proxy proxy_http proxy_wstunnel rewrite
sudo systemctl restart httpd

如果提示a2enmod命令不存在,也可以直接编辑Apache配置文件加载对应模块,确认以下行没有被注释:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
LoadModule rewrite_module modules/mod_rewrite.so

第二步:修改VirtualHost配置

替换原来的Rewrite规则和Proxy配置即可,修改后的对应部分如下:

RewriteEngine On
# 修正路径匹配规则,适配你的/crownies/ws前缀的请求
RewriteCond %{HTTP:Connection} Upgrade [NC]
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteRule ^/crownies/ws(.*) ws://localhost:8080/crownies/ws$1 [P,L]

# 明确配置普通代理和WebSocket代理的头传递
ProxyRequests off
# 追加WebSocket头传递规则
ProxyPassMatch ^/crownies/ws(.*) ws://localhost:8080/crownies/ws$1 upgrade=WebSocket
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
# 强制传递升级相关头
RequestHeader set Upgrade "websocket" env=UPGRADE
RequestHeader set Connection "Upgrade" env=UPGRADE

修改完后验证配置语法再重启Apache:

sudo httpd -t
sudo systemctl restart httpd

测试即可正常建立WebSocket连接。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 11:45:03