при доступе к http://example.com/ он пуст, но работает хорошо с http://example.com/index.php, мне нужно удалить файл кеша nginx для http://example.com/, как это сделать? Вот моя конфигурация кеша 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?
один метод, например, но довольно гибкий универсальный
добавьте эту строку в nginx.conf ...
proxy_cache_bypass $http_x_update;
... и вы можете в любое время обновить любой uri в кеше с помощью простого HTTP-запроса с "волшебным" заголовком. например
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 вы можете изменить имя заголовка на любое блаблабла, например
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
У вас должна быть где-то в вашей конфигурации эта строка,
fastcgi_cache_key *key*;
Вам нужно найти оттуда ключ для соответствующего URL-адреса, а затем вычислить md5 для этой ключевой строки.
Теперь предположим, что значение md5 равно xm ***** p3w. Итак, ваш файл кэша для URL-адреса - / backup / cache / w / p3 / xm ***** p3w. Теперь удалите его, как хотите.
Другой автоматический способ, если у вас есть модуль nginx_cache_purge с вашим nginx,
fastcgi_cache_purge CACHEREGION $cache_key;
где CACHEREGION - это область кэша, определяемая fastcgi_cache_path
директива, а $ cache_key - значение fastcgi_cache_key
директива.
Примечание: fastcgi_cache_purge
директива разрешена в блоке местоположения.
Другим потенциальным решением, если вы ищете фактический файл (ы) в своей файловой системе, было бы выполнить 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
Вы можете написать небольшую функцию оболочки для вычисления местоположения файла кеша, например для тебя levels=1:2
настроенный кеш:
function nxcacheof {
local x=$(echo -n "$1" | md5sum)
echo "${x:31:1}/${x:29:2}/${x:0:32}"
}
Принимая во внимание параметр cache-path и cache-key, вы можете удалить кешированную запись, скажем, для https://example.org/foo
как это:
$ rm /backup/cache/$(nxcacheof https://example.org/foo)
Я создал простой скрипт, чтобы быстро найти местоположение файла кеша и удалить его:
#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).