Т.к. Symfony2 использует стандартные HTTP кэш заголовки, Symfony2 Reverse Proxy может легко изменить с любым другим обратным прокси. Varnish мощный, с открытым исходным кодом, HTTP акселератор способный закэшировать контект быстро и включающий поддержку Edge Side Includes.

Конфигурация

Как видно выше, Symfony2 достаточно умен чтобы определить говорит ли она с обратным прокси, который понимает ESI или нет. Это работает из коробки если вы используете Symfony2 обрытный прокси, но если вам надо особенная конфигурация то вам поможет Varnish. Благодаря тому, что Symfony2 полагается на еще один стандарт, написанный Akamai ( Edge Architecture ), так что советы по конфигурации в этой главе могут быть полезны даже если вы не используете Symfony2.

[su_spoiler open=”yes” icon=”” class=”my-spoiler note” title=””]

Varnish поддерживает только src артибут для ESI тэгов ( onerror и alt игнорируются ).

[/su_spoiler]

Во-первых, настройка Varnish так, чтобы объявить поддержку ESI, путем добавления заголовка Surrogate-Capability чтобы запросы направленный в поддержку приложения:

Затем, оптимизируем Varnish чтобы он только парсил Ответ контента если по крайней мере один тег ESI по проверке Surrogate-Control что Symfony2 добавляет автоматически:

[su_spoiler open=”yes” icon=”” class=”my-spoiler caution” title=””]

Компрессия с ESI не поддерживается в Varnish до версии 3.0 ( читай GZIP and Varnish ). Если вы не используете Varnish 3.0, поставьте веб-сервер перед Varnish для выполнения сжатия.

[/su_spoiler]

Сброс кэша

Вы никогда не должны сбрасывать кэш, т.к. сброс уже учтен изначально в HTTP кэш модели (смотри Cache Invalidation).

Пока, Varnish может быть сконфигурирован спечиальным методом HTTP PURGE который сбрасывает кэш для данного ресурса:

[su_spoiler open=”yes” icon=”” class=”my-spoiler caution” title=””]

Вы должны защитить метод HTTP PURGE как-нибудь, чтобы исключить чтобы любой пользователь чистил ваш кэш. Вы можете сделать это установиви доступ:

[/su_spoiler]

Маршрутаризация и заголовок X-FORWARDER

Чтобы быть уверенным, что Symfony Router генерирует провельные URL вместе с Varnich, заголовок ‘X-Forwarded‘ должен быть настроен правильно, так что бы Symfony знала оригинальный номер порта запроса. Как это сделать зависит от выших настроек. Как простой пример, Varnish и ваш веб-сервер на одной машине и Varnish слушает один порт ( например 80 ) и Apache другой ( например 8080 ). В этой ситуации, в Varnish должен быть добавлен заголовок X-Forwarded-Port, так чтобы приложения Symfony знало, что оригинальный порт 80, а не 8080.

Если этот заголовок не задан правильно, Symfony может добавить 8080 когда генерирует URL:

[su_spoiler open=”yes” icon=”” class=”my-spoiler note” title=””]

Не забудь настроить framework.trusted_proxies в Symfony, так чтобы Varnish увидел правильный прокси и используемые заголовки X-Forwarded-

[/su_spoiler]