1.
症状确认与初步收集信息
- 观察:哪些 URL 返回空白(HTML 空内容、204、或响应体长度为0)。
- 操作:用 curl 获取响应头与体:curl -I -v "https://www.example.com/path";curl -v "https://www.example.com/path" -o resp.html。记录 HTTP 状态码、Content-Length、Content-Type、Transfer-Encoding。
2.
检查 DNS 与 CDN 服务状态
- 验证 DNS:dig +short www.example.com;确认解析到 CDN 提供的 CNAME/IP。
- 检查 CDN 状态页与近期配置变更(规则、WAF、边缘脚本)。若有边缘函数(Edge Worker/Lambda@Edge),临时禁用以排除逻辑问题。
3.
直接访问源站排查
- 绕过 CDN 直连源站:修改 hosts 指向 origin IP 或使用源站域名端口,例如 curl -H "Host: www.example.com" http://origin-ip/path。
- 检查源站响应是否正常,若源站也为空,问题在 origin(应用、后端、数据库、权限、返回逻辑)。
4.
检查 CDN 配置与缓存逻辑
- 查看缓存规则(路径匹配、缓存键、忽略/保留 QueryString)。临时设置为不缓存或刷新缓存:使用 CDN 控制台清除缓存(Purge)。
- 若使用自定义错误页面或重写规则,确认重写不会产生空响应(例如将响应体替换成空字符串)。
5.
分析 HTTP 头与编码问题
- 用 curl -I -v 检查 Content-Length、Transfer-Encoding: chunked、Content-Encoding: gzip。空白可能因 gzip 双重压缩或 chunked 传输异常导致浏览器显示空白。
- 若发现 Content-Length: 0,排查后端是否返回空体或中间代理截断。
6.
查看日志与追踪请求链路
- 在源站开启详细访问与错误日志(Nginx access_log/error_log)。在 CDN 开启边缘日志或请求跟踪(很多 CDN 提供请求 ID)。
- 使用 traceroute/tracert、telnet origin 80/443、openssl s_client -connect origin:443 -servername www.example.com 检查网络/SSL 握手问题。
7.
常见修复操作示例(Nginx/Proxy)
- Nginx 源站建议配置(避免空白返回):
server {
listen 80;
server_name www.example.com;
root /var/www/html;
index index.html index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
- CDN 侧:增加超时、关闭边缘脚本、设置默认错误响应(404/500 返回自定义 HTML 而不是空体),并清理缓存后再次验证。
8.
问:为什么会出现 CDN 返回空白页?
- 答:常见原因包括源站返回空体、边缘脚本或规则错误清空响应、gzip/传输编码问题导致浏览器无法解码、缓存了错误响应。排查要从源站直连、查看边缘规则和 HTTP 头着手。
9.
问:如何快速验证是否由 CDN 导致?
- 答:通过绕过 CDN 直接访问源站(hosts 或 origin 域名)验证响应;临时在 CDN 控制台禁用缓存或规则,或使用 CDN 提供的“诊断/回源”测试功能,若源站正常则问题在 CDN 配置或边缘逻辑。
10.
问:如何长期防止类似空白页问题?
- 答:建立步骤:1) 在部署前在测试环境验证边缘函数与重写规则,2) 配置默认错误页面与缓存策略,3) 日志与监控(边缘+源站),4) 自动化健康检查与回源重试,5) 定期清理与验证缓存策略,从源头和边缘两端把控。