跳转到内容
搜索文档

为站点故障排除收集信息

最后更新 查看 MarkdownAgent 设置

关于本指南

尽可能多地捕获信息对于诊断问题以及向 Cloudflare 支持提供足够详细的信息非常重要。本文说明如何收集 Cloudflare 支持通常会要求提供的故障排除信息。


快速参考:选择合适的工具

使用下表根据您的问题快速确定应使用哪种故障排除方法:

问题类型 推荐工具 何时使用
页面加载不正确 HAR 文件 视觉问题、损坏的元素、页面加载缓慢
JavaScript 错误 控制台日志 CORS 错误、脚本失败、浏览器端错误
协议错误(QUIC/HTTP2) NetLog dump ERR_QUIC_PROTOCOL_ERRORERR_HTTP2_PROTOCOL_ERROR
响应时间慢 curl(性能) 测量延迟、TLS 握手时间
HTTP 错误(5xx、4xx) curl(HTTP 错误) 确定错误来自 Cloudflare 还是源站
缓存问题 curl(缓存) 缓存未命中、过期内容、缓存标头
SSL/TLS 证书问题 curl(SSL/TLS) 证书错误、TLS 版本问题
连接超时/中断 Traceroute / MTR 网络路径问题、跳点间延迟
丢包、连接重置 数据包捕获 第 3/4 层问题、SSL 握手失败
识别提供服务的位置 Cloudflare 数据中心 确定哪个 Cloudflare PoP 在处理请求

基于浏览器的故障排除

这些工具直接从 Web 浏览器捕获信息,适用于诊断页面加载和渲染相关问题。

生成 HAR 文件

HTTP Archive(HAR)会记录所有 Web 浏览器请求,包括请求与响应标头、正文内容以及页面加载时间。请务必使用无痕模式(Incognito Mode)或私密浏览窗口。

部分浏览器需要浏览器扩展才能生成 HAR,或无法生成 HAR。安装浏览器扩展时,请遵循扩展提供商的说明。

在 Chrome 中

  1. 在无痕模式下查看的浏览器页面中,右键单击任意位置并选择 Inspect Element(检查元素)

  2. Chrome DevTools 会出现在浏览器底部或左侧。单击 Network(网络) 选项卡。

Chrome 开发者工具中 HAR Network 选项卡的屏幕截图
  1. 勾选 Preserve log(保留日志)。如果要报告 Cloudflare Cache 问题,也请勾选 Disable cache(禁用缓存)

  2. 单击录制。

Chrome 开发者工具中的 HAR 录制按钮
  1. 浏览到会出现问题的 URL。出现问题后,单击 DevTools 顶部的 “Export HAR” 选项。

Chrome DevTools 中的 export HAR 选项.

  1. 将 HAR 文件附加到您的支持工单。

在 Firefox 中

  1. 使用私密窗口时,通过应用程序菜单选择 Tools(工具) > Web Developer(Web 开发者) > Network(网络),或按 Ctrl+Shift+I(Windows/Linux)或 Cmd+Option+I(OS X)。

  2. 浏览到会出现问题的 URL。

  3. 复现问题后,右键单击并选择 Save All As HAR(全部另存为 HAR)

在 Microsoft Edge 中

  1. 在私密窗口中,打开 **Developer tools(可使用 F12 快捷键)**并选择 Network(网络) 选项卡。

  2. 浏览到会出现问题的 URL。

  3. 复现问题后,单击 Export as HAR(导出为 HAR),然后单击 Save As...(另存为...)

在 Safari 中

  1. 在 Safari 中,确保私密窗口顶部出现 Develop(开发) 菜单。否则,请前往 Safari > Preferences(偏好设置) > Advanced(高级) 并选择 Show Develop Menu in menu bar(在菜单栏中显示开发菜单)

  2. 导航到 Develop(开发) > Show Web Inspector(显示 Web 检查器)

  3. 浏览到会出现问题的 URL。

  4. 在 Web Inspector 中对某个资源按住 Ctrl 并单击,然后单击 Export HAR(导出 HAR)

在移动设备上

对于 Android:

  1. 在移动设备上启用 USB Debugging 模式。

  2. 前往 chrome://inspect/#devices

  3. 如果已启用调试模式,您将在 “Remote Target” 下方看到设备列表,如下例所示:

