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

Cloudflare灵活SSL下WebSocket握手错误525及连接问题求助

解决Cloudflare Flexible SSL模式下WebSocket连接失败(525错误+CORS问题)

这问题我之前帮朋友排查过类似的,Flexible SSL模式下WebSocket踩坑确实挺常见的,咱们一步步拆解问题、解决问题:

先搞懂为啥会出这些错

  • CORS错误:因为你的前端是HTTPS(通过Cloudflare),而源服务器是HTTP,浏览器会触发跨域检查,服务器没返回正确的Access-Control-Allow-Origin头就会报错。
  • 525错误:这个是Cloudflare和你的源服务器之间的连接握手失败,但Flexible模式下Cloudflare是用HTTP连接源服务器的,所以本质是你的源服务器没正确响应Cloudflare的WebSocket升级请求,或者防火墙/配置拦截了请求。

一步一步解决

1. 先确认源服务器的WebSocket本身能正常工作

先绕开Cloudflare,直接测试源服务器的WebSocket:

  • 用工具(比如wscat)执行命令:wscat -c ws://你的源服务器IP:80/你的WebSocket路径
  • 如果连接失败,说明问题出在服务器本身,先把服务器的WebSocket服务调通——比如确认服务在监听80端口(或对应HTTP端口),没有被防火墙拦截。

2. 修正服务器的WebSocket配置(以Nginx为例)

如果用Nginx反向代理WebSocket,必须添加WebSocket升级的头配置,同时处理CORS:

server {
    listen 80;
    server_name 你的域名;

    location /你的WebSocket路径 {
        # 转发到本地的WebSocket服务端口
        proxy_pass http://localhost:你的WebSocket服务端口;
        
        # 关键:支持WebSocket协议升级
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        
        # 传递必要的请求头
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        
        # 解决CORS问题
        add_header Access-Control-Allow-Origin *; # 生产环境建议指定你的域名,比如https://your-domain.com
        add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
        add_header Access-Control-Allow-Headers "Upgrade, Connection, Origin";
    }
}

如果是Apache,也要对应配置mod_proxy_wstunnel模块,添加类似的升级头和CORS设置。

3. 调整客户端的WebSocket配置

你现有的connectionOptions可以微调一下,确保和Flexible模式匹配:

var connectionOptions = {
    "force new connection": true,
    "reconnectionAttempts": "Infinity",
    "timeout": 10000,
    "transports": ["websocket"],
    "secure": true, // 客户端是和Cloudflare的HTTPS连接,所以设为true
    "rejectUnauthorized": false // 如果你的源服务器没有SSL证书(Flexible模式不需要),可以加这个避免验证错误
};

注意:客户端要使用wss://你的域名/你的WebSocket路径来连接,不要直接用源服务器的IP或HTTP地址。

4. 检查Cloudflare的后台配置

  • 确认Network选项里的「WebSocket支持」是开启状态(默认是开的,但最好检查一下)。
  • 检查Page Rules,有没有针对WebSocket路径的缓存或重写规则——WebSocket请求不能被缓存,所以如果有缓存规则,要排除你的WebSocket路径。
  • 确认Cloudflare的IP段没有被你的服务器防火墙拦截(把Cloudflare官方IP列表加入服务器防火墙的白名单)。

最后再验证

配置完之后,先重启服务器的Web服务(Nginx/Apache)和WebSocket服务,然后用前端页面测试连接:

  • 如果还是有问题,打开浏览器的开发者工具,看Network里的WebSocket请求,查看请求头和响应头,确认Upgrade和Connection头是否正确传递,CORS头是否存在。
  • 也可以在Cloudflare的「Analytics」->「Traffic」里查看请求的状态码,确认是不是服务器那边的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:57:03