配置Nginx的cache功能
从nginx0.7开始,它支持cache反向代理后的页面内容了
对于web应用来讲,这个也就是在反向代理静态文件时才有用
首先,在http中配置:
折叠复制代码
- proxy_cache_key "$scheme$host$request_uri";
- proxy_cache_path /opt/work/cachelevels=1:2:1keys_zone=js_cache:100mmax_size=1024minactive=15d;
- proxy_cache_valid any 15d;
然后,在需要使用cache的location中配置:
参数介绍:
- levels指定cache的子目录和md5的对应关系,1:2:1代表是采用了3层hash目录,分别对应md5的前4位
- max_size指定最大cache的大小
- inactive指定cache的数据,多长时间没被请求后,会自动删除
- proxy_cache_valid为不同的应答设置不同的缓存时间,如下:
- proxy_cache_valid 200 302 10m;
- proxy_cache_valid 301 1h;
- proxy_cache_valid any 1m;
折叠复制代码
如果要为所有的应答都设置缓存,则用any。注意,这个指令没有默认值,所以如果要想实现cache,则必须要设置这个指令。
注意:
- cache的目录如:/opt/work/cache,必须要手工建好,否则nginx会报错,cache会无法正常使用
- proxy_cache_path指令只能在http中配置,proxy_cache指令可以在http, server, location中配置
- 官方文档上说:自0.7.48之后,cache会遵循后端返回的Cache-Control, Expires等header,也就是说会cache会自动过期,这个没有验证过
- proxy_cache_path和proxy_temp_path要在同一个分区上面
- proxy_cache_key用来设置包含在缓存中的关键字,默认值是$scheme$proxy_host$request_uri;你可以加上$host来区分不同的host: $host$uri$is_args$args;
清理缓存有2种方法:
- 直接删除nginx的缓存目录,如rm -rf /opt/work/cache
- 使用ngx_cache_purge模块,编译配置如下:
折叠复制代码
- #编译
- ./configure ... --add-module=../headers-more-nginx-module
- #配置
- location ~ /ccache(/.*) {
- allow 127.0.0.1;
- allow 192.168.0.0/16;
- allow 10.1.0.0/16;
- deny all;
- proxy_cache_purge js_cache $scheme$host$1;
- }
比如,要清除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
Path: /opt/work/cache/b/fd/2/3d0f4cd02af76bbaaa8df033465a2fdb
如果要清除缓存的url没有被缓存,则直接会返回404错误