启用Cloudflare Full(Strict)后Curl HTTP请求超时问题求助
解决Cloudflare Full(Strict)模式下Nginx后端请求超时问题
可能的原因及解决方案
1. 验证Nginx SSL证书完整性
Cloudflare Full(Strict)模式要求后端必须使用受信任CA签发的完整证书链(包含根证书+中间证书),仅配置域名证书会导致握手失败。
- 执行命令验证证书链:
检查输出中openssl s_client -connect your-domain.com:443Verify return code是否为0 (ok),若不为0,需补充中间证书到cert.pem(将中间证书内容追加到域名证书后)。
2. 优化Nginx SSL兼容性配置
确保Nginx启用Cloudflare支持的SSL协议和加密套件,在server块添加以下配置:
ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers off; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m;
配置后重启Nginx:systemctl restart nginx
3. 修复PHP CURL的SSL验证逻辑
开启SSL验证后,服务器可能缺少根证书导致CURL无法验证目标服务证书,需指定系统根证书路径:
// 在CURLOPT_SSL_VERIFYPEER配置后添加 curl_setopt($ch, CURLOPT_CAINFO, '/etc/ssl/certs/ca-certificates.crt'); // 适配Debian/Ubuntu,CentOS路径为/etc/pki/tls/certs/ca-bundle.crt
同时确认$this->BASE_URL为HTTPS协议,HTTP请求会被Cloudflare拦截导致超时。
4. 排查Cloudflare与后端连通性
- 登录Cloudflare控制台,进入SSL/TLS → 源服务器,确认“证书类型”匹配后端配置,使用“源证书检查”工具验证Cloudflare能否正常握手后端443端口。
- 检查服务器防火墙/安全组是否放行Cloudflare的IP段,可参考Cloudflare官方IP列表配置白名单。
5. 定位超时细节
- 临时延长CURL超时时间测试:
curl_setopt($ch, CURLOPT_TIMEOUT, 60);,排除网络延迟因素。 - 查看Nginx错误日志(
/var/log/nginx/error.log)和Cloudflare Ray ID对应的请求日志,获取具体握手失败或超时原因。
内容的提问来源于stack exchange,提问作者Show More
相关产品推荐
相关产品推荐

