启用 Nginx 代理缓存需先确保编译含 proxy_cache 模块,配置 cache_path、upstream 及 location 中 proxy_cache,并协同 Cache-Control、sendfile 等优化。

安装 Nginx 时默认不启用 proxy_cache 模块,必须确保编译时已包含该模块——这是启用代理缓存的前提。若用源码安装,需主动指定 --with-http_proxy_module 和 --with-http_cache_purge_module(后者用于按 URL 清除缓存);若用包管理器(如 apt/yum),主流发行版的预编译版本通常已内置,无需额外编译。
确认模块是否可用
安装完成后,先验证缓存相关模块是否加载:
- 运行
nginx -V 2>&1 | grep -o with-http_proxy_module,有输出即表示 proxy 模块存在 - 执行
nginx -V 2>&1 | grep -o with-http_cache_purge_module,确认 purge 功能是否支持(非必需但强烈推荐) - 若缺失,需重新编译安装,不能仅靠配置启用
安装后立即配置缓存路径
代理缓存依赖磁盘路径和共享内存区,必须在 http 块顶层定义,且路径要有写权限:
- 创建缓存目录:
mkdir -p /var/cache/nginx/static,并设属主为www-data或nginx - 在
http{...}中添加:proxy_cache_path /var/cache/nginx/static levels=1:2 keys_zone=static_cache:50m max_size=5g inactive=7d use_temp_path=off;
-
keys_zone名称(如static_cache)后续 location 中必须严格一致 -
use_temp_path=off是关键优化,跳过临时中转,减少 IO
绑定缓存到静态资源 location
Nginx 不允许 proxy_cache 与 root 或 alias 直接共用。正确做法是用内部命名 location 模拟代理:
- 定义 upstream(即使只指向本地文件系统):
upstream _local_static { server 127.0.0.1:10080; } - 新增监听该端口的内部 server(或用
location @static配合internal) - 在静态资源 location 中启用:
location ~* \.(js|css|png|jpg|gif|woff2|ttf)$ { proxy_pass http://_local_static; proxy_cache static_cache; proxy_cache_valid 200 304 1y; add_header X-Cache-Status $upstream_cache_status; }
配套优化不可少
光有 proxy_cache 不够,还需协同浏览器缓存和内核级读取优化:
- 给响应头加
add_header Cache-Control "public, max-age=31536000, immutable";,让浏览器长期信任该资源 - 开启零拷贝:
sendfile on;和tcp_nopush on; - 缓存文件句柄:
open_file_cache max=1000 inactive=30s;和open_file_cache_valid 60s;


















