十六、缓存及缓存清理
1、修改node1配置文件nginx.conf:
(1)在http配置段中增加如下代码:
proxy_cache_path /usr/local/tengine/cache levels=1:1:2 keys_zone=mycache:200m inactive=15d max_size=100g;
备注:
Ø levels=1:1:2表示1个字符的一级缓存目录和二级缓存目录,2个字符的三级缓存目录
Ø keys_zone=mycache:200m表示缓存名称为mycache,内存缓存空间大小为200m
Ø inactive=15d表示15天内没有被访问的内容会被自动清除
(2)在指定location配置段中增加如下代码:
server {
listen 80;
server_name node1.qiuyue.com;
location / {
root html;
index index.html index.html;
}
location /bbs {
proxy_pass http://192.168.1.144/bbs;
index index.html index.html;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache mycache;
proxy_cache_key $host$uri$is_args$args;
# 将域名、URI、参数组合成缓存的Key值,再根据Key值哈希,存储缓存内容到缓存目录中
proxy_cache_valid 200 302 10m;
proxy_cache_valid 301 1h;
proxy_cache_valid any 1m;
proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;
add_header X-Cache $upstream_cache_status;
}
}
备注:本地已有资源无需缓存,建议缓存后端服务器的资源
2、创建用于存储缓存的目录:# mkdir -pv /usr/local/tengine/cache
3、设置存储缓存目录的权限:# chown -R tengine:tengine /usr/local/tengine/cache
4、重载服务:# nginx -t # nginx -s reload
5、默认存储缓存的目录为空:# ls /usr/local/tengine/cache
6、本地Windows 10首次访问http://node1.qiuyue.com/bbs(按F12进入调试模式),并查看缓存目录中的内容:
7、刷新页面,即本地Windows 10第二次访问http://node1.qiuyue.com/bbs:
备注:缓存已经命中
8、修改node2测试页内容:# echo "<h3>bbs on node2 new</h3>" > /var/www/html/bbs/index.html
9、刷新页面,依旧是缓存中的内容:
10、清理缓存:
(1)动态加载ngx_cache_purge模块:
# cd /tmp
# wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz
# tar -xf ngx_cache_purge-2.3.tar.gz
# dso_tool --add-module=/tmp/ngx_cache_purge-2.3
# vim nginx.conf
dso {
load ngx_cache_purge_module.so;
}
(2)编辑location:
location ~ /purge(/.*) {
allow 192.168.1.0/24;
deny all;
proxy_cache_purge mycache $host$1$is_args$args;
access_log off;
}
# nginx -t # nginx -s reload # nginx -m
(3)清理缓存:
如果要清理http://node1.qiuyue.com/bbs/index.html的缓存,则访问http://node1.qiuyue.com/purge/bbs/index.html即可,会出现Successful purge的提示
备注:可以直接删除/usr/local/tengine/cache目录中的所有内容来达到清理缓存的目的,但是不建议这样操作。