「玩透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 后的加速效果。整体方案简单、可控、安全,适合中小型文件站点快速获得显著的访问加速体验。

相关推荐
忍冬行者14 小时前
清理三主三从redis集群的过期key和键值超过10M的key
数据库·redis·缓存
TimberWill14 小时前
使用Redis队列优化内存队列
数据库·redis·缓存
同聘云20 小时前
阿里云国际站服务器gpu服务器与cpu服务器的区别,gpu服务器如何使用?
服务器·前端·阿里云·云计算
tianyuanwo20 小时前
DPU驱动的云服务器革命:性能飙升与成本重构的商业技术双赢
服务器·云计算·dpu
梦里不知身是客1121 小时前
redis的缓存击穿原因
redis·缓存·bootstrap
阿里云云原生21 小时前
阿里云可观测 2025 年 11 月产品动态
阿里云·云原生·云计算·可观测
布茹 ei ai1 天前
7、基于GEE 平台的 VIIRS 夜间灯光监测工具
云计算·js·遥感·gee
GGBondlctrl1 天前
【Redis】从单机架构到分布式,回溯架构的成长设计美学
分布式·缓存·架构·微服务架构·单机架构
不穿格子的程序员1 天前
Redis篇4——Redis深度剖析:内存淘汰策略与缓存的三大“天坑”
数据库·redis·缓存·雪崩·内存淘汰策略
云老大TG:@yunlaoda3601 天前
腾讯云国际站代理商TCCC的技术适配服务包括哪些内容?
数据库·云计算·腾讯云