访问我的博客

前言

前文介绍了利用 nginx 的 nginx_ngx_cache_purge 模块来实现缓存功能,并设置了缓存时间为一天。

但是如果前端修改了页面,比如首页,由于 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

如果返回

则表示清除成功。

资源下载

示例nginx配置文件

Nginx缓存配置之手动清除缓存的更多相关文章

  1. shiro使用redis作为缓存,出现要清除缓存时报错 java.lang.Exception: Failed to deserialize at org.crazycake.shiro.SerializeUtils.deserialize(SerializeUtils.java:41) ~[shiro-redis-2.4.2.1-RELEASE.jar:na]

    shiro使用redis作为缓存,出现要清除缓存时报错 java.lang.Exception: Failed to deserialize at org.crazycake.shiro.Serial ...

  2. 关于缓存问题:js清除缓存

    css并行加载,js串行加载(会阻塞页面) 清除缓存的问题: 1.一般手动清除,浏览器缓存 2.js代码清除缓存(原理:增加了一个参数,且该参数是一个随机数,每次都不一样,所以每次的请求参数都不一样, ...

  3. NuGet 手动清除缓存不起作用

    问题 有时更新了一些内网的程序库/包,但仅仅是一些小的更改,不想增加版本号再推送到内网服务器.手动删除了 .nuget 文件夹下的相关包文件,但是使用 Visual Studio 重新构建的时候,其使 ...

  4. iOS中 SDWebImage手动清除缓存的方法 技术分享

    1.找到SDImageCache类 2.添加如下方法: - (float)checkTmpSize { float totalSize = 0; NSDirectoryEnumerator *file ...

  5. 设置Firefox自动清除缓存,无需手动清除

    1.在firefox的地址栏上输入about:config回车 2.找到browser.cache.check_doc_frequency选项,双击将3改成1保存即可. 那么这个选项每个值都是什么含义 ...

  6. nginx缓存配置的操作记录梳理

    web缓存位于内容源Web服务器和客户端之间,当用户访问一个URL时,Web缓存服务器会去后端Web源服务器取回要输出的内容,然后,当下一个请求到来时,如果访问的是相同的URL,Web缓存服务器直接输 ...

  7. Hibernate缓存配置

    一级缓存 Hibernate的一级缓存是由Session提供的,因此它只存在于Session的生命周期中,当程序调用save(),update(),saveorupdate()等方法 及调用查询接口l ...

  8. JS强制刷新页面、清除缓存刷新

    清理网站缓存的几种方法 meta方法 <meta http-equiv="pragma" content="no-cache"> <meta ...

  9. iOS UIWebView清除缓存

    UIWebView清除Cookie: //清除cookies NSHTTPCookie *cookie; NSHTTPCookieStorage *storage = [NSHTTPCookieSto ...

随机推荐

  1. Android之TextView灵活使用

    Android之TextView灵活使用 在项目中有无遇到过这样一种程况,例如文字"王明今年10岁了", 但是数字10是从网络返回的数据, 而你又想把这个文字写在xml中, 过往我 ...

  2. mysql变更数据的捕获和入库

    问题:涉及状态的信息,mysql中是update的,缺少中间状态的记录.数据分析中需要这部分数据. 思路:后端服务通过监控某张表的某个字段,根据mysql的binlog文件,还原数据,发送到kafka ...

  3. 定时任务 Wpf.Quartz.Demo.2

    定时任务 Wpf.Quartz.Demo.1已经能运行了,本节开始用wpf搭界面. 准备工作: 1.界面选择MahApp.Metro 在App.xaml添加资源 <Application.Res ...

  4. 剑指offer编程题Java实现——面试题7相关题用两个队列实现一个栈

    剑指offer面试题7相关题目:用两个队列实现一个栈 解题思路:根据栈的先入后出和队列的先入先出的特点1.在push的时候,把元素向非空的队列内添加2.在pop的时候,把不为空的队列中的size()- ...

  5. react项目开发中遇到的问题

    前言 作为一个前端爱好者来说,都想在react上一试生手,那么在搭建react项目开发时,肯定会有这样或者那样的问题,尤其是对初学者来说,下面就个人在开发过程中遇到的问题总结一下,好在有google帮 ...

  6. python3之paramiko模块

    1.paramiko模块介绍 paramiko模块提供了基于ssh连接,进行远程登录服务器执行命令和上传下载文件的功能.这是一个第三方的软件包,使用之前需要安装. 2.paramiko的使用方法 (1 ...

  7. 写vue项目时候 零星的笔记

    1,挂载也可以用 .$mount() 2,子组件中通过this.$root拿到实例的数据.截图中是子组件中

  8. Dapper实现一对多对象关系聚合导航属性

    领域对象:Game(游戏), Room(游戏群),两者一对多的关系,SQL语句中会用到JOIN public class Game : AggregateRoot { public string Ta ...

  9. linux服务器ssh免密码登录

    假设有三台服务器的ip分别是10.9.1.101.10.9.1.102.10.9.1.103 修改hosts文件 分别修改三台服务器的hosts的文件(vi /etc/hosts), 在hosts文件 ...

  10. git小乌龟工具TortoiseGit记住你的账号密码

    在使用TortoiseGit的过程中,发下每次push或者pull都要重复输入账号密码,非常麻烦 怎么设置记住密码 在[系统盘]:\Users[你的用户名](比如C:\User\Administrat ...