nginx 缓存清理

本文介绍了如何利用nginx的第三方模块ngx_cache_purge来清除指定URL的缓存。nginx默认的proxy_cache无法直接清除特定缓存,但ngx_cache_purge解决了这个问题。在安装nginx时需要加载该模块,并配置相应的权限,允许特定IP手动清除缓存。例如,通过/purge/1.jpg路径可以清除www.wolfdream.cn/1.jpg图片的缓存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方法二:
找到nginx的缓存目录 如果缓存不多的话可以选择直接删除缓存目录里面的东西,如果缓存特别大的情况则需要找到对应缓存的文件进行删除。
 
方法三:
若配置了缓存清除功能(可清除指定文件缓存)

nginx具有web缓存服务,proxy_cache,但是有一个问题就是,proxy_cache不能清除指定的URL缓存,只能设置URL过期时间,但是有问题,有人就会很快解决问题,nginx第三方模块ngx_cache_purge能清除指定URL。

  nginx安装时需要将ngx_cache_purege加载进去。

 

./configure --user=www --group=www --add-module=/root/dxm/nginx/ngx_cache_purge-1.2   

 

其中,/root/dxm/nginx/ngx_cache_purge-1.2为ngx_cache_purge解压路径(附件中提供ngx_cache_purge tar包下载)

现在来一段实例,实现图片缓存:

   话说proxy_tem_path,与proxy_cache_path必须在同一个分区之下!

 

proxy_temp_path /usr/local/nginx/proxy_temp;  
proxy_cache_path /usr/local/nginx/proxy_cache_path levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=1g;

 

 

复制代码
upstream tomcat_server{  
server 127.0.0.1:8080;
}


