「玩透ESA」站点配置阿里云ESA全站加速+自定义规则缓存

文章目录

1.需求梳理

博主有一个简易文件存储站点,用来作图床与公开文件存放,但碍于服务器带宽限制,外链大文件加载速度属实不佳,刚好最近阿里云ESA有征文试用活动,便决定把该站点解析到阿里云ESA试试效果如何。
本文参与「玩透 ESA」有奖征文活动,活动详情见:http://event.alibabacloud-esa.com/

大致有如下需求:

  1. 全站存储外链文件、全站前端引用资源(如js、css、图片),需要缓存;
  2. 特定页面不缓存(文件列表页等动态加载页面);
  3. 存在特定cookiesession时不缓存;
  4. 特定引用资源不缓存(如流量统计js);
  5. 特定路径的外链文件不缓存(如用来作其它服务远程配置的外链文件)

二次整理需求,主要明确缓存白名单,让缓存规则更简单,也更保守。

这一步可参考默认缓存策略和缓存生效逻辑-边缘安全加速(ESA)-阿里云帮助中心

缓存白名单:

  1. 上传的外链文件分为/cdn//no/no-cacheno-cdn)两个目录,仅对/cdn/目录下上传的指定后缀文件进行缓存(如.jpg.pdf.zip等);
  2. 站点自身引用的静态资源,进行缓存,如.js.css

不缓存内容(黑名单):

  1. 全站页面路径(即无后缀路径),默认不缓存(站点页面都是动态PHP展示文件列表);
  2. 存在特定cookiesession时不缓存;
  3. 自定义指定路径资源,不缓存(如指定路径、扩展文件、资源、流量统计js等);

这样缓存配置就比较简单了,可以先只配置缓存白名单和存在指定cookiesession是不缓存。

AI总结

复制代码
采用"静态资源缓存白名单 + 特定路径排除"策略:
只有明确允许的文件后缀会被缓存,其余全部不缓存;同时对于白名单中的某些路径或具体文件仍然可以排除,以确保动态页面、后台内容与敏感资源不缓存。

if path matches SpecialExcludePath:
    no-cache
else if extension in Blacklist:
    no-cache
else if has login cookie:
    no-cache
else if no extension:
    no-cache
else if extension in Whitelist:
    cache
else:
    no-cache   # fallback

后期黑名单可进一步扩展如下内容
php cgi pl py rb
json xml txt
api action do
asp aspx

2.ESA接入

站点添加

ESA站点添加支持CNAME、NS两种方式,同时支持国内、全球加速,较为简单,这里跳过。

DNS解析

1.在ESA站点管理-DNS记录中找到添加记录;

2.进入添加记录页面后,按提示填写;

3.选择站点类型,由于我这个外链站除了有文件外链、下载功能外,还有动态页面以及文件访问统计等API,所以选择了网站页面而非图片视频类型的纯静态类型;

4.由于我的站点是CNAME接入的,所以还需要去解析验证,按提示操作即可。

配置SSL证书

ESA提供了Let's Encrypt、Digicert免费证书,这里我们申请Let's Encrypt证书;

同样是证书申请页面下发,建议开启强制 HTTPS

3.缓存配置

接下来回到文章开头提及的缓存需求,并进行配置。

仅缓存指定路径+后缀

这里我们要缓存/cdn/目录下的内容,当然这里后缀名并不完善,只是写了我可能用到的。

表达式如下,注意这里的www.example.com要更换成你自己的。

常见后缀名也可以参考阿里云文档:
默认缓存策略和缓存生效逻辑-边缘安全加速(ESA)-阿里云帮助中心

复制代码
(http.host in {"www.example.com"} and starts_with(http.request.uri, "/cdn") and lower(http.request.uri.path.extension) in {"doc" "docx" "ppt" "pptx" "pdf" "csv" "bmp" "gif" "ico" "jpeg" "jpg" "svg" "svgz" "tif" "tiff" "webp" "mp3" "flac" "mid" "midi" "avi" "mp4" "mkv" "webm" "7z" "gz" "rar" "tar" "zip" "zst"})

设置默认不缓存路径

由于在缓存需求梳理那里,规则设置较为粗暴,所以这里直接设置开头不为/cdn的均不缓存;

设置存在指定cookiesession时不缓存

表达式如下,注意这里的www.example.com要更换成你自己的。

复制代码
(http.host in {"www.example.com"} and lower(http.cookie) contains "admin_session") or (http.host in {"www.example.com"} and lower(http.cookie) contains "dir_passwd") or (http.host in {"www.example.com"} and lower(http.cookie) contains "PHPSESSID")

4.缓存测试

分别查看缓存目录和不缓存目录下的文件,可以看到ESA的返回头差异。
在缓存文件的响应头中可以看到,x-site-cache-status为命中缓存,x-swift-cachetime=864000秒正是设置的缓存有效期10天。

非缓存文件则可以看到x-site-cache-status=DYNAMIC

5.站点测速

总结

本篇文章记录了将个人外链文件站点接入阿里云 ESA(Edge Security Acceleration)的完整过程,并重点介绍如何基于"缓存白名单 + 路径排除"策略实现精细化缓存控制。站点的主要诉求是在带宽受限的情况下提升大文件外链、前端静态资源加载速度,同时保证动态页面、后台管理与敏感资源不被缓存。

文中首先梳理了缓存需求,通过将上传文件区分为 /cdn//no/ 目录,仅对白名单中的静态资源与特定后缀文件启用缓存;同时针对无后缀路径、存在特定 cookie/session、统计脚本等内容进行全局排除。随后介绍了 ESA 的站点接入、DNS 解析、SSL 证书配置流程,并给出了可直接使用的缓存表达式示例。

最后通过响应头验证缓存命中情况,并展示接入 ESA 后的加速效果。整体方案简单、可控、安全,适合中小型文件站点快速获得显著的访问加速体验。

相关推荐
S***t7141 小时前
Python装饰器实现缓存
缓存
翼龙云_cloud2 小时前
亚马逊云渠道商:如何利用AWS工具进行日常安全运维?
运维·安全·云计算·aws
天硕国产存储技术站2 小时前
3000次零失误验证,天硕工业级SSD筑牢国产SSD安全存储方案
缓存·固态硬盘·国产ssd
前端炒粉5 小时前
35.LRU 缓存
开发语言·javascript·数据结构·算法·缓存·js
巧克力芋泥包6 小时前
前端使用阿里云图形验证码;并且与安卓进行交互
android·前端·阿里云
AKAMAI10 小时前
提升 EdgeWorker 可观测性:使用 DataStream 设置日志功能
人工智能·云计算
wanhengidc10 小时前
深度了解云手机是什么
运维·服务器·科技·智能手机·云计算
矶鹬笛手11 小时前
(2.2) 新一代信息技术及应用
大数据·云计算·区块链·时序数据库
污斑兔12 小时前
腾讯云 CloudBase 数据库 CRUD 完整指南
数据库·云计算·腾讯云