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.