CDN缓存规则设置,避免CMS后台无法更新
当网站接入CDN后,CMS后台修改文章或设置却无法立即生效,通常是因为CDN缓存了动态请求。
本文从零基础出发,教你通过设置缓存规则让后台操作实时生效,同时不影响静态资源的加速效果。
先搞清楚为什么后台更新会“失灵”
CDN默认会缓存所有能缓存的请求,但CMS后台的登录、保存、提交等操作属于动态请求,必须回源到服务器处理。
如果你在CDN上配置了“缓存所有”或对/admin、/wp-admin等路径也开启了缓存,浏览器就会拿到旧的缓存页面,看起来像是后台没更新。
判断方法:在浏览器按F12打开开发者工具,查看网络请求的响应头。
如果X-Cache显示HIT,说明命中CDN缓存;
显示MISS或BYPASS才是回源。
准备:理清你的环境信息
动手前先确认三件事:
- CDN服务商的控制台登录方式(腾讯云、阿里云、Cloudflare等)。
- 网站使用的CMS类型(WordPress、帝国CMS、织梦等),后台路径通常为
/admin、/wp-admin、/dede。 - 是否使用宝塔面板管理Nginx,方便直接修改配置文件。
核心操作:配置CDN缓存规则
以下以宝塔面板+腾讯云CDN为例,其他CDN控制台逻辑类似。
在CDN控制台设置不缓存路径
- 登录CDN控制台,找到“缓存配置”或“缓存规则”。
- 添加一条规则:类型选择“路径”,内容填写你的后台路径,例如
/wp-admin、/admin。 - 缓存时间设置为“不缓存”或0秒。
- 如果后台有动态接口,可再添加规则:路径
/api、/ajax,同样设为不缓存。 - 保存后等待配置下发,通常1-5分钟。
在Nginx层面补充响应头
如果CDN控制台无法精确匹配,可以在宝塔面板的网站设置中修改Nginx配置:
location ~* ^/(wp-admin|admin|dede) {
add_header Cache-Control "no-cache, no-store, must-revalidate";
add_header Pragma "no-cache";
expires -1;
}
这段配置告诉CDN和浏览器:这些路径不要缓存。
保存后重载Nginx:nginx -s reload。
设置静态资源长缓存
为了让图片、CSS、JS继续加速,可以单独配置:
location ~* \.(jpg|jpeg|png|gif|css|js)$ {
expires 30d;
add_header Cache-Control "public, max-age=2592000";
}
这样动态请求回源,静态请求走CDN,兼顾更新与速度。
避坑指南:这些操作容易踩雷
- 不要全局设置“缓存所有”:这会导致后台、API全部被缓存,更新永远不生效。
- 清除CDN缓存后再测试:修改规则后,记得在CDN控制台手动刷新一次URL或目录,否则旧缓存可能还在。
- 注意Cookie和登录状态:如果CDN支持“忽略Cookie”,务必关闭,否则登录状态可能丢失。
- 宝塔面板的缓存插件:如果安装了Nginx Helper或WP Super Cache,需同步关闭后台缓存。
验证更新是否即时生效
完成配置后,按以下步骤验证:
- 登录CMS后台,修改一篇文章的标题,保存。
- 打开前台页面,按
Ctrl+F5强制刷新。 - 如果标题立即变化,说明缓存规则生效。
- 再次打开开发者工具,查看该页面响应头,
X-Cache应显示MISS或BYPASS。
如果仍然不更新,检查CDN控制台的规则优先级,确保“不缓存”规则排在“缓存所有”之前。
常见疑问
问:为什么只对后台路径设置不缓存还不够?
答:有些CMS的前台页面也会调用动态接口,如果这些接口被缓存,前台显示也会滞后。建议将/api、/ajax等接口路径一并设为不缓存。
问:CDN缓存规则设置后,多久能生效?
答:通常1-5分钟,具体以CDN服务商控制台提示为准。修改后建议手动刷新一次缓存。
问:用了宝塔面板,还需要改Nginx配置吗?
答:如果CDN控制台能精确匹配路径,可以不改;但Nginx层加Cache-Control头更保险,能避免CDN忽略规则。
问:为什么清除CDN缓存后,后台还是旧内容?
答:可能是浏览器本地缓存或CMS自身缓存插件导致。尝试无痕模式访问,并检查CMS缓存设置。
按照以上步骤配置CDN缓存规则,就能解决CMS后台无法更新的问题。
关键点是:动态路径不缓存,静态资源长缓存,修改后及时刷新验证。
如果遇到异常,优先检查规则顺序和缓存清除是否彻底。