PHP WebSocket(Ratchet)遇404错误,Apache反向代理问题排查
问题排查与修复方案
核心问题分析
你的反向代理配置存在两个关键问题:
- 后端Ratchet服务使用的是
ws协议,你却配置了wss://127.0.0.1:8080,导致Apache无法正确转发请求 - 缺少WebSocket握手必需的HTTP头转发规则,握手失败触发404错误
修复步骤
1. 修正反向代理配置
修改mysite.url.conf中的<Location>块内容,调整协议并添加头转发规则:
<Location /websocket> # 后端服务是ws协议,这里改用ws://而非wss:// ProxyPass "ws://127.0.0.1:8080" ProxyPassReverse "ws://127.0.0.1:8080" # 转发WebSocket握手必需的HTTP头 ProxyAddHeaders On RequestHeader set Upgrade "websocket" RequestHeader set Connection "Upgrade" </Location>
2. 确认代理模块状态
执行命令检查proxy_wstunnel模块是否已加载:
httpd -M | grep wstunnel
如果无输出,先启用模块再重启Apache:
sudo a2enmod proxy_wstunnel sudo systemctl restart httpd
3. 排查其他拦截规则
检查配置文件中是否存在RewriteRule或其他路径规则,可能拦截/websocket请求。若有类似全局重写规则,需添加例外:
RewriteCond %{REQUEST_URI} !^/websocket
4. 重新测试
用wscat再次验证连接:
wscat -c wss://mysite.url/websocket
额外注意事项
- 需在Sucuri控制台将
/websocket路径加入白名单,避免防火墙拦截 - 确认后端Ratchet服务正常运行在
127.0.0.1:8080,可通过netstat -tulpn | grep 8080检查进程状态
内容的提问来源于stack exchange,提问作者Cris
相关产品推荐
相关产品推荐

