A/B Test in Varnish, возвращает 200 OK при первой загрузке

Я создаю тестовую группу в Fastly VCL. Вещи, кажется, работают почти правильно.

Тем не менее, при загрузке первой страницы (последующие запросы работают как положено) я получаю сообщение об ошибке:

Error 200 OK

OK

Guru Mediation:

Details: cache-xx xxx xxx

Varnish cache server

Любые идеи, как заставить загрузку первой страницы работать правильно?

VCL в Fastly выглядит следующим образом:

  sub vcl_recv {
  // check if cookie exists, otherwise lock out of test
  if (req.http.cookie ~ "test_group=true") {
      // set Vary for test_group
      set req.http.X-Test-Group = "true";
...}

sub vcl_fetch {
if (beresp.http.Vary) {
  set beresp.http.Vary = beresp.http.Vary ", X-Test-Group";
} else {
  set beresp.http.Vary = "X-Test-Group";
}

...}

sub vcl_deliver {

// if no cookie set, maybe set one
if ( !(req.http.cookie ~ "test_group") ) {
    if (randombool(1, 2)) {
        // set test_group == true
        set resp.http.Set-Cookie = "test_group=true;expires="+ time.add(now,30d) +"; path=/";
        // send request through again with test_group cookie
        return(restart);
    } else {
        // set test_group == false
        set resp.http.Set-Cookie = "test_group=false;expires="+ time.add(now,30d) +"; path=/";
        // send request through again with test_group cookie
        return(restart);
    }
}
...}

Я также попробовал вместо этого поток, описанный в блоге Фастли: A / B-тестирование на грани

Однако ошибка, по-видимому, ограничена этим возвратом (перезапуск):

sub vcl_deliver {
 if (!req.http.Cookie:test_group) {
   add resp.http.Set-Cookie = "test_group=" req.http.X-Test-Group ";expires="+ time.add(now,30d) +"; path=/";
   return(restart);
}...

Если я возьму возврат (перезапуск), ничего не произойдет, и cookie никогда не будет установлен. Если я принудительно перезапущу, cookie будет установлен, но первый ответ получит ошибку 200

Ни один из этих методов, похоже, ничего не делает и никогда не устанавливает cookie:

1.

sub vcl_deliver {
  add resp.http.Set-Cookie = "test_group=" req.http.X-Test-Group ";expires="+ time.add(now,30d) +"; path=/";
...

2.

sub vcl_deliver {
  if (!req.http.Cookie:test_group) {
    add resp.http.Set-Cookie = "test_group=" req.http.X-Test-Group ";expires="+ time.add(now,30d) +"; path=/";
  }...

0 ответов

Другие вопросы по тегам