使用proxy_cache缓存静态资源最有效,需在http块中配置proxy_cache_path定义缓存路径、keys_zone、max_size等参数,并在location中通过proxy_pass转发至命名location启用缓存,配合proxy_cache_valid和Cache-Control头控制缓存时效,再启用open_file_cache优化文件元数据访问。

直接用 proxy_cache 机制缓存静态资源,是减轻后端压力最有效的方式之一。关键不在于“是否代理”,而在于让 Nginx 把首次读取的文件内容存到磁盘,后续请求跳过后端、直发缓存副本。
配置专用缓存区与存储路径
必须在 http 块中预先定义缓存空间:
-
proxy_cache_path指定磁盘目录(如/var/cache/nginx/static_cache),需确保 Nginx 进程有读写权限 -
keys_zone=static_cache:10m创建共享内存区,用于快速查找缓存键;10MB 约支持 8 万个 key -
max_size=1g inactive=7d控制磁盘用量和自动清理策略,避免无限增长 -
use_temp_path=off减少文件中转,提升写入效率
在 location 中启用缓存并指向本地文件
Nginx 要求 proxy_cache 必须配合 proxy_pass,所以不能在纯 root 或 alias 的 location 里直接启用。推荐做法是:
- 用命名 location(如
@static_disk)封装文件服务逻辑 - 主 location 匹配静态后缀(如
\.(js|css|png|jpg)$),用proxy_pass转发到该命名 location - 在命名 location 中设置
proxy_cache static_cache和root或alias
设置合理的缓存有效期与响应头
光有磁盘缓存不够,还要控制浏览器和中间节点是否复用:
- 用
proxy_cache_valid 200 302 365d让 Nginx 长期缓存成功响应 - 用
add_header Cache-Control "public, max-age=31536000, immutable"告诉浏览器“这个文件永不变更”,彻底避免验证请求 - 对 HTML 等可能更新的内容,改用
max-age=300, must-revalidate,兼顾新鲜度与性能
搭配 open_file_cache 减少元数据开销
即使内容已缓存,Nginx 默认仍频繁调用 stat() 查文件状态。启用元数据缓存可显著降低系统调用压力:
-
open_file_cache max=10000 inactive=60s缓存常用文件的 inode、大小、修改时间等 -
open_file_cache_valid 30s每 30 秒主动检查一次缓存项有效性 -
open_file_cache_min_uses 2防止爬虫或误访污染缓存 -
open_file_cache_errors on把 404、权限拒绝等错误也缓存,避免反复扫描


















