Функция очистки кеша Nginx

D
На сайте с 28.06.2008
Offline
978
829

Кода 3-4 назад кодер делавший мне сайт написал мне функцию очистки кеша только одной нужной мне в данный момент страницы.

Я ей активно пользуюсь и она работала. Только что заметил что работать перестала. Когда - не знаю.

Вот код самой функции:

/**
* Функция очистки кеша Nginx
*
* CommentsHelperQuery::clearCache('http(s)://*');
*
* @param string $value
* @return
*/
function clearCache($value)
{
jimport('joomla.filesystem.file');

if(!empty($value))
{
$data = parse_url($value);
$filename = md5('GET|site.ru|'.$data['path']);

JFile::delete('/var/cache/nginx/site/'.substr($filename, -1).'/'.substr($filename, -3, 2).'/'.$filename);

return true;
}
return false;
}
}

Подскажите мне как хотя бы начать проверять где ошибка?

В конфиге nginx для этого сайта прописано:

fastcgi_cache_path /var/cache/nginx/site levels=1:2 keys_zone=med:10m max_size=2048m inactive=24h;
Оптимизайка
На сайте с 11.03.2012
Offline
396
#1

А libnginx-mod-http-cache-purge чем не устраивает?

https://docs.nginx.com/nginx/admin-guide/content-cache/content-caching/#purge_request

⭐ BotGuard (https://botguard.net) ⭐ — защита вашего сайта от вредоносных ботов, воровства контента, клонирования, спама и хакерских атак!
D
На сайте с 28.06.2008
Offline
978
#2

Хотелось бы починить то что уже работает. Я нашел где лежит кеш нужной для очистки страницы -

/var/cache/nginx/site/c/04/d840acd78808e4dfb8c50bc20eb1c04c
Оптимизайка
На сайте с 11.03.2012
Offline
396
#3

Dram, а перезапустить nginx после "очистки" пробовали? Например опция у nginx "sendfile on" может держать файловый дескриптор.

D
На сайте с 28.06.2008
Offline
978
#4

Если я перезапущу nginx - весь кеш ведь сбросится. А мне нужно только одну страницу почистить.

В админке сайта кодер мне сделал поле куда я вставлял полный урл той страницы которую нужно почистить и нажимал кнопку очистки кеша - и кеш этой страницы чистился.

Сейчас нажимаю, он мне пишет типа кеш очищен, но в реальности не чистит.

И по ftp я смотрю - файл кеша этой страницы на месте,не удаляется.

P.S. sendfile on присутствует в конфиге. Но файл то не удаляется

---------- Добавлено 07.02.2019 в 20:58 ----------

Я попробовал вывести на страницах сайта такой код:

<?php
$data = parse_url($value);
$filename = md5('GET|site.ru|'.$data['path']);
$fileput = ('/var/cache/nginx/site/'.substr($filename, -1).'/'.substr($filename, -3, 2).'/'.$filename);
echo $fileput;
?>

На нужно странице вывелось

/var/cache/nginx/site/6/23/98c7fc89f48fe6b25f0a8da545d98236

Но меня смущает что на всех других страницах выводит точно такой же путь

А на echo parse_url($value); выдает - Array

Оптимизайка
На сайте с 11.03.2012
Offline
396
#5
Dram:
Если я перезапущу nginx - весь кеш ведь сбросится.

С чего бы это, он кешированные страницы в файлах хранит.

D
На сайте с 18.12.2015
Offline
142
#6
Оптимизайка:
libnginx-mod-http-cache-purge

На последних версиях Nginx это доступно только для владельцев коммерческой подписки.

У вас проблема с построением хеша для урла.

Попробуйте сделать


fastcgi_cache_key ваш_домен.com$request_uri;

А в скрипте подобрать такой-же ключ через переменные, будет что-то вроде ваш_домен.com . $_SERVER['REQUEST_URI']

Я правда не помню, request_uri начинается со слеша или нет.

После этого сделайте то-же самое что и ваш прогер, от получившегося хеша с конца нужно сначала один символ потом два взять, и потом результирующий хеш - это и будет ваш файл со страницей.

Разработка и поддержка высоконагруженных проектов.
D
На сайте с 28.06.2008
Offline
978
#7

Я нашел уже ошибку и все починил. Я мучал общий конфиг, а в конкретном конфиге сайта тоже была расписана схема хеширования и она отличалась от общей.

Оптимизайка
На сайте с 11.03.2012
Offline
396
#8
danforth:
На последних версиях Nginx это доступно только для владельцев коммерческой подписки.

Оно в стандартных репах debian.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий