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 ...
随机推荐
- (最短路 Floyd diskstra prim)Frogger --POJ--2253
题目链接:http://poj.org/problem?id=2253 Frogger Time Limit: 1000MS Memory Limit: 65536K Total Submissi ...
- AngularJS 表单数据验证及错误信息提示
一.表单验证基本原理 表单验证包括两个主题: 定义验证规则,验证数据有效性. 显示验证结果,把验证结果以友好的方式显示给用户. H5内置一些验证功能,并会显示内置的错误提示信息,先要禁用它,在< ...
- 如何永久关闭选项"Tools > Close Other Forms"
http://www.cnblogs.com/quanweiru/archive/2013/03/30/2990945.html Oracle EBS里Tools>Close Other For ...
- 解决UNIGUI字体太小的问题
解决UNIGUI字体太小的问题 Unigui运行在chrome浏览器下可以有最佳的效果,但用ie打开用unigui做的项目会发现字体明显小一截,可以用自定义css来解决这个问题. 可以在UniServ ...
- ASP .Net C# ---CSV导入导出
CSV和Excel大致相同 复制下来 数据传到方法里面就可以了 /// <summary> /// DataTable数据写入CSV文件 /// </summary> /// ...
- FluentAPI详细用法
设置主键 modelBuilder.Entity<x>().HasKey(t => t.Name); 设置联合主键 modelBuilder.Entity<x>().Ha ...
- 【转】[MySQL复制异常]Cannot execute statement: impossible to write to binary log since statement is in row for
MySQL复制错误]Last_Errno: 1666 Last_Error: Error executing row event: 'Cannot execute statement: imposs ...
- 《AngularJS深度剖析与最佳实践》笔记: 第二章 概念介绍
第二章 概念介绍 2.1 什么是UI? 用户界面包括内容(静态信息+动态信息), 外观, 交互. 在前端技术栈中分别由HTML, CSS和JS负责. 进一步抽象, 分别对应于MVC三个主要部分: Mo ...
- Spring IOC 容器源码分析 - 创建原始 bean 对象
1. 简介 本篇文章是上一篇文章(创建单例 bean 的过程)的延续.在上一篇文章中,我们从战略层面上领略了doCreateBean方法的全过程.本篇文章,我们就从战术的层面上,详细分析doCreat ...
- JQuery Mobile - 导航栏选中状态代码
class="ui-btn-active" 参考: https://wizardforcel.gitbooks.io/w3school-jqmobile/content/8.htm ...