如何删除单个 nginx 缓存文件?

如何删除单个 nginx 缓存文件?

当访问 http://example.com/ 时,它是空白的,但使用 http://example.com/index.php 工作正常,我需要删除 http://example.com/ 的 nginx 缓存文件,怎么做?这是我的 nginx 缓存配置。

    fastcgi_cache_path  /backup/cache levels=1:2 keys_zone=my-cache:1000m inactive=1000m;
    fastcgi_temp_path /backup/cache/tmp 1 2;
    fastcgi_cache_key "$scheme://$host$request_uri";

如何获取/backup/cache文件夹中的缓存文件名?

答案1

例如,一种方法,但非常灵活,多功能

将此行添加到 nginx.conf ...

proxy_cache_bypass $http_x_update;

...您可以随时使用带有“magic”标头的简单 http 请求更新缓存中的任何 uri。例如

curl -s -o /dev/null  -H "X-Update: 1" mydomain.com

或者

curl -s -o /dev/null  -H "X-Update: 1" mydomain.com/some/long/url/

为了安全和满足偏执狂:D 您可以将标题名称更改为任何 blablabla,例如

proxy_cache_bypass $http_x_gangnamstyle;
#proxy_cache_bypass $http_x_mycatsnickname;
#proxy_cache_bypass $http_x_b2ca678b4c936f905fb82f2733f5297f;

curl -s -o /dev/null  -H "X-GangnamStyle: 1" mydomain.com
curl -s -o /dev/null  -H "X-mycatsnickname: 1" mydomain.com
curl -s -o /dev/null  -H "X-b2ca678b4c936f905fb82f2733f5297f: 1" mydomain.com

答案2

你的配置中一定有这一行,

fastcgi_cache_key *key*;

您需要从那里找到相应 URL 的密钥,然后计算该密钥字符串的 md5。

现在假设 md5 值为 xm*****p3w,那么 URL 的缓存文件为 /backup/cache/w/p3/xm*****p3w。现在您可以随意删除它。

另一种自动化方式是,如果你的 nginx 中有 nginx_cache_purge 模块,

fastcgi_cache_purge CACHEREGION $cache_key;

其中,CACHEREGION 是指令定义的缓存区域fastcgi_cache_path,$cache_key 是指令的值fastcgi_cache_key

注意:fastcgi_cache_purge位置块中允许使用指令。

答案3

我创建了一个简单的脚本来快速找到缓存文件位置并将其删除:

#Usage sample : ~/cache_location.sh static.example.com/contents/3145.jpg
CACHE_PATH=/home/static-example/cache
MD5=$(echo -n $1|md5sum|cut -d ' ' -f 1)
f1=$(printf $MD5 | tail -c 1)
f2=$(printf $MD5 | tail -c 3|head -c 2)
rm $CACHE_PATH/$f1/$f2/$MD5

它将根据路径和文件名计算缓存位置。您需要安装 md5sum(yum install coreutils)。

答案4

另一个潜在的解决方案是,如果您正在文件系统中寻找实际的文件,那么可以通过缓存目录进行 grep 并以这种方式逐个打印出文件(假设您使用默认目录/var/cache/nginx

sudo grep -lr 'example.com/' /var/cache/nginx*

然后应该打印出要检查和/或删除的文件列表:

/var/cache/nginx/0/74/c7de22912j735dc5d2206ffd37ba6740
/var/cache/nginx/d/15/9df468b0z77187f1fc020f9226ac515d
/var/cache/nginx/7/47/8sh3nlkjs8833f83383b67df9a2ca477

相关内容