在 Android 调试模式下查找 Inspect Devices 的位置
  1. 输入 URL,选择 Open(打开)inspect(检查) 以打开 Chrome 的 DevTools。

  2. 在 DevTools 窗口中选择 Network(网络) 选项卡。

  3. 勾选 Preserve log(保留日志)。如果要报告 Cloudflare Cache 问题,也请勾选 Disable cache(禁用缓存)

  4. 单击 record(录制)

在 Chrome 开发者工具中查找录制按钮的位置
  1. 浏览到会出现问题的 URL。出现问题后,在 Network(网络) 选项卡中的任意项目上右键单击,并选择 Save all as HAR with Content(将全部另存为带内容的 HAR)
如何保存 HAR 内容
  1. 将 HAR 文件与受影响三星设备的屏幕录制一起附加到您的支持工单。有关如何从三星设备进行屏幕录制的说明,请参阅 Samsung 文档

对于 iPhone:

请参阅 OktaApple 关于如何从 iOS 设备生成 HAR 文件的支持文章。将 HAR 文件与受影响 iOS 设备的屏幕录制一起附加到您的支持工单。Apple 设备现已具备内置屏幕录制功能

导出控制台日志

在某些情况下,当请求未由浏览器发出或被浏览器取消时(例如由于 CORS),我们需要获取 JS 控制台日志输出以及 HAR 文件,以确定根本原因。

在 Chrome 中

  1. 从 DevTools 栏转到 Console(控制台) 选项卡。
  2. 转到 Console Settings(控制台设置) 并选择 Preserve Log(保留日志)
  3. 保持控制台打开,并执行复现问题的步骤。
  4. Console(控制台) 选项卡中的任意项目上右键单击,并选择 Save as(另存为) 日志文件。
  5. 将日志文件附加到您的支持工单。
在 Chrome 开发者工具中查找 Console 选项卡的位置

在 Firefox 中

  1. 从 Web Developer Tools 栏转到 Console(控制台) 选项卡。
  2. 转到 Console Settings(控制台设置) 并选择 Persist Log(持久化日志)Show Timestamps(显示时间戳)
  3. 保持控制台打开,并执行复现问题的步骤。
  4. 右键单击,Select All 消息,然后 Export Visible Messages to File
  5. 将日志文件附加到您的支持工单。

在 Microsoft Edge 中

  1. 从 Developer Tools 栏转到 Console(控制台) 选项卡。
  2. 转到 Console Settings(控制台设置) 并选择 Preserve Log(保留日志)
  3. 保持控制台打开,并执行复现问题的步骤。
  4. Console(控制台) 选项卡中的任意项目上右键单击,并选择 Save as(另存为) 日志文件。
  5. 将日志文件附加到您的支持工单。

在 Safari 中

  1. 从 Web Inspector 栏转到 Console(控制台) 选项卡。
  2. 勾选 Preserve Log(保留日志) 复选框。
  3. 保持控制台打开,并执行复现问题的步骤。
  4. 选择所有消息,右键单击并选择 Save Selected(保存所选) 到日志文件。
  5. 将日志文件附加到您的支持工单。

捕获 NetLog dump

