nginx配合oss边缘加速的核心是proxy_cache+proxy_pass组合:nginx不存原始文件,仅缓存回源响应,实现就近返回、降低延迟与源站压力;需配置缓存区、启用proxy_cache、优化cache_key、处理防盗链与私有bucket回源。

用 Nginx 的 proxy_cache 配合 proxy_pass 对 OSS 做边缘加速,核心是让 Nginx 充当一个轻量级 CDN 边缘节点:它不存原始文件,而是缓存从 OSS 回源拉取的响应,后续相同请求直接返回本地缓存,降低延迟和源站压力。
一、基础缓存区配置(全局生效)
在 Nginx 的 http 块中定义缓存路径与参数:
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=oss_cache:256m max_size=20g inactive=3d use_temp_path=off;- keys_zone=oss_cache:256m 是内存索引区,256MB 可支撑约 800 万个缓存 key;
- max_size=20g 控制磁盘总容量上限,避免占满硬盘;
- inactive=3d 表示缓存项若连续 3 天未被访问,自动清理;
- use_temp_path=off 提升写入效率,跳过临时目录中转。
二、代理 location 中启用缓存策略
针对静态资源路径(如 /static/ 或根路径),添加缓存指令:
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
-
proxy_pass http://myapp.oss-cn-hangzhou.aliyuncs.com;—— 指向 OSS 源站; -
proxy_cache oss_cache;—— 绑定上一步定义的缓存区; -
proxy_cache_valid 200 302 1h;—— 成功响应默认缓存 1 小时; -
proxy_cache_valid 404 1m;—— 404 也缓存 1 分钟,防频繁探测; -
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;—— 出错或更新中仍可返回旧缓存,提升可用性; -
proxy_cache_lock on;和proxy_cache_lock_timeout 5s;—— 防止缓存失效瞬间大量并发回源(“缓存雪崩”)。
三、优化缓存键,避免无效缓存分裂
OSS 默认可能带签名参数(如 Expires、Signature),导致同一资源因参数不同生成多个缓存副本。需显式控制缓存键:
-
proxy_cache_key "$scheme://$host$uri$is_args$arg_filename";—— 示例:只保留协议、域名、路径和关键参数(如filename),忽略签名类干扰参数; - 若所有资源都无需参数,更推荐:
proxy_cache_key "$scheme$host$uri";; - 配合
proxy_ignore_headers Set-Cookie Cache-Control Expires;,强制忽略 OSS 返回的缓存头,完全由 Nginx 自主控制缓存时效。
四、安全与回源细节处理
尤其当 OSS Bucket 为私有或开启 Referer 防盗链时,Nginx 回源请求需模拟合法来源:
-
proxy_set_header Host myapp.oss-cn-hangzhou.aliyuncs.com;—— 正确设置 Host 头,确保 OSS 路由到对应 Bucket; -
proxy_set_header Referer "https://example.com";—— 若 OSS 配置了 Referer 白名单,此项必须匹配; - 私有 Bucket 需配合 STS 临时凭证或 RAM 授权,不能仅靠 Nginx 代理;此时建议使用 ESA 或 CDN 原生对接,而非纯 Nginx 反代。










