收集信息以排查站点问题
收集信息以排查站点问题
了解如何收集数据以诊断问题并协助 Cloudflare 支持进行故障排除。 对于大多数故障排除,Cloudflare 强烈建议您从收集 HAR 文件着手。
本文曾以“如何生成 HAR 文件?”为标题发表
本文内容
- 概述
- 生成 HAR 文件
- 确定处理您的请求的 Cloudflare 数据中心
- 利用 cURL 排查请求问题
- 暂停 Cloudflare
- 执行 traceroute
- 将 CF-RAY 标头添加至日志
- 相关资源
概述
务必要捕获尽可能多的信息,以诊断问题并 将充足的详情提供给 Cloudflare 支持。本文阐述了如何收集 Cloudflare 支持通常要求的故障排除信息。
生成 HAR 文件
HTTP 存档 (HAR) 可以记录所有 Web 浏览器请求,包括请求和响应标头、正文内容和页面加载时间。
目前,只有 Chrome 和 Firefox 能够在默认设置下访问 HAR 功能。其他浏览器或者需要浏览器扩展,或者无法生成 HAR。在安装浏览器扩展时,请遵循扩展提供商的说明。
1.在浏览器页面中,右键单击任意位置并选择 Inspect Element。
2.浏览器底部或左下方将显示开发者工具。单击 Network 选项卡。
3.选中 Preserve log。
4.单击记录按钮。
5.浏览到导致问题的 URL。遇到问题后,右键单击 Network 选项卡中的任何项目,然后选择 Save all as HAR with Content。
6.将 HAR 文件附加到您的支持票证。
1.从应用程序菜单中,选择 Tools > Web Developer > Network,或者按 Ctrl+Shift+I (Windows/Linux) 或 Cmd+Option+I (HAR) 。
2.浏览到导致问题的 URL。
3.在重现问题后,右键单击并选择 Save All As HAR。
1.浏览到 Developer tools(使用快捷键 F12),再选择 Network 选项卡。
2.浏览到导致问题的 URL。
3.在重现问题后,依次单击 Export as HAR 和 Save As…。
1.在 Safari 中,确保浏览器窗口顶部显示 Develop 菜单。否则,请转至 Safari > Preferences > Advanced 并选择 Show Develop Menu in menu bar。
2.浏览到 Develop > Show Web Inspector。
3.浏览到导致问题的 URL。
4.按 Ctrl 键并单击 Web Inspector 中的某一资源,再单击 Export HAR。
确定处理您的请求的 Cloudflare 数据中心
Cloudflare 状态页面中列有 我们数据中心的地图,按照大陆排列。数据中心名称中的三字母代码是距离最近的主要国际机场的 IATA 代码。您可以访问以下网址来确定处理您浏览器的请求的 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 当前是否在代理站点的流量。响应中存在 CF-RAY 标头确认该请求是通过 Cloudflare 代理的:
CF-Ray:5097b5640cad8c56-LAX
展开以下小节来获取 HTTP 错误、性能、缓存和 SSL/TLS 证书等故障排除提示:
排查 Cloudflare 响应中的 HTTP 错误时,请通过直接将请求发送到源站 Web 服务器来测试问题是否源自您的源站。要排查 HTTP 错误,请直接对源站 Web 服务器 IP 地址(绕过 Cloudflare 代理)运行 cURL:
curl -svo /dev/null --header "Host: example.com" http://203.0.113.34/
例如,如果观察到通过 Cloudflare 代理的流量有 HTTP 520 错误,请对源站 Web 服务器运行 cURL 来确定是否发送了空回复:
curl -svo /dev/null --resolve www.example.com:80:203.0.113.34 http://www.example.com/* Added www.example.com:80:203.0.113.34 to DNS cache* Hostname www.example.com was found in DNS cache* Trying 203.0.113.34...* Connected to www.example.com (127.0.0.1) port 80 (#0)> GET / HTTP/1.1> Host: www.example.com> User-Agent: curl/7.43.0> Accept: */*>* Empty reply from server
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
使用 cURL 查看证书
以下 cURL 命令了显示了 Cloudflare 在 HTTPS 请求期间提供的 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 --header "Host: www.example.com" http://203.0.113.34/ 2>&1 | egrep -v "^{.*$|^}.*$|^\* http.*$"
测试 TLS 版本
如果要进行浏览器支持故障排除或确认支持的 TLS 版本有哪些,您可以在 cURL 命令中添加下列选项之一来使用 cURL 测试具体的 TLS 版本:
- --tlsv1.0
- --tlsv1.1
- --tlsv1.2
- --tlsv1.3
暂停 Cloudflare
暂停 Cloudflare,将流量直接发送到您的源站 Web 服务器,而不经由 Cloudflare 的反向代理。对于暂停的域名,SSL 或 WAF 等所有 Cloudflare 服务均不启用。 除了全局暂停 Cloudflare 外,还可以在 Cloudflare DNS 应用中将接收流量记录设为 灰色云。
如何暂停 Cloudflare:
- 前往 Cloudflare 仪表板中的 Overview 选项卡。
- 单击页面右下角 Advanced Actions 下的 Pause Cloudflare on Site。
执行 traceroute
traceroute 是一款网络诊断工具,可测量数据包通过网络时的路由延迟。大多数操作系统都支持 traceroute 命令。如果您遇到 Cloudflare 代理的网站发生连接问题并想 寻求 Cloudflare 支持的帮助,请务必提供 traceroute 的输出。
请参阅如下有关在不同操作系统上运行 traceroute 的说明。将以下示例中的 www.example.com 替换为您的域名和主机名:
-
打开开始菜单。
-
单击运行。
-
要打开命令行界面,请键入 cmd ,然后单击确定。
-
在命令行提示符下,键入:
对于 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 选项卡。
-
在相应的输入字段中键入_域名_或 IP 地址,然后单击 Trace。
-
您可以复制结果,以保存到文件中或粘贴到另一个程序中。
此外,在使用 Mac OS 终端程序时可同样按照上方 Linux traceroute 说明来操作。
将 CF-RAY 标头添加至日志
CF-RAY 标头可跟踪通过 Cloudflare 网络的网站请求。对问题进行故障排除时,请将 Web 请求的 CF-RAY 提供给 Cloudflare 支持。也可以通过使用与您 Web 服务器品牌对应的代码段编辑源站 Web 服务器配置,将 CF-RAY 添加到您的日志中:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\" %{CF-Ray}i" cf_custom
log_format cf_custom '$remote_addr - $remote_user [$time_local] ''"$request" $status $body_bytes_sent ''"$http_referer" "$http_user_agent" ''$http_cf_ray';