从nginx0.7开始,它支持cache反向代理后的页面内容了


对于web应用来讲,这个也就是在反向代理静态文件时才有用


首先,在http中配置:



折叠复制代码




  1. proxy_cache_key "$scheme$host$request_uri";

  2. proxy_cache_path /opt/work/cachelevels=1:2:1keys_zone=js_cache:100mmax_size=1024minactive=15d;

  3. proxy_cache_valid any 15d;




然后,在需要使用cache的location中配置:


proxy_cache js_cache;


参数介绍:



  1. levels指定cache的子目录和md5的对应关系,1:2:1代表是采用了3层hash目录,分别对应md5的前4位

  2. max_size指定最大cache的大小

  3. inactive指定cache的数据,多长时间没被请求后,会自动删除

  4. proxy_cache_valid为不同的应答设置不同的缓存时间,如下:


  5. 折叠复制代码




    1. proxy_cache_valid 200 302 10m;

    2. proxy_cache_valid 301 1h;

    3. proxy_cache_valid any 1m;





如果要为所有的应答都设置缓存,则用any。注意,这个指令没有默认值,所以如果要想实现cache,则必须要设置这个指令。


注意:



  1. cache的目录如:/opt/work/cache,必须要手工建好,否则nginx会报错,cache会无法正常使用

  2. proxy_cache_path指令只能在http中配置,proxy_cache指令可以在http, server, location中配置

  3. 官方文档上说:自0.7.48之后,cache会遵循后端返回的Cache-Control, Expires等header,也就是说会cache会自动过期,这个没有验证过

  4. proxy_cache_path和proxy_temp_path要在同一个分区上面

  5. proxy_cache_key用来设置包含在缓存中的关键字,默认值是$scheme$proxy_host$request_uri;你可以加上$host来区分不同的host: $host$uri$is_args$args;


清理缓存有2种方法:



  1. 直接删除nginx的缓存目录,如rm -rf /opt/work/cache

  2. 使用ngx_cache_purge模块,编译配置如下:



折叠复制代码




  1. #编译

  2. ./configure ... --add-module=../headers-more-nginx-module

  3. #配置

  4. location ~ /ccache(/.*) {

  5. allow 127.0.0.1;

  6. allow 192.168.0.0/16;

  7. allow 10.1.0.0/16;

  8. deny all;

  9. proxy_cache_purge js_cache $scheme$host$1;

  10. }




比如,要清除url为http://mail.sohu.com/static/ad/mail/ysz.html的缓存


则,访问http://mail.sohu.com/clearcache/static/ad/mail/ysz.html即可得到如下结果:


Key : httpmail.sohu.com/static/ad/mail/ysz.html

Path: /opt/work/cache/b/fd/2/3d0f4cd02af76bbaaa8df033465a2fdb


如果要清除缓存的url没有被缓存,则直接会返回404错误