尽可能多地捕获信息对于诊断问题以及向 Cloudflare 支持提供足够详细的信息非常重要。本文说明如何收集 Cloudflare 支持通常会要求提供的故障排除信息。
使用下表根据您的问题快速确定应使用哪种故障排除方法:
| 问题类型 | 推荐工具 | 何时使用 |
|---|---|---|
| 页面加载不正确 | HAR 文件 | 视觉问题、损坏的元素、页面加载缓慢 |
| JavaScript 错误 | 控制台日志 | CORS 错误、脚本失败、浏览器端错误 |
| 协议错误(QUIC/HTTP2) | NetLog dump | ERR_QUIC_PROTOCOL_ERROR、ERR_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 浏览器捕获信息,适用于诊断页面加载和渲染相关问题。
HTTP Archive(HAR)会记录所有 Web 浏览器请求,包括请求与响应标头、正文内容以及页面加载时间。请务必使用无痕模式(Incognito Mode)或私密浏览窗口。
部分浏览器需要浏览器扩展才能生成 HAR,或无法生成 HAR。安装浏览器扩展时,请遵循扩展提供商的说明。
-
在无痕模式下查看的浏览器页面中,右键单击任意位置并选择 Inspect Element(检查元素)。
-
Chrome DevTools 会出现在浏览器底部或左侧。单击 Network(网络) 选项卡。
-
勾选 Preserve log(保留日志)。如果要报告 Cloudflare Cache 问题,也请勾选 Disable cache(禁用缓存)。
-
单击录制。
- 浏览到会出现问题的 URL。出现问题后,单击 DevTools 顶部的 “Export HAR” 选项。
.
- 将 HAR 文件附加到您的支持工单。
-
使用私密窗口时,通过应用程序菜单选择 Tools(工具) > Web Developer(Web 开发者) > Network(网络),或按 Ctrl+Shift+I(Windows/Linux)或 Cmd+Option+I(OS X)。
-
浏览到会出现问题的 URL。
-
复现问题后,右键单击并选择 Save All As HAR(全部另存为 HAR)。
-
在私密窗口中,打开 **Developer tools(可使用
F12快捷键)**并选择 Network(网络) 选项卡。 -
浏览到会出现问题的 URL。
-
复现问题后,单击 Export as HAR(导出为 HAR),然后单击 Save As...(另存为...)。
-
在 Safari 中,确保私密窗口顶部出现 Develop(开发) 菜单。否则,请前往 Safari > Preferences(偏好设置) > Advanced(高级) 并选择 Show Develop Menu in menu bar(在菜单栏中显示开发菜单)
-
导航到 Develop(开发) > Show Web Inspector(显示 Web 检查器)。
-
浏览到会出现问题的 URL。
-
在 Web Inspector 中对某个资源按住 Ctrl 并单击,然后单击 Export HAR(导出 HAR)。
对于 Android:
-
在移动设备上启用 USB Debugging 模式。
-
前往
chrome://inspect/#devices。 -
如果已启用调试模式,您将在 “Remote Target” 下方看到设备列表,如下例所示:
-
输入 URL,选择 Open(打开) 和 inspect(检查) 以打开 Chrome 的 DevTools。
-
在 DevTools 窗口中选择 Network(网络) 选项卡。
-
勾选 Preserve log(保留日志)。如果要报告 Cloudflare Cache 问题,也请勾选 Disable cache(禁用缓存)。
-
单击 record(录制)。
- 浏览到会出现问题的 URL。出现问题后,在 Network(网络) 选项卡中的任意项目上右键单击,并选择 Save all as HAR with Content(将全部另存为带内容的 HAR)。
- 将 HAR 文件与受影响三星设备的屏幕录制一起附加到您的支持工单。有关如何从三星设备进行屏幕录制的说明,请参阅 Samsung 文档 ↗。
对于 iPhone:
请参阅 Okta ↗ 或 Apple ↗ 关于如何从 iOS 设备生成 HAR 文件的支持文章。将 HAR 文件与受影响 iOS 设备的屏幕录制一起附加到您的支持工单。Apple 设备现已具备内置屏幕录制功能 ↗。
在某些情况下,当请求未由浏览器发出或被浏览器取消时(例如由于 CORS ↗),我们需要获取 JS 控制台日志输出以及 HAR 文件,以确定根本原因。
- 从 DevTools 栏转到 Console(控制台) 选项卡。
- 转到 Console Settings(控制台设置) 并选择 Preserve Log(保留日志)。
- 保持控制台打开,并执行复现问题的步骤。
- 在 Console(控制台) 选项卡中的任意项目上右键单击,并选择 Save as(另存为) 日志文件。
- 将日志文件附加到您的支持工单。
- 从 Web Developer Tools 栏转到 Console(控制台) 选项卡。
- 转到 Console Settings(控制台设置) 并选择 Persist Log(持久化日志) 和 Show Timestamps(显示时间戳)。
- 保持控制台打开,并执行复现问题的步骤。
- 右键单击,Select All 消息,然后 Export Visible Messages to File。
- 将日志文件附加到您的支持工单。
- 从 Developer Tools 栏转到 Console(控制台) 选项卡。
- 转到 Console Settings(控制台设置) 并选择 Preserve Log(保留日志)。
- 保持控制台打开,并执行复现问题的步骤。
- 在 Console(控制台) 选项卡中的任意项目上右键单击,并选择 Save as(另存为) 日志文件。
- 将日志文件附加到您的支持工单。
- 从 Web Inspector 栏转到 Console(控制台) 选项卡。
- 勾选 Preserve Log(保留日志) 复选框。
- 保持控制台打开,并执行复现问题的步骤。
- 选择所有消息,右键单击并选择 Save Selected(保存所选) 到日志文件。
- 将日志文件附加到您的支持工单。
在某些情况下,为进一步排查与协议相关的问题(例如 ERR_QUIC_PROTOCOL_ERROR、ERR_HTTP2_PROTOCOL_ERROR 等错误),我们的支持团队可能会要求您提供 NetLog dump ↗。
- 打开新标签页,并根据您使用的浏览器输入以下地址:
chrome://net-exportedge://net-exportopera://net-export
- 单击 Start Logging To Disk(开始将日志写入磁盘) 按钮。
- 在另一个标签页中复现网络问题。
(
chrome://net-export/、edge://net-export/或opera://net-export标签页需要保持打开,否则日志记录会自动停止) - 单击 Stop Logging(停止记录) 按钮。
- 将日志文件附加到您的支持工单。
这些工具从终端或命令提示符运行,适用于在没有浏览器开销的情况下测试连接性、性能和服务器响应。
我们的数据中心地图 ↗列在 Cloudflare status page ↗ 上,按大洲排序。
数据中心名称中的三字母代码是最近主要国际机场的 IATA code ↗。
通过访问以下地址确定为您的浏览器提供服务的 Cloudflare 数据中心:
http://``_www.example.com_``/cdn-cgi/trace.
将 www.example.com 替换为您的域名和主机名。注意输出中的 colo 字段。
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 证书的提示:
在排查来自 Cloudflare 的响应中的 HTTP 错误时,可通过直接向源站 Web 服务器发送请求来测试错误是否由源站引起。要排查 HTTP 错误,请直接对您的源站 Web 服务器 IP 地址运行 curl(绕过 Cloudflare 代理):
curl -svo /dev/null http://example.com --connect-to ::203.0.113.34curl 可通过 -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
以下 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 版本,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
更多详情请参阅 Pause Cloudflare。
这些工具有助于诊断网络级问题,例如您所在位置与 Cloudflare 或源站之间的路由问题、丢包和连接失败。
Traceroute 是一种网络诊断工具,用于测量数据包跨网络的路由延迟。大多数操作系统支持 traceroute 命令。如果您的 Cloudflare 代理网站出现连接问题,并向 Cloudflare 支持寻求协助,请务必提供 traceroute 的输出。
查看以下在不同操作系统上运行 traceroute 的说明。在以下示例中将 www.example.com 替换为您的域名和主机名:
-
打开 Start(开始) 菜单。
-
单击 Run(运行)。
-
要打开命令行界面,键入 cmd,然后单击 OK。
-
在命令行提示符处,键入:
对于 IPv4 -
tracert www.example.com对于 IPv6 -
tracert -6 www.example.com-
按 Enter。
-
您可以复制结果以保存到文件或粘贴到其他程序中。
-
打开终端窗口。
-
在命令行提示符处,键入:
对于 IPv4 -
traceroute www.example.com对于 IPv6 -
traceroute -6 www.example.com- 您可以复制结果以保存到文件或粘贴到其他程序中。
- 打开 Network Utility(网络实用工具) 应用程序。
- 单击 Traceroute(跟踪路由) 选项卡。
- 在相应输入字段中键入 domain 或 IP address,然后按 Trace(跟踪)。
- 您可以复制结果以保存到文件或粘贴到其他程序中。
或者,在使用 Mac OS 终端程序时,可按照上述相同的 Linux traceroute 说明操作。
CF-RAY 标头可在 Cloudflare 网络中追踪网站请求。在排查问题时,请向 Cloudflare 支持提供 Web 请求的 CF-RAY。您也可以通过使用与您的 Web 服务器品牌对应的以下代码段编辑源站 Web 服务器配置,将 CF-RAY 添加到日志中:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\" %{CF-Ray}i" cf_customlog_format cf_custom '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'$http_cf_ray';My Traceroute(MTR)是一种工具 ↗,它将 traceroute 和 ping 结合起来测量网络路径的健康状况,是测试网络连接性和速度的另一种常用方法。除了网络路径上的跳点外,MTR 还会持续更新显示到目标路由上的延迟和丢包信息。这有助于通过实时查看路径上发生的情况来排查网络问题。
MTR 以与 traceroute 类似的方式发现网络路径,然后定期发送数据包以继续收集信息,从而提供网络健康状况和速度的更新视图。
与 traceroute 一样,MTR 对出站数据包可使用 ICMP 或 UDP,但依赖 ICMP 作为返回(Type 11: Time Exceeded)数据包。
在类 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 错误,例如 520s、524s 和 525s,表明存在第 3/4 层的底层问题,可能需要数据包捕获以进一步调查。
如何运行数据包捕获
Cloudflare 建议使用 Wireshark ↗ 运行数据包捕获。有关如何使用 tcpdump 命令行的说明,请参阅此 ↗文章。
- 关闭所有可能在后台发送数据的程序/浏览器标签页,以避免之后必须使用大量显示过滤器。
- 创建您的 Wireshark 捕获过滤器(更多信息请参阅此 ↗文章)。
- 选择适当的接口(例如 Wi-Fi: en0)。如果不确定使用哪个接口,Wireshark 会为每个接口提供 I/O 图以给您提示。
- 单击左上角的蓝色鲨鱼鳍图标以开始数据包捕获。
- 在运行捕获时复现问题。
- 单击左上角的红色方块图标以停止数据包捕获。
- 另存为
.pcap文件,并将其附加到您的支持工单。