Dram

Рейтинг
1115
Регистрация
28.06.2008
Skom:
Попробуйте поменять в функции
$filename = md5('GET|site.ru|'.$data['path']);
на
$filename = md5('GET|'.$data['host'].'|'.$data['path']);

Хеш оожидаемо один и тот же получается

---------- Добавлено 08.02.2019 в 12:32 ----------

Я делал еще проще - в конфиге Nginx прописал

fastcgi_cache_key "$request_uri";

в функции

$filename = md5($data['path']);

проверил - хеш получается одинаковый.

Теперь проверяю удаление - не удаляет зараза!

Начинаю смотреть ,а Nginx реально создает файл кеша по пути

/var/cache/nginx/site/c/04/d840acd78808e4dfb8c50bc20eb1c04c

А echo $fileput; мне выводит

/var/cache/nginx/site/2/90/8b9e11c9867054d31498a914b3fe3902

Вероятно проблема тут - 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 ----------

Попробовал еще так

<?php
$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 ----------

Так же решил посмотреть что выводит

<?php
echo $_SERVER['REQUEST_METHOD'].$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
?>

получил ожидаемое

GETsite.ru/test

---------- Добавлено 08.02.2019 в 10:02 ----------

Затем решил сравнить хеши

<?php
$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, вы правы!

Я вывел такой код:

<?php
$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;
?>

мне вывело (на тестовой странице)

/var/cache/nginx/site/d/ba/356a0f4b9422cf44543b8e614b588bad

а ее кеш лежит тут

/var/cache/nginx/site/c/04/d840acd78808e4dfb8c50bc20eb1c04c

Такое впечатление что 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 есть такой кусок

if(!empty($data['images']))
{
$ids = array();
foreach($data['images'] as $index => $value)
{
$ids[] = $index;
}

Если сделать поиск по grep -irl '$value' /var/www/site/administrator/components то $value встречается чуть ли не во всех компонентах

Skom, на код

<?php
$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 ----------

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

<?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

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

/var/cache/nginx/site/c/04/d840acd78808e4dfb8c50bc20eb1c04c

Для этих баз нужен geoip2 вот я описывал как его устанавливать /ru/forum/1007844 правда у меня Nginx а у вас Апач.

Ищите по сочетаниям forme, for-me там прилично говна

В России я поверю во все что угодно, ибо сам много раз был свидетелем в принципе невозможного (в нормальных странах) треша.

Всего: 6928