阿里云 OSS批量设置Cache-Control

阿里云的服务器带宽一向都是小水管,为了加快加载速度把大量的图片都上传到了oss上。本地文件通过litespeed设置缓存,但是oss上的文件却没有一个统一的入口设置浏览器缓存。如果通过后台设置,需要每个文件都要去处理。而插件也没看到设置浏览器Cache-Control的地方。不过好在阿里云提供了一个命令行工具ossutil64(能简单解决的,就没必要去写代码啦~~) 。

可以通过下面的命令进行浏览器头设置(https://help.aliyun.com/document_detail/120056.html?spm=a2c4g.11186623.0.0.43e877864L0FLp):

./ossutil64 set-meta oss://examplebucket/src Cache-Control:no-cache#X-Oss-Object-Acl:private -r                             

在使用之前需要配置oss的各种信息,通过以下命令配置:

./ossutil64 config

如果对于目录操作,可以添加以-u参数,否则在遇到错误之后就直接退出了,如下:

sh h4ck_set_oss_cache_control.sh
Total 30430 objects. Setted meta on 3537 objects, when error happens.
Error: oss: service returned error: StatusCode=403, ErrorCode=AccessDenied, ErrorMessage="You do not have read permission on this object.", RequestId=63C37D2B73254F37344E4010, Bucket=h4ck-img, Object=wp-content/uploads/2012/08/KuaiBo.png

提示KuaiBo.png这个文件权限有问题,但是实际去找事找不到这个文件的,因为涉黄被阿里云给删除了~~~ laugh

通过-u参数就可以让错误发生的时候继续执行了,如下:

root@blog:~/sh# sh h4ck_set_oss_cache_control.sh
Error occurs, message: oss: service returned error: StatusCode=403, ErrorCode=, ErrorMessage="", RequestId=63C37EB124DBA9393709C74E, Bucket=h4ck-img, Object=wp-content/uploads/2012/08/KuaiBo.png. See more information in file: ossutil_output/ossutil_report_20230115_121834.report
FinishWithError: Total 30430 objects. Setted meta on 30422 objects, Error 8 objects.

847.976347(s) elapsed

每次上传之后都需要设置新文件的浏览器头,如果全部跑一边也太费事了(847秒)。于是准备写个定时任务来每天处理新上传的文件,只处理当前月份的目录即可:

cur_month=`date +%m`
echo "Set h4ck image oss cache:"
echo $cur_month
echo oss://h4ck-img/wp-content/uploads/2023/$cur_month
/bin/ossutil64 set-meta oss://h4ck-img/wp-content/uploads/2023/$cur_month Cache-Control:max-age=1557600 -r -u -f

现在执行速度就快多了(6秒):

root@blog:~/sh# sh update_2023_upload_oss_cache_control.sh
Set h4ck image oss cache:
01
oss://h4ck-img/wp-content/uploads/2023/01
Succeed: Total 1088 objects. Setted meta on 1088 objects.

6.419401(s) elapsed

通过crontab -e命令添加定时任务,每天2点执行:

0 2 * * * /root/sh/update_2023_upload_oss_cache_control.sh

缓存效果检验:

可以看到是从磁盘加载的,并且cache-control也生效了。nice~~~

☆版权☆

* 网站名称:obaby@mars
* 网址:https://lang.ma/
* 个性:https://oba.by/
* 本文标题: 《阿里云 OSS批量设置Cache-Control》
* 本文链接:https://www.lang.ma/2023/01/11023
* 短链接:https://oba.by/?p=11023
* 转载文章请标明文章来源,原文标题以及原文链接。请遵从 《署名-非商业性使用-相同方式共享 2.5 中国大陆 (CC BY-NC-SA 2.5 CN) 》许可协议。


You may also like

9 comments

  1.  Level 6
    Microsoft Edge 108 Microsoft Edge 108 Windows 10 Windows 10 cn中国–北京–北京 移动

    记得ECS有个内网地址可以直通OSS,不算流量而且没有带宽限制!

    1. 公主 Queen 
      Google Chrome 102 Google Chrome 102 Mac OS X 10.15 Mac OS X 10.15 cn中国–山东–青岛 联通

      使用oss内网的endpoint地址就可以了,内网速度还是很快的。网站备份也可以直接备到oss上。不过公网流量还是要收费的,之所以做缓存是不想每次加载都去oss在请求一遍了。 heart

      1.  Level 6
        Microsoft Edge 109 Microsoft Edge 109 Windows 10 Windows 10 cn中国–北京–北京 移动/中国移动北京分公司

        确实,虽然内网的带宽大,不过还是有延迟的!

  2.   Level 7
    Google Chrome 108 Google Chrome 108 Mac OS X 10.15 Mac OS X 10.15 cn中国–浙江–杭州 华数

    完全转腾讯云了,用不上了。现在腾讯云签到抽奖活动,算下来2核2G,一天一块钱。比小厂跑路云还便宜了。

    1. 公主 Queen 
      Google Chrome 102 Google Chrome 102 Mac OS X 10.15 Mac OS X 10.15 cn中国–山东–青岛 联通

      嗯嗯,我是实在不想来回折腾这个破主机了。心塞,不开熏~~~

    1. 公主 Queen 
      Google Chrome 108 Google Chrome 108 Windows 10 Windows 10 cn中国–山东–青岛 联通

      阿里云的默认小水管加载速度太慢了~~稍微多点图片基本就废了

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注