server{
listen 192.168.154.128;
server_name www.wolf.com;

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{

proxy_cache cache_one;
proxy_cache_methods GET HEAD POST;
proxy_cache_min_uses 1;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_cache_valid any 1m;
proxy_cache_key "$host:$server_port$uri$is_args$args";

proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://tomcat_server;


}


location ~ .*\.(jsp)$ {

proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://tomcat_server;

}


location ~ /purge(/.*)
{
allow 192.168.154.128;
allow 192.168.154.1;
deny all;
proxy_cache_purge cache_one $host:$server_port$1$is_args$args;
}
复制代码

 

恩,静态页面缓存,动态请求不缓存!

大家看一下最后一段的那个purege配置,很显然,表示哪些IP可以手动清除指定的URL

比如,www.wolfdraem.cn/1.jpg可以访问到我的图片,那么用www.wolfdream.cn/purge/1.jpg  就可以清除图片缓存了。


 
 

删除nginx缓存文件
一:脚本

a shell版

#!/bin/bash
  
#Date: 2013-06-27
#Auther: budong
  
#######################################################
#说明:
#  1.本脚本用于清除nginx缓存文件
#  2.查看你的nginx是根据什么作为key来hash的,我的设置是 proxy_cache_key $uri$is_args$args;
#  因此nginx会根据$uri$is_args$args作为key进行hash,因此可以模拟nginx对一个key进行再
#  hash找到相应的文件路径,删除(具体可随意找个缓存文件 more 一下看看)
#  3.缓存设置 proxy_cache_path /data/mumayi/cache levels=1:2 keys_zone=cache_one:6000m inactive=15d max_size=200g;
#  根据相应的配置,请做相应修改测试
#  4.uri格式请按照同级目录下rm_apk_list.txt中填写
#####################################################
  
while read -r line
do
  md5uri=`echo -n $line | md5sum | awk '{ print $1 }'`
  filepath=`echo "$md5uri" awk '{print "/data/mumayi/cache/"substr($0,length($0),1)"/"substr($0,length($0)-2,2)"/"$0}'`
  rm -rf $filepath
done /root/sbin/rm_apk_list.txt
b python版
  
#!/usr/local/python2.7/bin/python2.7
# -*- coding:utf8 -*-
  
#Date: 2013-06-26
#Name: budong
  
'''
说明:
  1.本脚本用于清除nginx缓存文件
  2.查看你的nginx是根据什么作为key来hash的,我的设置是 proxy_cache_key $uri$is_args$args;
  因此nginx会根据$uri$is_args$args作为key进行hash,因此可以模拟nginx对一个key进行再
  hash找到相应的文件路径,删除(具体可随意找个缓存文件 more 一下看看)
  3.缓存设置 proxy_cache_path /data/mumayi/cache levels=1:2 keys_zone=cache_one:6000m inactive=15d max_size=200g;
  根据相应的配置,请做相应修改测试
  4.uri格式请按照同级目录下rm_apk_list.txt中填写
'''
import os
import sys
try:
  from hashlib import md5
except:
  from md5 import md5
  
reload( sys )
sys.setdefaultencoding('utf-8')
  
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
URI_FILE = ''.join([PROJECT_ROOT,'/rm_apk_list.txt'])
  
def nginx_purge(uri):
  m = md5()
  m.update("%s" % uri)
  md5uri=m.hexdigest()
  md5uri_len=len(md5uri)
  dir1=md5uri[md5uri_len-1:]
  dir2=md5uri[md5uri_len-3:md5uri_len-1]
  file_path=("/data/mumayi/cache/%s/%s/%s" % (dir1, dir2, md5uri))
  if os.path.exists(file_path):
    os.remove(file_path)
  
with open("%s" % URI_FILE,'r') as uri_file:
  for line in uri_file:
    line = line.rstrip()
    nginx_purge(line)

转载于:https://www.cnblogs.com/heaven-xi/articles/9077403.html

<think>好的,我现在需要回答用户关于如何清理Nginx缓存的查询。首先,我得回顾一下Nginx缓存的工作原理,因为了解机制有助于找到清理方法。根据引用[1],Nginx通过哈希值决定缓存文件的存储路径,所以清理缓存可能需要删除这些特定文件或者目录。 接下来,我应该考虑用户可能需要的具体步骤。用户询问的是最佳实践和方法,因此需要详细说明手动清理和自动清理两种方式。手动清理包括直接删除缓存目录下的文件,这需要知道缓存路径的位置,通常在配置文件中定义,比如proxy_cache_path指定的路径。然后使用rm命令删除,或者使用proxy_cache_purge模块来按需清理特定内容。这部分可能需要检查Nginx是否编译了该模块,并配置相应的location块。 自动清理方面,可以设置缓存过期时间,比如proxy_cache_valid指令,这样旧的缓存会自动被删除。另外,定期清理脚本也是一个方法,比如结合find命令定期删除过期文件。同时,可能需要提及权限问题,确保执行删除操作的用户有足够的权限。 还需要注意引用中的信息是否正确。引用[4]提到了stub_status模块的配置,虽然和缓存清理无关,但提醒我要确保在配置任何新模块后重新加载Nginx。此外,用户可能需要参考官方文档或最佳实践,比如引用[1]和[4]提到的Nginx配置要点,来确认步骤的正确性。 最后,应该生成相关问题,帮助用户深入理解,比如如何配置缓存、监控缓存状态或处理清理后的验证。要确保回答结构清晰,步骤详细,并且引用正确的来源,比如在提到proxy_cache_path时引用[1]的信息。</think>### 如何清理Nginx缓存的方法和最佳实践 #### 1. **理解Nginx缓存机制** Nginx通过`proxy_cache_path`指令定义缓存路径和参数,缓存文件以哈希值命名并存储在指定目录中[^1]。例如: ```nginx proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m inactive=60m; ``` - **`/data/nginx/cache`**:缓存文件存储路径。 - **`inactive=60m`**:60分钟内未被访问的缓存自动清理[^1]。 --- #### 2. **手动清理缓存的方法** ##### (1) **直接删除缓存文件** - **步骤**: 1. 定位缓存目录(如`/data/nginx/cache`)。 2. 使用命令删除文件: ```bash rm -rf /data/nginx/cache/* ``` 3. 重新加载Nginx配置: ```bash nginx -s reload ``` - **注意**:需确保Nginx服务有目录操作权限[^4]。 ##### (2) **使用`proxy_cache_purge`模块** - **前提**:Nginx需编译安装`ngx_cache_purge`模块。 - **配置示例**: ```nginx location /purge { allow 127.0.0.1; deny all; proxy_cache_purge my_cache $scheme$request_method$host$request_uri; } ``` - **操作**:访问`http://example.com/purge/需清理的URL`即可删除特定缓存[^1]。 --- #### 3. **自动清理缓存的配置** ##### (1) **设置缓存过期时间** 在Nginx配置中定义缓存有效期: ```nginx proxy_cache_valid 200 302 10m; # 成功响应缓存10分钟 proxy_cache_valid 404 1m; # 404响应缓存1分钟 ``` - 超时的缓存文件会被自动清理。 ##### (2) **定期清理脚本** 通过`cron`任务定期清理过期文件: ```bash find /data/nginx/cache -type f -mtime +7 -exec rm -f {} \; ``` - 此脚本会删除7天前的缓存文件。 --- #### 4. **验证清理结果** - **检查缓存目录**: ```bash ls -l /data/nginx/cache ``` - **通过`stub_status`监控缓存状态**(需提前配置)[^4]: ```nginx location /status { stub_status; } ``` 访问`http://status.example.com/status`查看缓存命中率等指标。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值