阿里云CDN刷新目录不生效的问题排除

先说结论,不是系统有问题,是对CDN的刷新机制不够了解,使用不当造成的。

背景

我的源文件是在阿里云oss上,一开始cdn回源的是oss上的源文件。后来设置了一个加水印的样式,然后在cdn的回源配置上加了oss样式的参数,也就是说,cdn清了缓存重新回源的图片应该是有水印的。

问题

按url刷新cdn,可以看到cdn上的图片是有水印的,说明刷新生效。而按目录刷新cdn,看到cdn上的图片没有加水印,说明刷新没起作用。尝试了很多次,证实这个问题是存在的。

寻找问题原因

考虑阿里云这么成熟的平台不应该有这问题,但这问题就在眼前,还是决定发个工单一探究竟。为了说清楚问题,我把我试错的过程做成了一个文档发给了阿里云工程师。



阿里云工程师的答复:


您好 这个得从cdn的刷新机制解释
url刷新是强制清除cdn节点上的缓存,下次再有访问,cdn直接回源获取新的文件。
目录刷新是把cdn节点上的缓存置为过期,下次再有请求的时候,cdn会回源校验文件的Last-Modified和Etag,如果Last-Modified和Etag 不变,则还是命中cdn的缓存,不会重新获取文件。
您这种场景 ,只是回源加上oss的图片处理样式,图片的Last-Modified和Etag不会改变,所以目录刷新不生效,需要用url 刷新

如果需要刷新的文件比较多,建议整理下url list 然后批量提交下url 刷新
如果url list不确定具体的
可以使用ossutil 工具 ls命令 把符合条件的object都列举出来,然后 https://cdn.xuguoyu.com/ 拼接object name 就是完整的url
ossutil 的使用可以参考https://help.aliyun.com/zh/oss/developer-reference/overview-59?spm=a2c4g.11186623.0.0.50023dc88p3MCR


解决问题

知道问题原因就简单了,像我这种情况,按URL刷新CDN就可以了。