Если я перезапущу nginx - весь кеш ведь сбросится. А мне нужно только одну страницу почистить.
В админке сайта кодер мне сделал поле куда я вставлял полный урл той страницы которую нужно почистить и нажимал кнопку очистки кеша - и кеш этой страницы чистился.
Сейчас нажимаю, он мне пишет типа кеш очищен, но в реальности не чистит.
И по ftp я смотрю - файл кеша этой страницы на месте,не удаляется.
P.S. sendfile on присутствует в конфиге. Но файл то не удаляется
---------- Добавлено 07.02.2019 в 20:58 ----------
Я попробовал вывести на страницах сайта такой код:
А как проверить? У меня одна из самых последний версий Nginx, в прошлом месяце только обновил
Попробуйте поменять в функции
$filename = md5('GET|site.ru|'.$data['path']);
на
$filename = md5('GET|'.$data['host'].'|'.$data['path']);
Хеш оожидаемо один и тот же получается
---------- Добавлено 08.02.2019 в 12:32 ----------
Я делал еще проще - в конфиге Nginx прописал
в функции
проверил - хеш получается одинаковый.
Теперь проверяю удаление - не удаляет зараза!
Начинаю смотреть ,а Nginx реально создает файл кеша по пути
А echo $fileput; мне выводит
Вероятно проблема тут - fastcgi_cache_key "$request_uri";
Я не понимаю как Nginx ее хеширует - как это проверить?
Посмотрел в конфиге - хеш строится таким образом:
fastcgi_cache_key "$request_method|$host|$request_uri";
Ну и вроде бы это согласуется в этим - $filename = md5('GET|site.ru|'.$data['path']);
Или нет?
---------- Добавлено 08.02.2019 в 09:52 ----------
Попробовал еще так
$url = 'https://site.ru/test';
$data = parse_url($url);
$filename = md5('GET|site.ru|'.$data['path']);
$fileput = ('/var/cache/nginx/site/'.substr($filename, -1).'/'.substr($filename, -3, 2).'/'.$filename);
print_r($data);
?>
получил - Array ( [scheme] => https [host] => site.ru [path] => /test )
---------- Добавлено 08.02.2019 в 09:59 ----------
Так же решил посмотреть что выводит
echo $_SERVER['REQUEST_METHOD'].$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
?>
получил ожидаемое
GETsite.ru/test
---------- Добавлено 08.02.2019 в 10:02 ----------
Затем решил сравнить хеши
$url = 'https://site.ru/test';
$data = parse_url($url);
$filename = md5('GET|site.ru|'.$data['path']);
$fileput = ('/var/cache/nginx/site/'.substr($filename, -1).'/'.substr($filename, -3, 2).'/'.$filename);
echo $filename;
?>
<br>
<?php
echo md5($_SERVER['REQUEST_METHOD']|.$_SERVER['HTTP_HOST']|.$_SERVER['REQUEST_URI']);
?>
И получил два одинаковых хеша, но они не совпадают с реальных хешем страницы кеша которую сгенерировал Nginx
Skom, вы правы!
Я вывел такой код:
$url = 'https://site.ru/test';
$data = parse_url($url);
$filename = md5('GET|site.ru|'.$data['path']);
$fileput = ('/var/cache/nginx/site/'.substr($filename, -1).'/'.substr($filename, -3, 2).'/'.$filename);
echo $fileput;
?>
мне вывело (на тестовой странице)
а ее кеш лежит тут
Такое впечатление что Nginx как то по другому берет Хеш страницы.
Как это проверить?
Skom, а как найти что такое $value ?
Я сделал поиск по файлам:
root@fin ~ # grep -irl '$value' /var/www/site/administrator/components/com_comments
/var/www/site/administrator/components/com_comments/models/item.php
/var/www/site/administrator/components/com_comments/helpers/query.php
query.php - это файл с функцией из 1 поста
а в item.php есть такой кусок
{
$ids = array();
foreach($data['images'] as $index => $value)
{
$ids[] = $index;
}
Если сделать поиск по grep -irl '$value' /var/www/site/administrator/components то $value встречается чуть ли не во всех компонентах
Skom, на код
$data = parse_url($value);
$filename = md5('GET|site.ru|'.$data['path']);
print_r($data);
?>
выводит - Array ( [path] => )
Не понятно что такое $value
Если я перезапущу nginx - весь кеш ведь сбросится. А мне нужно только одну страницу почистить.
В админке сайта кодер мне сделал поле куда я вставлял полный урл той страницы которую нужно почистить и нажимал кнопку очистки кеша - и кеш этой страницы чистился.
Сейчас нажимаю, он мне пишет типа кеш очищен, но в реальности не чистит.
И по ftp я смотрю - файл кеша этой страницы на месте,не удаляется.
P.S. sendfile on присутствует в конфиге. Но файл то не удаляется
---------- Добавлено 07.02.2019 в 20:58 ----------
Я попробовал вывести на страницах сайта такой код:
$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;
?>
На нужно странице вывелось
Но меня смущает что на всех других страницах выводит точно такой же путь
А на echo parse_url($value); выдает - Array
Хотелось бы починить то что уже работает. Я нашел где лежит кеш нужной для очистки страницы -
Для этих баз нужен geoip2 вот я описывал как его устанавливать /ru/forum/1007844 правда у меня Nginx а у вас Апач.
Ищите по сочетаниям forme, for-me там прилично говна