Ngixn的缓存失效的时候都是通过proxy_cache_valid定义的多长时间失效,以及上游服务发来的响应一些头部,比如cache-control来定义缓存什么时候失效。这些失效都是和定时器一样基于时间段过期,能不能让缓存立刻失效呢?

ngx_cache_purge第三方模块可以立刻的使得某个资源缓存失效,这个模块是完全可以在生产环境下使用。

 

ngx_cache_purge模块


Nginx 清除缓存 第三方ngx_cache_purge模块_css

 

添加ngx_cache_purge模块


[root@www ~]# yum install git-1.8.3.1-21.el7_7.x86_64 -y

[root@www src]# git clone https://github.com/FRiCKLE/ngx_cache_purge
Cloning into 'ngx_cache_purge'...
remote: Enumerating objects: 212, done.
remote: Total 212 (delta 0), reused 0 (delta 0), pack-reused 212
Receiving objects: 100% (212/212), 64.01 KiB | 42.00 KiB/s, done.
Resolving deltas: 100% (116/116), done.

[root@www nginx-1.16.1]# ./configure --prefix=/usr/local/nginx --add-module=../ngx_cache_purge

[root@www nginx-1.16.1]# make && make install

[root@www nginx-1.16.1]# make upgrade

 

配置nginx.conf


proxy_cache_path /usr/local/nginx/cache levels=1:2 keys_zone=nginx_cache:10m max_size=10G inactive=60m use_temp_path=off;

#缓存存放的位置是 /data/nginx/cache,目录层级为两层,最多存放10G缓存
#缓存key存放的内存空间是 nginx_cache ,单个缓存最大为 10m
#自动移除60分钟内没有人访问的缓存
#在将缓存放置到 proxy_cache_path 之前,不使用 use_temp_path

 

配置server


location ~ .*\.(gif|jpg|png|htm|html|css|js|flv|ico|swf)(.*) {
proxy_set_header Host $host;
proxy_pass http://192.168.179.100:9090;
proxy_redirect http:// $scheme://;
add_header X-Cache $upstream_cache_status;

proxy_cache nginx-cache;#对应前边的keys_zone=nginx_cache
proxy_cache_valid 200 12h;
proxy_cache_valid 301 302 1m;
proxy_cache_key $host$uri$is_args$args;
}

location ~ /purge(/.*) {
allow all;#指定可以清除缓存的ip,all允许所有ip清除
proxy_cache_purge nginx_cache $host$1$is_args$args;
}

 

启动nginx


/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

purge命令清除静态缓存


http://域名+purge+静态资源相对路径    来清除静态资源缓存。

例如,在浏览器地址栏输入:http://www.mytest.com/purge/resources/app/css/product.css