Форум OlegON > Компьютеры и Программное обеспечение > Сеть > Создание сайтов и поисковая оптимизация (SEO)

VBulletin. Кеширование страниц для гостей. : Создание сайтов и поисковая оптимизация (SEO)

26.04.2024 18:05


16.09.2014 08:03
OlegON
 
Некоторое время разбирался с кешированием 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");
}
16.09.2014 08:06
OlegON
 
Проверить работу этого механизма можно с помощью curl

Код:
curl -I https://olegon.ru

HTTP/1.1 200 OK
Server: nginx
Date: Tue, 16 Sep 2014 04:05:11 GMT
Content-Type: text/html; charset=windows-1251
Connection: keep-alive
Vary: Accept-Encoding
Cache-Control: private; max-age=0
Pragma: private
X-UA-Compatible: IE=7
Last-Modified: Tue, 16 Sep 2014 04:05:11 GMT

curl -I https://olegon.ru/showthread.php?t=185800

HTTP/1.1 200 OK
Server: nginx
Date: Tue, 16 Sep 2014 04:05:24 GMT
Content-Type: text/html; charset=windows-1251
Connection: keep-alive
Vary: Accept-Encoding
Pragma: public
Cache-Control: public; max-age=3600
X-UA-Compatible: IE=7
видно, что в первом случае страничка не кешируется, во втором - на час.
Часовой пояс GMT +3, время: 18:05.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.