Nginx缓存策略配置中,通过proxy_cache_path定义缓存路径、层级目录、内存大小及过期时间;proxy_cache启用缓存;proxy_cache_valid针对200、304等状态码设置有效期;proxy_cache_bypass实现强制刷新。并配合缓存键、忽略请求头等配置,可有效应对流量高峰,提升网站响应速度,减轻后端服务器负载。
Nginx缓存策略配置方法
作者:技术拾光
时间:2026-07-27
浏览:120
文章目录
聊到Nginx缓存策略,proxy_cache指令是绕不开的核心工具。不少刚接触的人会被一堆参数绕晕,其实拆开来看,逻辑相当清晰。下面先看一个完整的配置示例,再逐项拆解。

缓存路径和参数定义
在http块里先声明缓存的基本骨架。
http {
# 缓存路径
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
server {
listen 80;
server_name example.com;
location / {
# 启用缓存
proxy_cache my_cache;
proxy_pass http://backend_server;
# 缓存控制头
add_header X-Proxy-Cache $upstream_cache_status;
# 缓存有效期
expires 30d;
# 缓存方法
proxy_cache_methods GET HEAD;
# 缓存键
proxy_cache_key "$scheme$proxy_host$request_uri";
# 缓存条件
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
# 缓存刷新
proxy_cache_bypass $http_pragma;
proxy_cache_revalidate on;
}
}
}
逐项拆解,看看每个参数到底在干什么
proxy_cache_path:定义缓存的物理存储路径和核心参数。levels=1:2:缓存目录层级,比如/var/cache/nginx/c/29/...这样避免单目录文件过多。keys_zone=my_cache:10m:缓存区域的名字和元数据内存大小,10m足够存几万个键。max_size=1g:缓存最大占用磁盘空间,超过1g会自动清理。inactive=60m:缓存项如果60分钟内没有被访问,就会被视为过期并清理。use_temp_path=off:建议关闭,直接写入缓存目录,避免额外IO开销。
proxy_cache:启用缓存,并指向刚才定义的区域名称(my_cache)。proxy_pass:后端服务器地址,缓存对象就是从这个地址获取的响应。add_header X-Proxy-Cache $upstream_cache_status:响应头里加一个标记,告诉客户端这次命中(HIT)还是未命中(MISS),方便调试。expires 30d:浏览器端的缓存有效期,30天后重新请求。proxy_cache_methods GET HEAD:只缓存GET和HEAD请求,POST等一般没必要缓存。proxy_cache_key:缓存键的生成规则,默认用请求的完整URL,这里自定义了$scheme$proxy_host$request_uri,基本上就是协议+域名+路径和参数。proxy_cache_valid:针对不同HTTP状态码设置缓存时长。比如200和302缓存10分钟,404只缓存1分钟(避免频繁打后端)。proxy_cache_bypass $http_pragma:如果客户端请求头里有Pragma: no-cache,则绕过缓存,强制从后端取数据。proxy_cache_revalidate on:启用缓存重新验证,当缓存过期但后端资源未变化时,可以减少304响应带来的带宽消耗。
几个容易踩的坑,值得留意
- 确保Nginx进程对缓存目录有写入权限,否则启动后疯狂报错。
- 缓存大小和有效期要根据实际业务调整——静态资源可以设长一点,动态页面建议短一些,甚至配合
proxy_cache_bypass做主动刷新。 - 生产环境强烈建议启用HTTPS,避免缓存内容在传输过程中泄露敏感信息。当然,缓存本身也要注意权限隔离。
掌握这些参数,再结合业务场景灵活调整,Nginx的缓存就能扛住大部分流量高峰。配置并不复杂,关键是理解每个参数背后的意图。
实用工具推荐
电子包浆
使用 ›绿化、压缩、噪点和虚拟水印,自由调节做旧程度。
图片压缩
使用 ›选择画质和输出格式,预览压缩前后的大小。