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
如果返回

则表示清除成功。
资源下载
Nginx缓存配置之手动清除缓存的更多相关文章
- 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 ...
- 关于缓存问题:js清除缓存
css并行加载,js串行加载(会阻塞页面) 清除缓存的问题: 1.一般手动清除,浏览器缓存 2.js代码清除缓存(原理:增加了一个参数,且该参数是一个随机数,每次都不一样,所以每次的请求参数都不一样, ...
- NuGet 手动清除缓存不起作用
问题 有时更新了一些内网的程序库/包,但仅仅是一些小的更改,不想增加版本号再推送到内网服务器.手动删除了 .nuget 文件夹下的相关包文件,但是使用 Visual Studio 重新构建的时候,其使 ...
- iOS中 SDWebImage手动清除缓存的方法 技术分享
1.找到SDImageCache类 2.添加如下方法: - (float)checkTmpSize { float totalSize = 0; NSDirectoryEnumerator *file ...
- 设置Firefox自动清除缓存,无需手动清除
1.在firefox的地址栏上输入about:config回车 2.找到browser.cache.check_doc_frequency选项,双击将3改成1保存即可. 那么这个选项每个值都是什么含义 ...
- nginx缓存配置的操作记录梳理
web缓存位于内容源Web服务器和客户端之间,当用户访问一个URL时,Web缓存服务器会去后端Web源服务器取回要输出的内容,然后,当下一个请求到来时,如果访问的是相同的URL,Web缓存服务器直接输 ...
- Hibernate缓存配置
一级缓存 Hibernate的一级缓存是由Session提供的,因此它只存在于Session的生命周期中,当程序调用save(),update(),saveorupdate()等方法 及调用查询接口l ...
- JS强制刷新页面、清除缓存刷新
清理网站缓存的几种方法 meta方法 <meta http-equiv="pragma" content="no-cache"> <meta ...
- iOS UIWebView清除缓存
UIWebView清除Cookie: //清除cookies NSHTTPCookie *cookie; NSHTTPCookieStorage *storage = [NSHTTPCookieSto ...
随机推荐
- c51较c比较,单片机最小系统
sfr(Special function registers):特殊功能寄存器声明 bit:位变量声明 sbit:特殊位声明 psw^2,表示psw寄存器上的第2位 << >> ...
- Eclipse配置maven web项目问题总结
clipse创建Maven结构的web项目的时候选择Artifact Id为maven-artchetype-webapp,点击finish之后,一般会遇到如下问题 1. The superclass ...
- Legal or Not HDU
Legal or Not Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- ASP.NET Web API 框架研究 Controller创建过程与消息处理管道
现在我们从代码角度来看下,从消息处理管道末尾是怎么创建出Controller实例的.消息处理管道末端是一个叫HttpRoutingDispatcher的处理器,其内部完成路由后 ,会把消息派送给其内部 ...
- .net core部署到linux可能碰到的问题
缺少icu库以独立部署 (SCD)的方式发包,运行时报错错误信息:FailFast: Couldn't find a valid ICU package installed on the system ...
- 使用ASP.NET Core2.2创建WebApp
目录 使用ASP.NET Core2.2创建WebApp 前言 使用dotnet命令new一个WebApp 查看WebApp文件结构 run起来,开始运行! 尝试:使用--help获取dotnet命令 ...
- WPF自定义控件开发实例 - ColorPicker
开发环境:Win10 + VS2017 + .Net4.5 这个 ColorPicker 是<<WPF编程宝典:使用C#2012和.NET4.5>>这本书中的例子.这里我记录一 ...
- Linux Shell脚本编程基础(11)
实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核,不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序.Shel编程语言具有普通编程 ...
- 堆排序(大顶堆、小顶堆)----C语言
堆排序 之前的随笔写了栈(顺序栈.链式栈).队列(循环队列.链式队列).链表.二叉树,这次随笔来写堆 1.什么是堆? 堆是一种非线性结构,(本篇随笔主要分析堆的数组实现)可以把堆看作一个数组,也可以被 ...
- Spring Boot使用@Async实现异步调用:自定义线程池
前面的章节中,我们介绍了使用@Async注解来实现异步调用,但是,对于这些异步执行的控制是我们保障自身应用健康的基本技能.本文我们就来学习一下,如果通过自定义线程池的方式来控制异步调用的并发. 定义线 ...