已解决:Cloudflare环境下WebSocket服务器域名连接失败问题
Cloudflare代理下81端口WebSocket连接失败排查思路
1. 排查Cloudflare端口支持限制
- Cloudflare基础/免费套餐仅支持有限端口的流量代理,81端口不在官方开放的HTTP/HTTPS代理端口列表内,所有发往
domain.com:81的流量会被Cloudflare直接拦截,这是此类问题的最高概率诱因
2. 确认WebSocket功能开关状态
- 登录Cloudflare控制台进入对应域名的「网络」配置页,检查WebSocket功能是否已开启,后续调整端口后也需要该开关处于开启状态才能正常代理WebSocket流量
3. 可行调整方案
- 端口迁移方案:将WebSocket服务迁移到Cloudflare支持的端口,例如8080、8443等,调整后直接用对应端口的ws/wss地址访问即可
- 路径转发方案:配置Cloudflare Origin Rules或页面规则,将指定路径(例如
/ws/*)的流量转发到源站81端口,对外仅需使用标准443端口访问,地址格式为wss://domain.com/ws,无需暴露非标准端口 - 直连方案:如果必须保留81端口,可将WebSocket对应的域名解析设置为「仅DNS」模式(关闭橙色云代理),但该方案会直接暴露源站IP,失去Cloudflare的防护和加速能力
4. 连通性验证命令
- 先验证源站WebSocket服务正常:
curl -i -N -H "Connection: Upgrade" -H "Upgrade: websocket" -H "Sec-WebSocket-Key: test123" -H "Sec-WebSocket-Version: 13" http://源站IP:81 - 调整配置后再验证域名侧连通性,替换上述命令中的IP和端口/路径为域名侧配置即可
额外SSL配置注意事项
- 使用wss协议连接时,需确认Cloudflare的SSL/TLS加密模式与源站匹配:如果源站未配置SSL证书仅支持ws协议,加密模式不能设置为「严格」,可先切换为「灵活」模式验证连通性后再调整到符合安全要求的级别
内容的提问来源于stack exchange,提问作者YFH
相关产品推荐
相关产品推荐

