Ядро Joomla! основные понятия.

Expired cache и плагин «Page cache»

Alexey Samsonov » 12 дек 2018, 02:15

Я тестирую Joomla! 3.8.12 на локальном хосте. И не могу понять принцип работы функции "Очистить устаревший кэш".

Что имеем на входе:
Joomla! 3.8.12 (установлена локально на OSPanel 5.2.2).
Системные настройки — Время жизни кэша: 1 (1 минута).
Системные настройки — Система кэш: Выключена (OFF).
Плагин «Кэширование страниц» — включен.

Файлы кэша исправно формируются в каталоге "cache/page" при первом просмотре любой страницы.
Но не работает функция очистки устаревшего кэша Joomla (кнопка в административной панели Joomla) "Очистить устаревший кэш".
Последовательность действий такая:
  1. Очистил каталог "cache/page"
  2. Походил по 2-3 страницам сайта, в каталоге "cache/page" вижу как создаются файлы кэша
  3. Жду минут 20 (хотя в настройках время жизни кэша вообще 1 минуту поставил)
  4. В административной панели сайта иду в раздел "Удаление устаревшего кэша", жму кнопку "Очистить устаревший кэш", получаю уведомление на экране "Файлы устаревшего кэша были удалены"
  5. Смотрю в каталоге "cache/page": ничего не удаляется вообще!
Как связана функция "Очистить устаревший кэш" и плагин «Кэширование страниц»?
Кто-то может объяснить, это баг Joomla! 3.8.12 или я что-то не допонимаю?
Alexey Samsonov
 
Сообщения: 21
Зарегистрирован: 22 фев 2015, 19:43

Re: Expired cache и плагин «Page cache»

Vova-83 » 12 дек 2018, 13:12

Не могу ответить именно на ваш вопрос по очистке устаревшего кэша, как он работает изнутри. Точнее, суть у него — это удаление кэшированных файлов, возраст которых превышает время жизни кэша. Но почему в вашем случае он не срабатывает, не знаю.
А чем вас не устраивает просто функция «Очистить весь кэш»?
Vova-83
 
Сообщения: 38
Зарегистрирован: 19 ноя 2016, 18:55

Re: Expired cache и плагин «Page cache»

Alexey Samsonov » 17 дек 2018, 19:29

Прошу извинить, что не сразу отвечаю. Был в отъезде, интернет слабый.
Думаю, нужно яснее объяснить суть проблемы. Мне кажется, тут баг какой-то, и угроза безопасности определенная!
Пока изложу то что я имею на следующей конфигурации. Попозже проверю другие версии Joomla.

1-й вариант — «Система кэш» отключена, Плагин «Кэширование страниц» — включен.


  1. Windows 10
  2. Joomla! 3.8.12 (установлена локально на OSPanel 5.2.2, PHP 7.2).
  3. Системные настройки — Время жизни кэша: 1 (1 минута).
  4. Системные настройки — Система кэш: Выключена (OFF).
  5. Плагин «Кэширование страниц» — включен.

Файлы кэша исправно формируются в каталоге "cache/page" при первом просмотре любой страницы.
Но не работает функция очистки устаревшего кэша Joomla (кнопка в административной панели Joomla) "Очистить устаревший кэш".
Последовательность действий такая:
  1. Очистил каталог "cache/page"
  2. Походил по 2-3 страницам сайта, в каталоге "cache/page" вижу как создаются файлы кэша
  3. Жду минут 20 (хотя в настройках время жизни кэша вообще 1 минуту поставил)
  4. В административной панели сайта иду в раздел "Удаление устаревшего кэша", жму кнопку "Очистить устаревший кэш", получаю уведомление на экране "Файлы устаревшего кэша были удалены"
  5. Смотрю в каталоге "cache/page": ничего не удаляется вообще!

