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

HAProxy / Varnish: перенаправление процента трафика

Я пытаюсь измерить отдельные статистические данные для двух разных версий веб-страницы. Поэтому мне нужно перенаправить определенный процент моего веб-трафика на страницу, отличную от запрошенной (т.е. 20% запросов для page_1 переходят на page_1.1).
Мне не кажется, что Varnish может изначально подсчитывать трафик или запросы.
Я думаю, что я мог бы сделать так, чтобы серверная часть Apache подсчитывала запросы, вставляла настраиваемый заголовок, а затем Varnish отправляла перезапуск клиенту, если ответ серверной части содержит этот определенный заголовок.

Есть идеи или предложения?

Привет,
Джереми

РЕДАКТИРОВАТЬ: я забыл упомянуть, что перед Varnish есть HAProxy, поэтому я подумал, что еще один хороший способ сделать это может быть:

На HAProxy:
подсчитывать запросы для page1
если количество> 80 вставьте собственный заголовок
если count = 100 сбросить счетчик

На лаке
если в запросе присутствует настраиваемый заголовок, перезапустите клиента с помощью page1-> page1.1 rewrite

Не знаю, как это сделать с помощью ACL, gpc0 и stick-tables. Я изучаю решение :-)

Как всегда, идеи или предложения более чем приветствуются

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

Например, если вы настроили 4 серверных модуля, указывающих на старую версию вашего сайта / страницы и 1 на новую версию, вот так ..

backend old1 {
  .host = "old.example.com";
  .probe = { .url = "/"; .interval = 5s; .timeout = 1 s; .window = 5; .threshold = 3; }
}
backend old2 {
  .host = "old.example.com";
  .probe = { .url = "/"; .interval = 5s; .timeout = 1 s; .window = 5; .threshold = 3; }
}
backend old3 {
  .host = "old.example.com";
  .probe = { .url = "/"; .interval = 5s; .timeout = 1 s; .window = 5; .threshold = 3; }
}
backend old4 {
  .host = "old.example.com";
  .probe = { .url = "/"; .interval = 5s; .timeout = 1 s; .window = 5; .threshold = 3; }
}
backend new {
  .host = "new.example.com";
  .probe = { .url = "/"; .interval = 5s; .timeout = 1 s; .window = 5; .threshold = 3; }
}

А потом был режиссер, который перебирал их ...

director blah round-robin {
  { .backend = old1; }
  { .backend = old2; }
  { .backend = old3; }
  { .backend = old4; }
  { .backend = new; }
}

Версия сайта new.example.com получит 20% трафика.

Это своего рода хак (вполне может быть лучшее решение), но я считаю, что это сработает.