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=/";
}...