ienki 发表于 2018-11-13 07:36:00

nginx缓存文件路径计算和缓存清理方法

  在规模不大的站点中,使用nginx自带的缓存无疑是一种高效的选择。
  先看下proxy_cache_path的常见配置:
proxy_cache_path /usr/local/nginx/cache levels=1:2 keys_zone=one:10m max_size=1g;  在上面这行配置中定义了一个反向代理缓存路径:
  1) nginx反向代理缓存的目录为/usr/local/nginx/cache;
  2) 缓存文件的key和其它信息放在一个10M的共享内存中,命名为one;
  3) 缓存文件最大占用1G磁盘空间;
  那还有一个level=1:2是什么意思呢?举个例子吧:
  比如有一个URL是http://netexr.blog.51cto.com/1.png,那么这个图片如果被缓存那他的路径就是
  /usr/local/nginx/cache/9/ad/e0bd86606797639426a92306b1b98ad9
  计算方法:
  1) nginx先把请求地址/1.png用md5进行哈希,得到e0bd86606797639426a92306b1b98ad9
  2) level=1:2就是把最后一位数9拿出来建一个目录,然后再把9前面的2位建一个目录,最后把刚才得到的这个缓存文件放到9/ad目录中。
  同样的方法推理,如果配置level=1:1,那么缓存文件的路径就是/usr/local/nginx/cache/9/d/e0bd86606797639426a92306b1b98ad9
  上面的例子只是最简单的URL,如果带参数呢?
  比如http://netexr.blog.51cto.com/1.png?v=1,那么缓存路径还是一样吗?
  先对比下这个两个配置:
proxy_cache_key $uri;  
proxy_cache_key $uri$is_args$args;
  第一个配置只根据不带参的$uri进行哈希,所以这时候加了参数和没加参数是一样的结果;
  第二个配置就是把域名之后所有的内容(也就是$request_uri)都进行哈希。
  知道了缓存路径的计算方法,我们就可以进行缓存清理了(以level=1:2为例):
#!/usr/bin/env php  
页: [1]
查看完整版本: nginx缓存文件路径计算和缓存清理方法