Cloudflare 报 Error 524 怎么办?源站慢请求、超时与安全恢复

先用 Ray ID 与源站耗时锁定慢请求,再决定优化、异步化或调整架构

Cloudflare Error 524 表示已经连接源站但未及时收到响应;应对齐 Ray ID、Nginx 上游耗时和应用日志,再优化慢请求或改为异步任务。

Cloudflare 页面显示 Error 524 时,先不要反复刷新,也不要只调大 Nginx 超时。这个错误表示 Cloudflare 已经连上源站,但源站没有在 Cloudflare 当前默认的代理读取时限内返回 HTTP 响应。先在 Cloudflare 记录报错网址、时间、时区和 Ray ID,再到宝塔“网站 → 对应站点 → 日志”或 SSH 检查同一时刻的 Nginx、PHP、应用和数据库耗时。

查看日志、负载和慢请求通常不额外收费,也不会修改数据。真正有风险的是重复提交导出、支付、建站安装等写入请求,或者在不知道事务状态时直接杀掉数据库查询:前者可能造成重复任务,后者可能触发回滚、锁等待或业务数据不一致。默认选择是先保存现场并区分单个慢接口还是整站资源不足,再优化请求或改成后台任务;不要把“调大超时”当成根因修复。

先分清 524、522 和源站 504

Cloudflare 官方当前说明,524 发生在 Cloudflare 与源站已经建立连接,但源站迟迟没有给出响应时。522 更偏向 Cloudflare 无法及时和源站完成连接或请求确认;504 可能由源站 Nginx、上游应用或 Cloudflare 返回。错误页面相似,处理入口却不同。

现场更可能卡在哪里先做什么
只有导出、备份、搜索等长请求报 524应用或数据库处理超过 Cloudflare 时限查该 URL 的源站总耗时和上游耗时
全站很快出现 522连接、防火墙、源站负载或网络链路先按连接层检查,不调应用执行时间
源站直连也返回 Nginx 504Nginx 等待 PHP、Node 或其他上游超时查 Nginx 错误日志和对应上游服务
源站很快,Cloudflare 仍在固定时间报 524测试对象、缓存、域名或回源目标可能不一致核对 Host、源站 IP、响应头和 Ray ID
上传过程中报 524请求体向源站写入超时或源站处理过慢保留上传大小、持续时间和源站日志,不盲目重传

如果现场其实是 521 或 522,可先参考Cloudflare 521/522 源站连接排查;如果是源站 Nginx 明确返回 504,则转到Nginx 504 上游超时排查。不要因为三个错误都含“超时”就混用配置。

第一步:记录报错时间、网址和 Ray ID

先复制完整 URL,记录发生时间和时区,并保存 Cloudflare 错误页底部的 Ray ID。若只有登录后的管理接口失败,还要记录动作名称、文件大小或查询范围,但不要把 Cookie、令牌、用户数据和完整日志发到公开群组。

Cloudflare 控制台选择对应域名后,从“分析和日志”中的 HTTP 流量或错误分析查看 524 的 URL、时间和节点信息。不同套餐可见字段可能不同;看不到明细时,仍可用 Ray ID、时间和 URL 对齐源站日志。Cloudflare 的错误分析是抽样数据,不能把图表数量当成源站全部请求数。

第二步:比较经过 Cloudflare 与直接源站的耗时

在不会触发写入的公开页面或专用健康检查地址上做对比。下面命令中的域名、源站 IP 和路径必须换成实际值;不要对付款、安装、提交表单或批量导出接口重复执行。

curl -sS -o /dev/null \
  -w 'cdn code=%{http_code} connect=%{time_connect} start=%{time_starttransfer} total=%{time_total}\n' \
  https://www.example.com/health

curl -sS -o /dev/null \
  --resolve www.example.com:443:203.0.113.10 \
  -w 'origin code=%{http_code} connect=%{time_connect} start=%{time_starttransfer} total=%{time_total}\n' \
  https://www.example.com/health

203.0.113.10 是文档示例地址,不能直接使用。time_starttransfer 表示收到首字节前的时间。若直连源站同样很慢,继续查源站应用;若直连很快而 Cloudflare 路径异常,核对测试是否命中同一源站、同一 Host、同一请求条件。源站 IP 属于敏感运维信息,对外截图前必须遮挡。

第三步:在 Nginx 里定位慢的是整次请求还是上游

先查看当前访问日志是否已经包含请求总耗时 $request_time 和上游响应时间 $upstream_response_time。宝塔站点日志通常能直接看到 URL 和状态,但不一定记录耗时。先用 nginx -T 确认真实生效配置和日志路径。

sudo nginx -T 2>&1 | grep -nE 'server_name|access_log|error_log|log_format|proxy_pass|fastcgi_pass'
sudo tail -n 200 /path/to/site-access.log
sudo tail -n 200 /path/to/site-error.log

