Статьи

Edge Side включает лак за 10 минут

Varnish — это инструмент, созданный для промежуточного сервера в цепочке HTTP, а не для исходного, как Apache или IIS. Вы можете передать в Varnish кэширование, ведение журнала, архивирование и другие фильтры, поскольку они не являются основной функцией HTTP-сервера, такого как Apache.

Сегодня мы увидим, как работать с включениями Edge Side в Varnish, как способ создания динамических страниц из независимо сгенерированных и кэшированных фрагментов ; мы не столкнемся с ведением журнала или другими функциями. Если вы знакомы с PHP, ESI является (почти) стандартом для выполнения операторов, похожих на include (), на сервере переднего плана, таком как Varnish; прокси может не только собирать страницы, но и кэшировать их в соответствии с различными политиками: определенное время, для одного пользователя и т. д.

Тийс Ферин и Алессандро Надалин впервые познакомили меня с Varnish и ESI соответственно. Я рекомендую вам рассмотреть их блоги и разговоры как дополнительные источники по этим темам.

Установка

Версией Varnish по умолчанию в Ubuntu 11.04 является версия 2.1, и, очевидно, она не очень сильно поддерживает ESI.

Установка через пакеты означает добавление открытого ключа и хранилища в список источников программного обеспечения, а также установку пакета лака с помощью apt-get или эквивалентной команды. Вы можете установить версию 3.0.0 через пакеты, но только в Ubuntu LTS (10.04).

В этих случаях всегда работает установка из источников . На связанной странице будет отображен список зависимостей пакета и приведена последовательность из 3-4 команд для плавной компиляции лака. Я использовал checkinstall вместо make install, чтобы получить бинарный пакет, который я могу использовать позже:

$ sudo checkinstall -D --install=no --fstrans=no [email protected] --reset-uids=yes --nodoc --pkgname=varnish --pkgversion=3.0.0 --pkgrelease=201108231000 --arch=i386

После установки с помощью dpkg убедитесь, что varnishd доступен и имеет правильную версию:

[10:18:17][giorgio@Desmond:~]$ varnishd -V
varnishd (varnish-3.0.0 revision 3bd5997)
Copyright (c) 2006 Verdens Gang AS
Copyright (c) 2006-2011 Varnish Software AS

Лак нуждается в минимальной конфигурации: сервер, на который нужно указать. Для наших тестов вы можете отредактировать /etc/varnish/default.vcl и проверить (или добавить) следующее:

backend default {
    .host = "127.0.0.1";
    .port = "80";
}

Вы можете выполнить ps -A | grep varnishd в любое время, чтобы проверить, используется ли лак.

выполнение

[09:55:18][giorgio@Desmond:~]$ sudo varnishd -f /etc/varnish/default.vcl -s malloc,1G -T 127.0.0.1:2000 -a 0.0.0.0:8080
storage_malloc: max size 1024 MB.
  • 1 гигабайт памяти выделяется для хранения фрагментов в оперативной памяти.
  • Административный интерфейс ответит на порт 2000 и будет доступен только с localhost.
  • http: // localhost: 8080 / — это незащищенный HTTP-сервер, который будет указывать на http: // localhost: 80, как определено в конфигурации.

Посмотрите на
man varnishd для получения дополнительной информации и на
man vcl для дополнительных пояснений по языку конфигурации.

Немного ESI

ESI — это методика использования кеша HTTP и в то же время создание динамических страниц.

Проблема с сегодняшними страницами в том, что они очень динамичны: некоторые разделы меняются очень часто или в зависимости от текущего пользователя ( Добро пожаловать, Джон Доу или временная шкала текущих сообщений); некоторые разделы не меняются в течение нескольких дней (панель навигации и структура макета); некоторые разделы изменяются в ответ на внешние события (список входящих сообщений только при поступлении нового сообщения).

Было бы идеально установить разные конфигурации кэширования для всех фрагментов страницы. Но реализация этой стратегии в коде приложения подвержена ошибкам и означает переизобретение колеса. Чтобы использовать HTTP-кеш, вам придется загружать с Ajax каждый фрагмент страницы, даже один абзац.

С помощью ESI ваше приложение производит только фрагменты , и позволяет разработчику спецификации Edge Side Include, например Varnish, собрать все вместе .

пример

HTML-страница (очень статичная):

<p>Varnish will work on this page: <esi:include src="/date.php" />.</p>

Страница PHP (действительно динамичная, может измениться в любое время):

<?php
echo date('Y-m-d');

Конфигурация лака добавить:

sub vcl_fetch {
    set beresp.do_esi = true;
}

если вы хотите что-то более точное:

sub vcl_fetch {
    if (req.url == "/index.html") {
        set beresp.do_esi = true;
    }
}

Вы можете добавить настройки для TTL и другие параметры для разных частей.
Результат аккуратный:

<p>Varnish will work on this page: 2011-08-23.</p>

Никаких признаков лаковых вмешательств, и абсолютно прозрачно для клиента. И иногда вы также можете выбросить Zend_Layout и подобные компоненты для сборки HTML на стороне PHP.