Featured image of post 进中国前,CDN/DNS/ICP 与可观测性的常见踩坑

进中国前,CDN/DNS/ICP 与可观测性的常见踩坑

每一个坑都来自真实案例:现象、根因、修复三段式。主线是我自己博客在 2026 年 9 月做的一次完整可用性与性能治理——5xx 5.8% 治理到接近归零的全过程。

这篇文章收集的是"进中国"路上最常见的几个坑。每个坑都按三段式写:现象 → 根因 → 修复。主线是一个真实案例:我自己的博客(Hugo 静态站 + 边缘 CDN,托管在海外,大陆有真实流量)在 2026 年 9 月的一次完整治理——从 5xx 占 5.79% 治理到接近归零。

坑一:以为开了 CDN 就快

现象:CDN 全量开启,海外测速优秀,大陆依旧慢。

根因:CDN “开了"和"在大陆快"是两回事。常见三个子问题:大陆没有节点或节点未预热;默认只缓存静态扩展名,HTML 从不缓存;动态内容占比高,大量请求穿透回源。

案例数据:我的站 9 月约 121 万请求,缓存命中率里直接 HIT 只有 3%。HTML 的 cf-cache-status 全部是 DYNAMIC——每个页面浏览都要跨境回源一次。

修复:给 HTML 和无后缀路径加边缘缓存规则(Cache Rule),边缘 TTL 一小时、浏览器遵循源站。暖连接 TTFB 从 0.7–0.9 秒降到 0.26 秒,回源量断崖式下降。

坑二:404 也被缓存,新页面上不了线

现象:新页面部署后,最长达一小时都打不开(404),而源站上文件明明已经存在。

根因:边缘缓存规则让"无后缀路径"可缓存之后,旧的 404 响应也被缓存了。新页面 URL 在部署前被访问过一次,那个 404 就以 TTL 全价驻留在边缘。

案例数据:修复 /blog/ 列表页 404 时正好踩中——部署完成后 404 持续了六分钟,手动清缓存才恢复。

修复:在缓存规则里加状态码 TTL——404 只缓存 60 秒、5xx 完全不缓存。此后新页面最长一分钟可见。另外把"部署后自动清缓存"加进了部署流水线,彻底消除这个窗口。

坑三:扫描流量把回源打挂,所有请求一起 504

现象:无规律的出现整站 504,每个小时都有几十上百次,持续存在而非单次故障。

根因:大量 .php/.env/wp-* 之类的漏洞探测请求,在"HTML 不缓存"的前提下每次都回源。源站(或中间层)被探测流量压到超时,所有未缓存请求一起失败。表现就是"时好时坏”。

案例数据:9 月 504 共 6.9 万次,全部是 GET;按地区分布大陆 1.9 万、美国 1.3 万、法国 1 万——后两者是典型的扫描网络。

修复:两层——WAF 规则在边缘直接拦截漏洞探测路径(.php 结尾、/wp-、.env、/.git),零回源;配合坑一的 HTML 缓存,504 失去了存在的土壤。注意拦截规则要核对自己站内真实 URL,避免误伤(比如历史文章里真有 wordpress 主题相关内容)。

坑四:DNS 只测权威,不测递归

现象:权威 DNS 一切正常,大陆用户还是被调度到远端节点。

根因:大陆运营商递归解析的行为(缓存、ECS 支持、分区策略)和你在权威侧看到的不一样。只测权威侧等于只测了一半。

修复:在大陆方向的多个网络里直接 dig 验证解析落地;TTL 不要设得过长,保证故障时能快速切换调度。

坑五:只有"挂"的告警,没有"慢"的数据

现象:监控绿灯,用户持续抱怨慢。

根因:传统拨测只看可用性(HTTP 状态码),不覆盖性能;而大陆的"慢"恰恰是最主要的问题形态。

修复:补上真实用户监控(RUM)——至少有分地区的 TTFB / Core Web Vitals 数据。我的站用的是 Cloudflare Web Analytics(免费、无 Cookie、边缘自动注入 beacon),足够回答"大陆访客到底多慢"这个问题。


回头看,这五个坑其实是一条因果链:没缓存 → 回源多 → 被扫描打挂 → 表现为不稳定;而观测只看可用性 → 看不见慢 → 定位不了。治理也顺着这条链:先缓存、再拦截、再补可观测。如果你想在自己的站点上把这条链走一遍,可以从一次系统性的诊断开始:

署名-非商业性使用-禁止演绎 4.0 (CC BY-NC-ND 4.0)
最后更新于 2026-10-01 09:48 CST
comments powered by Disqus
本博客始于 2007 年
使用 Hugo 构建
主题 Stack 由 Jimmy 设计