某些时候我们如果不想等待缓存的过期,想要主动清除缓存,可以采用第三方的缓存清除模块清除缓存。
模块下载
nginx第三方模块官方地址:
https://www.nginx.com/resources/wiki/modules/
进入github后,看到下边这个链接即包的下载地址:
http://labs.frickle.com/nginx_ngx_cache_purge/
进入后点击download即可。
需要安装此模块,稍后讲解。
使用方法
语法:proxy_cache_purge zone_name key
默认值:none
背景:location
设置用于从proxy缓存中清除所选页面的区域和键。
http {
proxy_cache_path /usr/local/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=10s use_temp_path=off;
server {
listen 80;
server_name xxx.com;
location ~ \.php$ {
proxy_pass https://www.jd.com;
proxy_cache my_cache;
}
#清除缓存
location ~ /purge(/.*) {
allow 127.0.0.1; //只允许本地IP
deny all;
proxy_cache_purge my_cache $host$1$is_args$args;
#my_cache是上边定义的key_zone
#$host$1$is_args$args是缓存键值 在proxy_cache_key指令中查看
}
}
}
安装模块并平滑升级
如果重新编译安装nginx,这样会影响用户的使用。
请注意演示的路径。
我nginx安装在了/www/server/nginx
源码包路径/www/server/nginx/src
-
下载第三方模块传到服务器。
-
找到nginx源码包,即当时编译安装nginx时的包。
移动ngx_cache_purge-2.3到现在使用的Nginx源码包下
那么第三方包的扩展目录为/www/server/nginx/src/ngx_cache_purge-2.3 -
用–add-module=PATH 添加第三方扩展 重新编译
重新编译需要在旧的参数基础上编译,执行nginx -V 查看旧的参数
拷贝参数,最好粘贴到编辑器上,原参数不变,
后面跟上–add-module=/www/server/nginx/src/ngx_cache_purge-2.3 ,跟上文件夹路径。./configure 参数
执行 -
make 但千万不要make install
编译而不要安装!
这时候会在objs生成新的nginx执行文件
-
重命名 nginx 旧版本二进制文件,即 sbin 目录下的 nginx(期间 nginx 并不会停止服务)
-
然后拷贝一份新编译的二进制文件到该目录
-
使用源码自带的升级命令:make upgrade 来自动完成平滑升级
它执行了nginx -t 向nginx主进程发送USR2信号升级可执行文件 又向旧的进程发送QUIT信号平滑退出。
升级完成,nginx -V会有新的清除模块参数.我们可以使用了。