Nginx的配置服务端缓存核心配置
常见的开发人员控制的缓存分类
- 数据库缓存
 - 应用程序缓存
 - Nginx网关缓存
 - 前端缓存
 
让后端结果缓存离用户更进一步
- /root/cache 
- 本地路径,用来设置Nginx缓存资源的存放地址
 
 - levels=1:2 
- 默认所有缓存文件都放在上面指定的根路径中,可能影响缓存的性能,推荐指定为 2 级目录来存储缓存文件;1和2表示用1位和2位16进制来命名目录名称。第一级目录用1位16进制命名,如a;第二级目录用2位16进制命名,如3a。所以此例中一级目录有16个,二级目录有16*16=256个,总目录数为16 * 256=4096个。
 - 当levels=1:1:1时,表示是三级目录,且每级目录数均为16个
 
 - key_zone 
- 在共享内存中定义一块存储区域来存放缓存的 key 和 metadata
 
 - max_size 
- 最大 缓存空间, 如果不指定会使用掉所有磁盘空间。当达到 disk 上限后,会删除最少使用的 cache
 
 - inactive 
- 某个缓存在inactive指定的时间内如果不访问,将会从缓存中删除
 
 - proxy_cache_valid 
- 配置nginx cache中的缓存文件的缓存时间,proxy_cache_valid 200 304 2m 对于状态为200和304的缓存文件的缓存时间是2分钟
 
 - use_temp_path 
- 建议为 off,则 nginx 会将缓存文件直接写入指定的 cache 文件中
 
 - proxy_cache 
- 启用proxy cache,并指定key_zone,如果proxy_cache off表示关闭掉缓存
 
 - add_header Nging-Cache "$upstream_cache_status" 
- 用于前端判断是否是缓存,miss、hit、expired(缓存过期)、updating(更新,使用旧的应答)
 
 
关键代码如下
proxy_cache_path /root/cache levels=1:2 keys_zone=dbc_cache:10m max_size=1g inactive=60m use_temp_path=off;
server {
      location /{
        ...     
        proxy_cache dbc_cache;
        proxy_cache_valid 200 304 10m;
        proxy_cache_valid 404 1m; 
        proxy_cache_key $host$uri$is_args$args;
        add_header Nginx-Cache "$upstream_cache_status";
      }
  } - 注意: 
- nginx缓存过期影响的优先级进行排序为:inactvie > 源服务器端Expires/max-age > proxy_cache_valid
 - 如果出现 Permission denied 修改nginx.conf,将第一行修改为 user root
 - 默认情况下GET请求及HEAD请求会被缓存,而POST请求不会被缓存,并非全部都要缓存,可以过滤部分路径不用缓存
 
 
常见问题
缓存不生效——加上这句话
proxy_ignore_headers X-Accel-Expires Expires Cache-Control Set-Cookie;
我想缓存post请求——加上这句话
proxy_cache_methods POST;
本文作者为DBC,转载请注明。
