Nginx缓存配置之手动清除缓存
前言
前文介绍了利用 nginx 的 nginx_ngx_cache_purge 模块来实现缓存功能,并设置了缓存时间为一天。
但是如果前端修改了页面,比如首页,由于 Nginx 缓存的存在,网站首页并不会立即生效,而是要等到缓存过期。这样明显不是我们想要的结果,所以需要进行手动使 Nginx 缓存失效。以下为操作详解。
基础环境
- 已经设置缓存的 Nginx 服务器, 参照我之前博文 Nginx缓存配置
Nginx 配置文件拆分
在企业 Nginx 应用中,Nginx 配置文件应该根据域名不同来进行拆分,然后再 nginx.conf中进行include引入。这样的好处是便于管理配置文件,便于修改配置文件, 而 nginx.conf 文件中只保留 upstream 以及其他通用配置信息。
在 Nginx 的 conf 目录下创建文件夹 include, 用于保存拆分的配置文件。
mkdir include
拆分的规则可以如下:
- 桌面版(WEB)的 Nginx 配置文件,可以命名为 nginx_web.conf
- 手机版(WAP)的 Nginx 配置文件,可以命名为 nginx_wap.conf
- 安卓的 Nginx 配置文件,可以命名为 nginx_apk.conf
- 苹果的 Nginx 配置文件,可以命名为 nginx_ios.conf
- 清除缓存的配置文件,可以命名为 purge.conf
在 /usr/local/nginx/conf/nginx.conf 中引入拆分的配置文件, 在配置文件中的 http 节点下进行引入
http{
#......
# 注意 purge.conf 必须要第一个引用!!!
include include/purge.conf;
# 引入其他配置文件
include include/nginx_web.conf;
#include include/nginx_wap.conf;
#include include/nginx_apk.conf;
#include include/nginx_ios.conf;
}
配置缓存清除
cd /usr/local/nginx/conf/include
vi purge.conf
#purge.conf 文件内容为:
server {
listen 80;
server_name 192.168.200.129;# 此处我配置的是本机ip
charset utf8;
location ~ /purge(/.*) {
allow all;# 访问此接口的白名单,all代表所有人都可以访问该路径
# tmpcache 为前文中 proxy_cache_path 里配置的 keys_zone 的值
# www.domain.com$1$is_args$args 表示缓存key的名称,清除某一域名下的缓存,可以指定参数
# $1 代表正则匹配中的第一组
proxy_cache_purge cachefile www.domain.com$1$is_args$args;
}
}
# 保存 purge.conf 文件
测试清除缓存
如果要进行缓存清除,首先需要有缓存文件,此处参照前文 Nginx缓存配置 中,访问 www.domain.com/testpage2 ,刷新页面,直到缓存已经生成,即 X-Cache 的状态为 HIT。
进入 cd /tmp/cache/ ,查看已经生成了缓存文件
# 测试 nginx 配置是否正确
/usr/local/nginx/sbin/nginx -t
# 如果提示 is ok,说明配置没有问题,否则需要修改
# 重启 Nginx
/usr/local/nginx/sbin/nginx -s reload
浏览器访问(也可以通过 curl 命令来访问):
# 清除key为 www.domain.com/ 的缓存
192.168.200.129/purge/
# 清除 key 为 www.domain.com/testpage2 页面缓存
192.168.200.129/purge/testpage2
如果返回
则表示清除成功。