proxy_store需完整配置读取优先、回源落盘、路径权限等环节,仅对静态资源按后缀精准启用,配合try_files与@mirror分离读写逻辑,并预建目录、设权限、禁压缩、加缓存头。

要让 proxy_store 正常工作,不是加一行指令就行,而是必须把几个关键环节串起来:本地读取优先、缺失时回源、落盘路径明确、权限到位。它不自动管理生命周期,只做“一次写入、后续直读”的静态镜像。
只对静态资源启用,避免误镜像动态内容
不要在 location / 这类宽泛匹配下开启 proxy_store,否则 HTML 页面、API 接口甚至 404 响应都可能被原样写入磁盘,造成路径混乱或安全风险。推荐按文件后缀精准控制:
location ~* \.(js|css|png|jpg|jpeg|gif|webp|svg|woff2|ttf|eot)$- 每个 location 块内独立配置
root和回源逻辑,互不影响 - 若需镜像文档类 HTML(如 API 文档页),可单独写一条:
location ~* ^/docs/.+\.html$,但务必确认内容稳定、无用户态交互
配置读写分离结构,确保首次请求才落盘
核心是把“尝试读本地”和“回源并落盘”拆开,避免重复写或覆盖判断失效:
- 外层用
try_files $uri @mirror;—— 先查本地文件,命中即返回 - 跳转到
@mirror块后再执行proxy_pass和proxy_store on -
root必须定义在外层或与@mirror同级位置,不能只放在@mirror内部(否则$request_filename解析失败)
路径、权限与目录预建缺一不可
proxy_store 不会自动创建父目录,也不会校验写入结果是否成功,全靠人工保障:
- 设
root /data/mirror;,则请求/img/logo.png将写入/data/mirror/img/logo.png - 提前执行:
mkdir -p /data/mirror/{img,css,js,docs} - 设置权限:
chown -R nginx:nginx /data/mirror(假设 worker 用户为nginx) - 显式声明权限策略:
proxy_store_access user:rw group:rw all:r;,比依赖系统 umask 更可靠
补充实用细节提升可用性
光能落盘还不够,要让镜像真正可用,还得加几条辅助配置:
- 禁用上游压缩:
proxy_set_header Accept-Encoding "";,防止 gzip 内容被存成乱码二进制文件 - 加缓存头:
expires 30d;和add_header Cache-Control "public, immutable";,减少客户端重复请求 - 打标记便于排查:
add_header X-Cached-By "proxy_store"; - 验证是否生效:首次请求一个不存在的资源(如
/static/test.jpg),查看 error log 是否出现proxy_store: "/data/mirror/static/test.jpg" created











