Техническая информация о полностраничном кэшировании¶
Важно
Этот модуль доступен начиная с “Multi-Vendor(CS-Cart для маркетплейсов) Бизнес” или “CS-Cart для интернет-магазинов Unlim”
О модуле и Varnish¶
Ускорение сайта — это модуль, который обеспечивает поддержку полностраничного кэширования для CS-Cart. Полностраничное кэширование снижает нагрузку на сервер и ускоряет работу сайта.
- Без кэширования странице необходимо запускать свой код и получать данные из базы данных при каждой загрузке.
- С кэшированием страница генерируется один раз. Затем она может загружаться из кэша, не тратя время и ресурсы сервера на выполнение кода или доступ к базе данных.
Этот модуль работает в сочетании с Varnish Cache — бесплатным программным обеспечением, которое служит обратным прокси-сервером кэширования. Узнайте больше о Varnish здесь:
Как работает кэширование для разных пользователей¶
Кэшированные данные можно использовать для обработки запросов схожих типов. Например, посетитель и покупатель могут видеть одну и ту же страницу по-разному. Существует 3 типа запросов:
От пользователей без сессии — запросы от посетителей, которые просто просматривают контент, но не взаимодействуют с магазином. Например, они не добавляли товары в корзину, не оформляли заказ, не входили в систему и т. д.
Кэширование наиболее эффективно для таких запросов, поскольку страницы будут полностью возвращены из кэша, без участия внутреннего сервера.
От пользователей с сессией — запросы от посетителей, которые каким-либо образом взаимодействуют с магазином. Кэширование все равно будет использоваться для таких случаев, но зависимые от сессии блоки (например, корзина) будут загружаться без кэша через механизм ESI. Каждый блок, использующий ESI, будет отправлять запрос на внутренний сервер.
От пользователей, которые вошли в систему — запросы от этих пользователей не будут включать кэширование. Это связано с тем, что зарегистрированные пользователи могут видеть разный контент (например, разные цены на продукты в зависимости от группы пользователей).
Примечание
Полностраничное кэширование работает только на витрине (не в панели администратора) и только для определенного белого списка страниц. Чтобы добавить больше страниц в этот список, расширьте схему full_page_cache/varnish
.
Как модуль влияет на сессии¶
Когда вы активируете модуль, происходят следующие изменения:
- Автоматический запуск сессий отключается. Сессия начнется только после запроса POST или при наличии cookie сессии.
- К имени cookie сессии добавляется префикс
fpc_
. Это завершит сессии пользователей, которые уже вошли в систему.
Процесс кэширования¶
Когда происходит кэширование¶
По умолчанию Varnish не кэширует контент, пока внутренний сервер не даст ему на это указание. Внутренний сервер взаимодействует с Varnish, отправляя заголовки HTTP вместе с контентом:
X-Cache-TTL
— срок службы кэша страницы. Если этот заголовок отсутствует или равен 0, контент не будет кэшироваться.X-Cache-Tags
— зависимости кэша страницы; список тегов, связанных с кэшем страницы.X-Do-ESI
— использовать или нет ESI. Если значение этого заголовка равно1
, то Varnish будет использовать ESI.
Когда случается инвалидация кэша¶
Аннулирование кэша происходит:
- Автоматически, когда истекает время жизни (TTL).
- По запросу, когда кэш аннулируется тегами.
Каждая кэшированная страница связана со списком тегов. Как правило, это список таблиц базы данных, используемых для генерации страницы. Если данные хотя бы в одной из этих таблиц изменятся, кэш будет аннулирован.
Инвалидация происходит, когда внутренний сервер отправляет HTTP-запрос на сервер Varnish с методом BAN и списком тегов, которые должны быть аннулированы, в заголовке X-Cache-Tags
.
Важно
Varnish будет принимать запросы на инвалидацию только с IP-адресов, указанных в белом списке файла default.vcl.
Настройки TTL (в разработке)¶
В итоге, модуль позволит вам устанавливать разное TTL (время жизни) для разных типов страниц. Планируются следующие настройки:
- TTL кэша по умолчанию — будет применять один и тот же TTL ко всем страницам, за исключением тех, у которых есть свой TTL.
- TTL кэша домашней страницы.
- TTL кэша страницы категории.
- TTL кэша страницы продукта.
Возможные ошибки¶
- Автоматическое определение языка не работает. Это происходит потому, что браузеры передают предпочтительные языки пользователя в заголовке
Accept-Language
, а он может иметь множество возможных вариантов. Учет этого заголовка приведет к взрывному росту кэша и снижению его эффективности. - При открытии URL-адреса, в котором путь не заканчивается косой чертой, вы перенаправляетесь на порт 8080 и получаете следующее сообщение об ошибке: «Для этого домена не определены витрины».
Причина: По умолчанию, когда URL-адрес выглядит как http://example.com/path, веб-сервер Apache возвращает перенаправление 301 на http://example.com/path/ (с косой чертой в конце).
При построении URL назначения перенаправления Apache учитывает настройки
UseCanonicalName
иUseCanonicalPhysicalPort
:
- Если они установлены на On, Apache будет использовать Hostname и Port, указанные в настройках виртуального хоста.
- Если они установлены на Off, Apache будет брать Hostname и Port из HTTP-заголовков, отправленных браузером.
В нашем случае для виртуального хоста указан порт
8080
, а клиенты обращаются к порту80
. При построении URL назначения перенаправления Apache использует настройки виртуального хоста.Решение: Установите
UseCanonicalName
иUseCanonicalPhysicalPort
на Off в настройках виртуального хоста.