nginx的proxy_cache模块不直接加速静态资源,而是缓存后端响应以减轻上游压力;真正静态加速靠root/alias+expires,proxy_cache适用于代理动态内容或带cache-control的静态资源缓存。

Nginx 的 proxy_cache 模块本身不直接“加速静态资源”,而是通过缓存后端服务器(如 Tomcat、PHP-FPM 或其他应用服务)返回的响应内容,减少重复请求对上游的压力,间接提升静态资源的响应速度。真正服务于静态资源加速的,通常是 location 配合 root/alias 和 expires 等指令;而 proxy_cache 更适用于代理动态内容或 API 响应的缓存。
但如果你确实需要通过反向代理方式(比如前端 Nginx 代理后端 Node.js 或 Java 应用),并希望它缓存那些被标记为可缓存的静态资源(如 /static/xxx.css、/api/v1/assets/*),那就得正确启用和配置 proxy_cache。以下是关键配置要点:
proxy_cache 缓存区域定义
必须在 http 块中预先定义缓存区,不能写在 server 或 location 内:
proxy_cache_path /var/cache/nginx/proxy_cache
levels=1:2
keys_zone=static_cache:10m
max_size=1g
inactive=60m
use_temp_path=off;
-
/var/cache/nginx/proxy_cache:缓存文件物理路径,需确保 Nginx 进程有读写权限 -
levels=1:2:两级目录哈希结构,避免单目录文件过多 -
keys_zone=static_cache:10m:共享内存区名称和大小,用于存储缓存键与元数据 -
max_size=1g:磁盘缓存总上限,超出时按inactive时间清理最久未访问项 -
inactive=60m:缓存项若 60 分钟内无再访问,则自动失效(即使响应头声明了更长Cache-Control) -
use_temp_path=off:推荐关闭,避免临时文件写入影响性能
在 location 中启用缓存
例如代理所有 /static/ 请求到后端,并缓存成功响应:
安装并运行 Aperture(Lightning Labs 的 L402 闪电反向代理),用于创建 L402 付费墙、配置付费 API 端点、为其他代理托管付费内容或测试 L402 认证流程。
location /static/ {
proxy_pass http://backend_app;
proxy_cache static_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
proxy_cache_lock on;
proxy_cache_lock_timeout 5s;
add_header X-Cache-Status $upstream_cache_status;
}
-
proxy_cache_valid:按响应状态码设置缓存时间,比后端Cache-Control优先级低(Nginx 默认以Cache-Control/Expires为准,除非加proxy_ignore_headers) -
proxy_cache_use_stale:允许在后端异常时返回过期缓存,提升可用性 -
proxy_cache_lock:防止缓存未命中时多个并发请求同时穿透到后端(只让第一个建缓存,其余等待) -
X-Cache-Status:方便调试,返回HIT/MISS/BYPASS/EXPIRED等状态
注意缓存键(cache key)默认行为
Nginx 默认使用 $scheme$proxy_host$request_uri 作为缓存键。如果后端依赖 Cookie、User-Agent 或特定 Header 区分内容,需显式定义:
proxy_cache_key "$scheme$host$request_uri $cookie_user";
否则不同用户可能拿到彼此的缓存结果(比如登录态页面被缓存)。
静态资源建议搭配 proxy_buffering 和 gzip
proxy_buffering on; proxy_buffers 8 16k; proxy_busy_buffers_size 32k; gzip on; gzip_types text/css application/javascript image/svg+xml;
这些不改变缓存逻辑,但能降低传输延迟,尤其对压缩后的文本类静态资源效果明显。
不复杂但容易忽略










