Loading... # CDN是什么 CDN,也就是所谓的内容分发网络,实际上就是将一个服务器的资源分发给全国乃至全球各地的服务器节点,然后通过一些负载均衡策略,边缘节点分配找到最优的服务器进行访问。 而这个东西优势很明显,就是可以加快访问速度,同时因为隐藏了原始服务器,可以防止一些网络的恶意攻击比如DDOS。但是同样的,缺点也是客观存在的,最明显的一点就是只适合对静态内容进行分发,一旦跟参数等动态渲染挂钩,就会因为缓存到边缘节点导致与源站数据不一致的结果,这就需要我们细心的配置。 # 坑 就好比最近两天我在做的事情,重新把这个博客网站部署好,就被CDN坑了好几回。 ## 第一坑 关于参数跟随的配置,作为一个PHP的网站项目,它必然存在大量的动态接口,而这部分接口的参数如果不从Client->CDN->Server就会出现接口没拿到参数从而得到错误结果的问题,所以参数必须是全程跟随的。 ## 第二坑 关于缓存配置,必须排除掉动态接口相关的路径,只缓存相关的静态资源例如图片,js,css,html之类的东西,这样才能保障网站内容不出错。 ## 第三坑 关于如果你修改了这些静态资源,短时间内是不会生效的(CDN缓存),这需要你去主动的刷新对应的资源才能立即生效,如果转移存储到了 OSS 中,**还需要清理 OSS 数据才可以**。 ## 第四坑 关于回源的配置,这个东西虽然并不是什么很难理解的东西,就是cdn缓存得有个源头去拿嘛,但是配置的时候,比如 UPYUN 的配置就有点让人疑惑,源站地址我想了半天配置ip真的能拿到嘛,毕竟nginx我压根都没配置这个ip的监听,它咋能拿到呢?  后来看到了下边的配置,才终于知道是通过这个 Host rewrite 匹配上的nginx,所以源站地址填 ip 就可以拿到对应的内容,且如果 nginx 配置了证书就可以用 HTTPS 进行回源操作了。  再配上CDN的HTTPS证书,我们就构成了一条完整的加密通道链路 ```mermaid sequenceDiagram participant User as 访问者 participant CDN as CDN 节点(www.example.com) participant Nginx as Nginx 源站(IP + Host) User->>CDN: 访问 www.example.com (HTTPS) CDN->>User: 校验证书,HTTPS 成立 CDN->>Nginx: 回源请求(HTTPS,带证书校验) Nginx-->>CDN: 返回页面/资源 CDN-->>User: 缓存后返回资源 ``` Last modification:July 2, 2025 © Allow specification reprint Support Appreciate the author AliPayWeChat Like 如果觉得我的文章对你有用,请随意赞赏