Varnish без Pressflow - как?

Главные вкладки

Аватар пользователя Zereff Zereff 5 марта 2013 в 13:48

Всем доброго дня! Столкнулся с проблемой, когда нужно установить Varnish на drupal 6. Я читал, что его нужно устанавливать с pressflow, но уже есть готовый сайт на друпале - т.к. сносить сайт и заново строить из за pressflow сейчас не вижу абсолютно никакого смысла. Другая проблема. На сервере varnish установлен, но к модулю не могу подключить - пишет - The Varnish control terminal is not responding at 127.0.0.1 on port 8080. Не могу подключить, т.к. pressflow не стоит или другая причина? Необходим взгляд, кто уже работал с varnish! Где копать?

Комментарии

Аватар пользователя Ромка Ромка 5 марта 2013 в 16:13

Сносить Друпал, чтобы поставить Прессфлоу не нужно. Можно заменить исходники Друпала исходниками Прессфлоу и сайт должен продолжать работать корректно. Могут быть проблемы с некоторыми модулями, которые используют сессии для анонимов, но они все устраняемы.

Можно использовать Варниш и без Прессфлоу, только тогда надо будет найти свой способ на уровне Варниша отличать авторизованного юзера от неавторизованного. В случае с Прсессфлоу это можно сделать по наличию/отсутствию куки SESS* у юзера (Прессфлоу не создает сессии анонимам). Вы можете, например, написать свой модуль, который будет авторизованным юзерам класть спец куку и в конфиге Варниша цепляться за эту куку. Вот тут: http://romka.eu/blog/keshirovanie-na-drupal-sayte-sravnenie-effektivnost... я подробнее об этом писал.

Аватар пользователя Zereff Zereff 5 марта 2013 в 21:04

Читал ваши статьи про кэширование drupal 6 при помощи varnish + pressflow; drupal, varnish и pressflow и т.д. Я кстати вам оставил последний коммент - вычитал в книге по "разработке управления сайтом", что можно установить и boost и varnish одновременно. Мне сейчас главное настроить varnish + drupal 6. Написание модулей - это интересный вариант, но на данный момент - это нужно сделать быстро и как можно качественней.
Т.е. вы хотите сказать, что varnish будет полноценно работать(или вообще работать), если лишить анонимных пользователей создавать сессии? Если это так, то я видел модуль, который исключает сессии для анонимусов http://drupal.org/project/no_anon - но он мне кажется сомнительным, т.к. еще находится в dev версии(пока на сайт не рискую ставить) Буду еще смотреть. Если есть еще у кого-то идеи, то можно решить для многих этот вопрос, которые не оптимизированы в случае с обычной сборкой друпала, но я использую сборку commons-6.22.

Аватар пользователя Ромка Ромка 6 марта 2013 в 12:50

Варниш кеширует данные согласно своему конфигу, то есть настроить его можно как угодно, при желании он может быть использован и для кеширования для авторизованных юзеров, просто для анонимов это сделать гораздо проще, так как всем анонимам можно отдавать одну и ту же закешированную страницу, а у зарегистрированных пользователей кеш может быть разным.

Для того чтобы Варниш начал кешировать данные для анонимов его нужно научить отличать анонимного юзера от авторизованного. В случае с Прессфлоу это сделать легко, так как отличием анонима от не анонима является кука SESS*. В случае если используется чистый Друпал, нужно искать другой способ отличать анонима от не анонима. Резать сессии не обязательно, можно написать небольшой модуль, который на hook_user на действие login будет ставить свою спец куку, а на действие logout удалять ее. Тогда в этом вот примере конфига в секции

 if (req.http.Cookie) {
    set req.http.Cookie = regsub(req.http.Cookie, "^(.*)$", "; \1");
    set req.http.Cookie = regsuball(req.http.Cookie, "; +", ";");
    set req.http.Cookie = regsuball(req.http.Cookie, ";(SESS[a-z0-9]|xyz+)=", "; \1=");
    set req.http.Cookie = regsuball(req.http.Cookie, ";[^ ][^;]*", "");
    set req.http.Cookie = regsuball(req.http.Cookie, "^[; ]+|[; ]+$", "");
 
    if (req.http.Cookie == "") {
      unset req.http.Cookie;
    }
    else {
      return (pass);
    }
  }

Нужно будет заменить "SESS[a-z0-9]" на имя вашей куки.

Аватар пользователя Zereff Zereff 6 марта 2013 в 13:38

Ромка wrote:

Резать сессии не обязательно, можно написать небольшой модуль, который на hook_user на действие login будет ставить свою спец куку, а на действие logout удалять ее.

Странно, что такой модуль еще не придумали - ведь varnish насколько я знаю очень хорош в своем роде.
Ромка wrote:

В секции нужно будет заменить "SESS[a-z0-9]" на имя вашей куки.

Но это получается не та же оптимизация, что и в случае с pressflow. Что если с pressflow скопировать на свой сайт куку SESS и как-то попытаться оптимизировать. Стоит ли пытаться двигаться в этом направлении или же модуль более надежнее вариант?

Аватар пользователя Ромка Ромка 6 марта 2013 в 14:11

Quote:
Что если с pressflow скопировать на свой сайт куку SESS и как-то попытаться оптимизировать.

Не вижу смысла что-то отдельное вытаскивать из Прессфлоу. Он имеет много оптимизаций, помимо интеграции с Варнишем, посмотреть их можно тут: https://pressflow.atlassian.net/wiki/display/PF/Comparison+-+Pressflow+v.... И правильнее или решиться перейти на него, или поступить как я предложил в комментарии выше: написать свой модуль для того чтобы по кукам отличать анонимов от авторизованных юзеров. Правильнее это, как минимум, потому, что код в Прессфлоу, который отвечает за сессии находится в ядре и если вы что-то перенесете из ядра Прессфлоу в ядро Друпала, то у вас в итоге получится и не Прессфлоу, и не Друпал и полученный гибрид вам придется поддерживать самостоятельно, то есть с выходом нового ядра Друпала вам на него нужно будет накладывать свои патчи. В случае со своим самописным модулем — обновление ядра Друпала на повлечет за собой переписывание кода этого модуля.