把日志路径换成生效配置中的真实值。nginx -T 可能显示内网地址、证书路径和上游信息,分享前要脱敏。若日志没有耗时字段,可以在备份配置后为目标站点增加临时带耗时的日志格式;修改前先确认不会与面板自动生成配置冲突,保存后必须通过 nginx -t 才能平滑重载。

log_format timed '$remote_addr $time_iso8601 "$request" '
                 'status=$status rt=$request_time '
                 'urt=$upstream_response_time ustatus=$upstream_status';
access_log /path/to/site-timed.log timed;

rt 很高、urt 也很高,通常是 PHP、Node、Java 或数据库链路慢;rt 高但没有上游时间,检查 Nginx 本地文件、请求体接收和内部重定向;多个 urt 值则可能发生了上游重试。不要只凭一条日志就重启服务,先看同一 URL 是否稳定复现。

第四步:检查 PHP、应用和数据库是否真正卡住

如果 524 只出现在 WordPress 导入、备份、报表、搜索或大型 API,先查应用日志和服务状态。以下都是只读检查;服务名、日志单元和进程名要按环境替换。

systemctl --no-pager --full status php-fpm nginx
journalctl -u php-fpm --since '15 minutes ago' --no-pager | tail -n 200
free -h
vmstat 1 5
ps -eo pid,ppid,stat,%cpu,%mem,etime,cmd --sort=-%cpu | head -n 20

有些系统的服务名是 php8.2-fpmphp8.3-fpm 或面板自定义名称。若 PHP-FPM 工作进程已满,先找慢脚本、外部 API 或数据库等待;若 CPU、内存和 I/O 都紧张,应先止住并发任务。日志里出现数据库锁等待时,先保存线程、事务和业务时间点,再由了解数据影响的人处理,不要执行来源不明的批量杀查询脚本。

第五步:按请求类型修复,而不是统一增加超时

普通页面或 API:优先缩小查询范围、增加必要索引、移除串行外部调用、启用安全缓存,或把非必要工作移出同步请求。目标是让用户请求尽快返回,不是让浏览器一直等待。

导出、备份、生成报告:把任务改为后台队列,前端先获得任务 ID,再轮询进度和下载结果。这样即使任务执行几分钟,也不必让一条 HTTP 连接持续占用。任务必须设计幂等或防重复提交,否则用户刷新会启动多份任务。

确实需要长连接的企业业务:Cloudflare 当前文档显示代理读取超时默认是 125 秒,只有 Enterprise 区域可在允许范围内调整。普通套餐不能靠 Nginx 的 proxy_read_timeout 300s 绕过 Cloudflare 更早结束的连接。即使套餐允许调高,也应先确认长请求不会占满 PHP-FPM、连接池或数据库会话。

临时改为 DNS only:只适合独立、受控的后台任务子域名。灰云会绕过 Cloudflare 的代理、缓存和部分安全能力,并暴露源站访问入口;切换前要有源站防火墙、TLS、认证和访问控制,不能把主站整体切走来掩盖慢请求。

修复后怎样验收

先在源站验证目标请求能在预期时间完成,再从 Cloudflare 公网路径验证。至少检查一次成功请求、一次受控失败、并发下的资源余量,以及写入任务是否重复。记录 Nginx 的 rturt、应用耗时和数据库耗时,确认瓶颈真的下降,而不是只把报错推迟。

curl -sS -D /tmp/headers.txt -o /dev/null \
  -w 'code=%{http_code} start=%{time_starttransfer} total=%{time_total}\n' \
  https://www.example.com/health

grep -iE 'server:|cf-ray:|content-type:' /tmp/headers.txt

只对无副作用的地址执行。若使用缓存,还要分别验证首次 MISS 和后续 HIT;若是后台任务,要确认任务状态、最终文件、权限和重复提交保护。Cloudflare SSL 故障不是 524 的同一分支,可参考Cloudflare 525/526 源站 TLS 排查

怎样回退

如果新增日志格式或调整 Nginx 后站点异常,恢复配置备份,执行 nginx -t,成功后再平滑重载。若刚上线的异步任务有重复执行或权限问题,先停止新任务入口,保留队列、任务 ID 和审计日志,由业务侧确认哪些任务可重试;不要删除未知任务或产物。若临时启用了 DNS only,确认源站和 Cloudflare 代理配置都恢复后,再清理只为临时直连开放的防火墙规则。

官方与上游依据

云服务器教程Vue、React 单页应用刷新后 404 怎么办?Nginx History 路由与 API 分流2026-09-13云服务器教程Docker 提示 pull access denied 怎么办?镜像名、仓库权限与登录排查2026-09-13云服务器教程MySQL 报 ERROR 1205 Lock wait timeout 怎么办?阻塞事务与安全止损2026-09-12

加入开发者交流社区

与全球开发者、运维和工作室一起交流技术、分享经验、配置、账号与最新优惠信息

  • 云平台使用交流
  • 资源优惠信息
  • 最新教程与资讯
  • 开发者经验分享
联系 Telegram 客服
加入开发者交流社区