Некоторое время разбирался с кешированием VBulletin. К сожалению, разработчики не позаботились о выставлении правильных заголовков, а, возможно, что версия слишком древняя, но, факт, в штатном коде добиться кеширования PHP-страниц проблематично.
Сначала я пытался мучить nginx, привязываясь к кукам и прочему, но в итоге все это выкинул, поскольку нет смысла перебивать заголовки, выставляемые софтом на этой же машине.
Варианты, которые я приводил в теме про Varnish, к сожалению, неработоспособные. В том числе и для самого Varnish, если он соблюдает общепринятые стандарты для кеша. Но мне дополнительный кеш не нужен, поскольку неплохо справляется nginx.
Нижеприведенный код изменяет генерируемые странички таким образом, чтобы гости (предполагается, что это пользователи без POST и печенек) получали страничку с заголовком кеширования на час. Зарегистрированные, как и полагается, в кеше не нуждаются. Само собой картинки и прочую статику вы должны закешировать в веб-сервере самостоятельно.
В init.php находим определение $show['search_engine'] и меняем его, заодно вставляя ниже условие.
Код:
$show['search_engine'] = ($vbulletin->superglobal_size['_COOKIE'] == 0 AND $vbulletin->superglobal_size['_POST'] == 0);
if ($show['search_engine'])
{
define('SKIP_SESSIONCREATE', 1);
define('NOCOOKIES', 1);
}
В functions.php находим выставление Pragma и меняем блок на блок с условием. Главную страницу не кешируем никому, поскольку с нее заходит большинство и в итоге после авторизации получают гостевую.
Код:
if (!defined('SKIP_SESSIONCREATE') OR THIS_SCRIPT == 'index'){
@header("Cache-Control: private; max-age=0");
@header("Pragma: private");
}
else
{
@header("Cache-Control: public; max-age=3600");
@header("Pragma: public");
}