524 错误:发生超时

概述

524 错误表明 Cloudflare 与源服务器建立了 TCP 连接,但是源服务器在连接超时之前未回复 HTTP 响应。 

通常,Cloudflare 会等待 HTTP 响应 100 秒的时间。 如果源服务器在该时间内没有响应,Cloudflare 会关闭连接并发出 524 错误。

524 错误


常见原因

524 错误的最常见原因如下:

  • 源服务器上一个长时间运行的进程,例如缓慢的应用程序或数据库查询,Web 服务器在响应请求之前必须等待这些进程完成。
  • 源 Web 服务器过载

排查 524 错误 

下面是一些解决 524 错误的尝试和建议。

检查源服务器系统资源

检查源服务器的可用资源,包括 CPU 和 RAM,以及总体流量水平。内存不足或 CPU 高负载可能代表着系统资源问题。

如果您无法自行确认这些资源,请与您的服务器提供商或系统管理员联系。

迁移长时间运行的进程

如果您经常运行需要超过 100 秒才能完成的 HTTP 请求(例如大量数据导出),请考虑将这些长时间运行的进程移动到未由 Cloudflare 代理的子域名。该子域名将在 Cloudflare DNS 设置中将橙色云图标切换为灰色。请注意,使用 Page Rule 无法规避 524 错误。

调整 Railgun 设置

如果您使用 Cloudflare Railgun,如果超出 lan.timeout 指定的时间,也会显示 524 错误。lan.timeout 默认为 30 秒,因此如果您在启用 Railgun 时看到 524 错误,请尝试将此值设置得更高。 

打印源服务器响应时间的日志

如果您具有更改源服务器配置文件的更改权限,则可以通过修改日志格式来记录服务器响应请求所需的时间。

大多数 Web 服务器将响应时间存储为变量,您可以将其添加到您的日志配置文件中。

Apache 在 LogFormatCustomLog 指令中声明日志记录格式,具体取决于您是进行全局更改还是仅针对特定虚拟主机。

响应时间存储为 %T 变量。请参阅 Apache的 mod_log_config 文档

对于 Nginx,您可以修改 log_format 指令。响应时间存储为 $request_time 变量。请参阅日志记录文档

使用 cURL 获取响应时间

您可以在 Terminal 窗口(MacOS 和 Linux)中使用 cURL 来获取请求响应的时间。cURL 有一个写出标志,可以使用自定义变量打印一个请求的特定信息。  请参阅文档

您可以使用以下命令以及使用 %{time_connect} %{time_starttransfer} 变量来获取连接到源服务器所需的时间,以及源服务器返回响应所需的时间(即,首字节时间):

curl -vso /dev/null -w "Connect: %{time_connect} \n TTFB: %{time_starttransfer} \n 
Total time: %{time_total} \n" http://www.example.com

您可以使用源服务器的 IP 地址并传递一个host请求头,将此请求直接发送到您的源服务器:

curl -vso /dev/null -w "Connect: %{time_connect} \n TTFB: %{time_starttransfer} \n Total time: %{time_total} \n" 
-H ‘Host: www.example.com’ <http://1.2.3.4

在这些命令输出的底部,您会看到三个字段,类似以下内容:

Connect:0.154
TTFB:1.734
Total time:1.784

Connect 表示与服务器建立 TCP 连接所需的时间。这是相对较低的值。

TTFB 表示生成响应所需的时间。

如果您看到响应时间超过 100 秒,这表示使用Cloudflare代理将会触发 524 错误。

Not finding what you need?

95% of questions can be answered using the search tool. This is the quickest way to get a response.

由 Zendesk 提供技术支持