Вы хотите, чтобы ваш сервер возвращал разные ответы в зависимости от используемого устройства / браузера. Это означает, что ваши страницы «меняются» в зависимости от используемого http-заголовка запроса User-Agent, и теоретически вы должны указать любому http-прокси / кешу между ними использовать кэшированную версию, только если строка User-Agent совпадает, добавив http заголовок ответа:
Vary: User-Agent
Однако, поскольку браузеры, такие как Internet Explorer (в отличие от Chrome), используют много слегка отличающихся заголовков User-Agent, это полностью убьет ваш коэффициент попадания в кэш. Вам нужен более умный кэш, чтобы понять, что Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)
для ваших целей равно Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.0; Trident/4.0; InfoPath.1; SV1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 3.0.04506.30)
или любой другой строке агента пользователя, используемой в браузере на рабочем столе.
Существует два варианта решения этой проблемы с помощью Varnish:
1: Мобильный пользовательский агент обнаруживает себя в логике лаков точно так же, как это делают мобильные инструменты. E.g.:
vcl_recv {
if (req.http.user-agent ~ 'ipad|ipod|iphone|android|mini opera|blackberry|up.browser|up.link|mmp|symbian|smartphone|midp|wap|vodafone|o2|pocket|kindle|mobile|pda|psp|treo') {
hash += "mobile"
}
}
2: Или всегда устанавливайте cookie сеанса mobile=true
или mobile=false
после того, как вы увидели первый запрос, и обслуживайте кэшированные страницы только для запросов с этим cookie.
И, немного погуглив, прочитайте: http://fangel.github.com/mobile-detection-varnish-drupal/