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

启用Cloudflare Full(Strict)后Curl HTTP请求超时问题求助

解决Cloudflare Full(Strict)模式下Nginx后端请求超时问题

可能的原因及解决方案

1. 验证Nginx SSL证书完整性

Cloudflare Full(Strict)模式要求后端必须使用受信任CA签发的完整证书链(包含根证书+中间证书),仅配置域名证书会导致握手失败。

  • 执行命令验证证书链:
    openssl s_client -connect your-domain.com:443
    
    检查输出中Verify 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 09:43:11