当访问 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