在某些情况下,为进一步排查与协议相关的问题(例如 ERR_QUIC_PROTOCOL_ERRORERR_HTTP2_PROTOCOL_ERROR 等错误),我们的支持团队可能会要求您提供 NetLog dump

  1. 打开新标签页,并根据您使用的浏览器输入以下地址:
  • chrome://net-export
  • edge://net-export
  • opera://net-export
  1. 单击 Start Logging To Disk(开始将日志写入磁盘) 按钮。
  2. 在另一个标签页中复现网络问题。 (chrome://net-export/edge://net-export/opera://net-export 标签页需要保持打开,否则日志记录会自动停止)
  3. 单击 Stop Logging(停止记录) 按钮。
  4. 将日志文件附加到您的支持工单。

命令行故障排除

这些工具从终端或命令提示符运行,适用于在没有浏览器开销的情况下测试连接性、性能和服务器响应。

识别处理请求的 Cloudflare 数据中心

我们的数据中心地图列在 Cloudflare status page 上,按大洲排序。 数据中心名称中的三字母代码是最近主要国际机场的 IATA code。 通过访问以下地址确定为您的浏览器提供服务的 Cloudflare 数据中心: http://``_www.example.com_``/cdn-cgi/trace.

www.example.com 替换为您的域名和主机名。注意输出中的 colo 字段。

使用 curl 排查请求

curl 是用于发送 HTTP/HTTPS 请求的命令行工具,适用于排查以下问题:

  • HTTP/HTTPS 性能
  • HTTP 错误响应
  • HTTP 标头
  • API
  • 比较服务器/代理响应
  • SSL 证书

运行以下命令向您的网站发送标准 HTTP GET 请求(将 www.example.com 替换为您的主机名):

curl -svo /dev/null http://www.example.com/

此示例 curl 命令会返回详述 HTTP 响应与请求标头的输出,但会丢弃页面正文输出。curl 输出可确认 HTTP 响应,以及 Cloudflare 当前是否正在为该站点代理流量。

查看以下各节,了解排查 HTTP 错误、性能、缓存和 SSL/TLS 证书的提示:

HTTP 错误

在排查来自 Cloudflare 的响应中的 HTTP 错误时,可通过直接向源站 Web 服务器发送请求来测试错误是否由源站引起。要排查 HTTP 错误,请直接对您的源站 Web 服务器 IP 地址运行 curl(绕过 Cloudflare 代理):

curl -svo /dev/null http://example.com --connect-to ::203.0.113.34

性能

curl 可通过 -w--write-out curl 选项 测量 HTTP/HTTPS 请求的延迟或性能下降。下面的示例 curl 会测量请求事务中的多个性能指标,例如 TLS 握手时长、DNS 查询、重定向、传输等:

curl -svo /dev/null https://example.com/ -w "\nContent Type: %{content_type} \
\nHTTP Code: %{http_code} \
\nHTTP Connect:%{http_connect} \
\nNumber Connects: %{num_connects} \
\nNumber Redirects: %{num_redirects} \
\nRedirect URL: %{redirect_url} \
\nSize Download: %{size_download} \
\nSize Upload: %{size_upload} \
\nSSL Verify: %{ssl_verify_result} \
\nTime Handshake: %{time_appconnect} \
\nTime Connect: %{time_connect} \
\nName Lookup Time: %{time_namelookup} \
\nTime Pretransfer: %{time_pretransfer} \
\nTime Redirect: %{time_redirect} \
\nTime Start Transfer: %{time_starttransfer} \
\nTime Total: %{time_total} \
\nEffective URL: %{url_effective}\n" 2>&1

对此计时输出的说明可在 Cloudflare 博客中找到。

缓存

curl 有助于查看影响缓存的 HTTP 响应标头。在排查 Cloudflare 缓存时,尤其要查看多个 HTTP 标头:

  • CF-Cache-Status
  • Cache-Control/Pragma
  • Expires
  • Last-Modified
  • s-maxage

SSL/TLS 证书

使用 curl 查看证书

以下 curl 命令显示在 HTTPS 请求期间由 Cloudflare 提供的 SSL 证书(将 www.example.com 替换为您的主机名):

curl -svo /dev/null https://www.example.com/ 2>&1 | egrep -v "^{.*$|^}.*$|^* http.*$"

要显示源站证书(假定已安装),请将下面的 203.0.113.34 替换为源站 Web 服务器的实际 IP 地址,并将 www.example.com 替换为您的域名和主机名:

curl -svo /dev/null https://www.example.com --connect-to ::203.0.113.34 2>&1 | egrep -v "^{.*$|^}.*$|^* http.*$"

测试 TLS 版本

如果要排查浏览器支持问题或确认支持哪些 TLS 版本,curl 允许您通过向 curl 添加 --tlsv1.X--tls-max 选项来测试特定 TLS 版本:

  • --tlsv1.0 --tls-max 1.0
  • --tlsv1.1 --tls-max 1.1
  • --tlsv1.2 --tls-max 1.2
  • --tlsv1.3 --tls-max 1.3

临时暂停 Cloudflare

更多详情请参阅 Pause Cloudflare


网络故障排除

这些工具有助于诊断网络级问题,例如您所在位置与 Cloudflare 或源站之间的路由问题、丢包和连接失败。

执行 traceroute

Traceroute 是一种网络诊断工具,用于测量数据包跨网络的路由延迟。大多数操作系统支持 traceroute 命令。如果您的 Cloudflare 代理网站出现连接问题,并向 Cloudflare 支持寻求协助,请务必提供 traceroute 的输出。

查看以下在不同操作系统上运行 traceroute 的说明。在以下示例中将 www.example.com 替换为您的域名和主机名:

在 Windows 上运行 traceroute

  1. 打开 Start(开始) 菜单。

  2. 单击 Run(运行)

  3. 要打开命令行界面,键入 cmd,然后单击 OK

  4. 在命令行提示符处,键入:

对于 IPv4 -

tracert www.example.com

对于 IPv6 -

tracert -6 www.example.com
  1. Enter

  2. 您可以复制结果以保存到文件或粘贴到其他程序中。

在 Linux 上运行 traceroute

  1. 打开终端窗口。

  2. 在命令行提示符处,键入:

对于 IPv4 -

traceroute www.example.com

对于 IPv6 -

traceroute -6 www.example.com
  1. 您可以复制结果以保存到文件或粘贴到其他程序中。

在 Mac OS 上运行 traceroute

  1. 打开 Network Utility(网络实用工具) 应用程序。
  2. 单击 Traceroute(跟踪路由) 选项卡。
  3. 在相应输入字段中键入 domainIP address,然后按 Trace(跟踪)
  4. 您可以复制结果以保存到文件或粘贴到其他程序中。

或者,在使用 Mac OS 终端程序时,可按照上述相同的 Linux traceroute 说明操作。

将 CF-RAY 标头添加到日志

CF-RAY 标头可在 Cloudflare 网络中追踪网站请求。在排查问题时,请向 Cloudflare 支持提供 Web 请求的 CF-RAY。您也可以通过使用与您的 Web 服务器品牌对应的以下代码段编辑源站 Web 服务器配置,将 CF-RAY 添加到日志中:

对于 Apache Web 服务器,将 %{CF-Ray}i 添加到 LogFormat

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\" %{CF-Ray}i" cf_custom

对于 Nginx Web 服务器,将 '$http_cf_ray' 添加到 log_format

log_format cf_custom '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'$http_cf_ray';

执行 MTR

My Traceroute(MTR)是一种工具,它将 traceroute 和 ping 结合起来测量网络路径的健康状况,是测试网络连接性和速度的另一种常用方法。除了网络路径上的跳点外,MTR 还会持续更新显示到目标路由上的延迟和丢包信息。这有助于通过实时查看路径上发生的情况来排查网络问题。

MTR 以与 traceroute 类似的方式发现网络路径,然后定期发送数据包以继续收集信息,从而提供网络健康状况和速度的更新视图。

与 traceroute 一样,MTR 对出站数据包可使用 ICMP 或 UDP,但依赖 ICMP 作为返回(Type 11: Time Exceeded)数据包。

如何使用 MTR 生成网络路径报告?

在类 UNIX 机器上使用 MTR

通常,我们会按如下方式使用 MTR:

mtr -rw <dest_hostname> e.g.: mtr -rw one.one.one.one

或使用目标 IP:

mtr -rw <dest_IP> e.g.: mtr -rw 1.1.1.1

使用 TCP 端口

mtr -P <tcp port> -T <destination ip>

请参阅此文档,其中更详细地说明了如何分析 MTR:How to read MTR

运行数据包捕获

发生在第 3/4 层的问题会在请求到达 Cloudflare 日志系统之前出现,因此不会显示在 HTTP 日志中。因此,在没有数据包级深入调查的情况下,排查与连接重置、丢包或 SSL 握手失败相关的问题可能会很棘手。

Cloudflare 生成的某些 HTTP 错误,例如 520s524s525s,表明存在第 3/4 层的底层问题,可能需要数据包捕获以进一步调查。

如何运行数据包捕获

Cloudflare 建议使用 Wireshark 运行数据包捕获。有关如何使用 tcpdump 命令行的说明,请参阅文章。

  1. 关闭所有可能在后台发送数据的程序/浏览器标签页,以避免之后必须使用大量显示过滤器。
  2. 创建您的 Wireshark 捕获过滤器(更多信息请参阅文章)。
  3. 选择适当的接口(例如 Wi-Fi: en0)。如果不确定使用哪个接口,Wireshark 会为每个接口提供 I/O 图以给您提示。
  4. 单击左上角的蓝色鲨鱼鳍图标以开始数据包捕获。
  5. 在运行捕获时复现问题。
  6. 单击左上角的红色方块图标以停止数据包捕获。
  7. 另存为 .pcap 文件,并将其附加到您的支持工单。

相关资源

这篇文档对您有帮助吗?