Назад | Перейти на главную страницу

Лак с несколькими узлами / коробками

Может ли Varnish перенаправить трафик на разные IP-адреса на основе URL-адреса?

Например, возможна следующая установка (и если да, то как будет выглядеть VCL):

  1. * .example.com указывает на IP-адрес Varnish
  2. Когда делается запрос foo.example.com, varnish проверяет кеш и отправляет запрос на Сервер1IP-адрес пользователя в кэше отсутствует.
  3. Когда делается запрос bar.example.com, varnish проверяет кеш и отправляет запрос на Сервер2IP-адрес пользователя в кэше отсутствует.

foo и bar (по большей части) совершенно не связанные сайты. Они используют движок, но имеют разный контент и свою собственную отдельную базу данных. Поскольку раньше за это не взимались штрафы (кроме стоимости), мы разделили их на два отдельных блока, чтобы тонна трафика фу не окажет негативного влияния на посетителей, просматривающих бар.

Я мог бы настроить два экземпляра varnish и сделать так, чтобы один из них обслуживал статический контент foo, а другой - bar, но, поскольку кажется, что запуск Varnish не связан с большими расходами, я думаю (возможно, ошибочно), что это имело бы больше смысла использовать один сервер Varnish, который перенаправляет трафик в соответствующий ящик при промахе кеша.

Да, это так. Попробуйте сначала определить в default.vcl свои бэкенды:

backend foo {
  .host = "1.2.3.4"; # IP of foo backend
  .port = "80";
}

backend bar {
  .host = "1.2.3.6"; # IP of bar backend
  .port = "80";
}

и использовать в коде vcl_recv () аналогично:

 if (req.http.host ~ "foo.example.com") {
        set req.backend = foo;
 }else{
        set req.backend = bar;
 }

Есть хорошая документация (достаточно хороша для таких примеров;)) по http://www.varnish-cache.org/docs/2.1/ и вы можете сделать гораздо больше с VCL. Это действительно круто.