收集信息以排查站点问题
收集信息以排查站点问题
了解如何收集数据以诊断问题并协助 Cloudflare 支持进行故障排除。 对于大多数故障排除,Cloudflare 强烈建议您从收集 HAR 文件着手。
本文曾以“如何生成 HAR 文件?”为标题发表
本文内容
概述
务必要捕获尽可能多的信息,以诊断问题并 将充足的详情提供给 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';