2-й вариант — «Система кэш» включена (консервативное кэширование), Плагин «Кэширование страниц» — отключен.


  1. Windows 10
  2. Joomla! 3.8.12 (установлена локально на OSPanel 5.2.2, PHP 7.2).
  3. Системные настройки — Время жизни кэша: 1 (1 минута).
  4. Системные настройки — Система кэш: Включена (Консервативная).
  5. Плагин «Кэширование страниц» — отключен.

Файлы кэша формируются в каталоге "cache/com_content/" при первом просмотре любой страницы.
Опять не работает функция очистки устаревшего кэша Joomla (кнопка в административной панели Joomla) "Очистить устаревший кэш".
Последовательность действий такая:
  1. Очистил каталог "cache/"
  2. Походил по 2-3 страницам сайта, в каталоге "cache/com_content/" вижу как создаются файлы кэша
  3. Жду минуты 3-4 (в настройках время жизни кэша 1 минута )
  4. В административной панели сайта иду в раздел "Удаление устаревшего кэша", жму кнопку "Очистить устаревший кэш", получаю уведомление на экране "Файлы устаревшего кэша были удалены"
  5. Смотрю в каталоге "cache/com_content/": ничего не удаляется вообще!

3-й вариант — «Система кэш» включена (консервативное кэширование), Плагин «Кэширование страниц» — включен.


  1. Windows 10
  2. Joomla! 3.8.12 (установлена локально на OSPanel 5.2.2, PHP 7.2).
  3. Системные настройки — Время жизни кэша: 1 (1 минута).
  4. Системные настройки — Система кэш: Включена (Консервативная).
  5. Плагин «Кэширование страниц» — включен.

Файлы кэша формируются в каталогах "cache/com_content/" и "cache/page" при первом просмотре любой страницы.
Опять не работает функция очистки устаревшего кэша Joomla (кнопка в административной панели Joomla) "Очистить устаревший кэш".
Последовательность действий такая:
  1. Очистил каталог "cache/"
  2. Походил по 2-3 страницам сайта, в каталоге "cache/com_content/" вижу как создаются файлы кэша
  3. Жду минуты 3-4 (в настройках время жизни кэша 1 минута )
  4. В административной панели сайта иду в раздел "Удаление устаревшего кэша", жму кнопку "Очистить устаревший кэш", получаю уведомление на экране "Файлы устаревшего кэша были удалены"
  5. Смотрю в каталоге "cache/com_content/" и и "cache/page": ничего не удаляется вообще!

К сожалению, у меня нет времени изучить код Joomla сейчас, пробовал, но не вижу, за что зацепиться..

Дело в том, что я вижу потенциальную угрозу безопасности сайта/хостинга в виде переполнения каталога "cache"!

Файлы кэша формируются к обращению еще не просмотренных никем страниц, но проблема в том, что страница считается не просмотренной в частности на основе уникальных параметров в query string. И беда в том, что система не анализирует, происходит запрос к реально существующей странице или query string просто рандомная!
Таким образом, любой злонамеренный бот может быстро забить каталог "cache/" запросами вида:
sitе.com/?a=1, sitе.com/?a=2, sitе.com/?a=3 ..... sitе.com/?a=100000000

Почему встал вопрос именно об очистке устаревшего кэша Joomla? Потому что его можно чистить, запустив скрипт в "cli/garbagecron.php". Например, по крону. А вот команды для очистки всего кэша для запуска через cli нет.
Да и понять хочется, в чем проблема.. Может я смысл что такое "Устаревший кэш" в Joomla не догоняю?? Хотя пол-интернета уже перечитал, о нем вообще не много пишут, но везде говориться, что "Устаревший кэш" — это файлы, время создания которых меньше, чем текущее время минус время жизни кэша, вроде всё очевидно.
Пожалуйста, не предлагайте мне тупо чистить весь кэш, эта функция работает нормально, но не о ней разговор.
Меня интересует именно, работа опции "Очистить устаревший кэш"! Как она должна работать?
Alexey Samsonov
 
Сообщения: 21
Зарегистрирован: 22 фев 2015, 19:43


Вернуться в Ядро Joomla!