CentOS 5.9下删除nginx缓存文件

依然记得当时满互联网的去找删除nginx cache的脚本,结果不尽人意,不符合自己需求,焦头烂额之后就自己写了这两个脚本,供需要的兄弟参考。

一:脚本

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)

c ngx_cache_purge不做考虑,据说已经停止开发了

说明:

1 我的 /root/sbin/rm_apk_list.txt 文件
[root@budong ~]# cat /root/sbin/rm_apk_list.txt 
/2013/08/15/38/382272/shuazanzhushou_V1.8.16_mumayi_95a91.apk
2 查看一个缓存对象,应该有些明白了吧
[root@budong ~]# more /data/mumayi/cache/0/00/db9327b60a6b3c164516117f90d9d000 
塑?
KEY: /2013/10/23/43/432816/dinuochongwuDinoPets_V1.1.1_mumayi_0b399.apk
HTTP/1.1 200 OK
Server: nginx/1.2.6
Date: Sun, 15 Dec 2013 19:51:22 GMT
Content-Type: application/vnd.android.package-archive
Content-Length: 37466293
Connection: close
Last-Modified: Wed, 23 Oct 2013 06:15:06 GMT
Expires: Wed, 18 Dec 2013 17:35:07 GMT
Cache-Control: max-age=604800
Accept-Ranges: bytes

二:是时候结束了

自言自语:

这个问题当时困惑了我好久,估计前后有2个月的时间,最后终于被我这么解决了。在这里希望能帮到你,如果你有更好的方法也请告诉我。