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

Лак возвращается не на тот сервер

Возникла проблема с Varnish, возвращающим неправильный сервер. У меня есть несколько бэкэндов, прослушивающих порты с 8080 по 8095 на vhosts в Apache. Я настроил свои бэкенды Varnish так:

acl purge {
    "localhost";
    "192.168.0.1";
}

backend default {
    .host = "192.168.0.1";
    .port = "8094";
    .connect_timeout =  20s; #600s;
    .first_byte_timeout = 20s; #600s;
    .between_bytes_timeout = 20s; #600s;
}

backend default_mobile {
    .host = "192.168.0.1";
    .port = "8093";
    .connect_timeout =  20s; #600s;
    .first_byte_timeout = 20s; #600s;
    .between_bytes_timeout = 20s; #600s;
}

backend secondary {
    .host = "192.168.0.1";
    .port = "8082";
    .connect_timeout =  20s; #600s;
    .first_byte_timeout = 20s; #600s;
    .between_bytes_timeout = 20s; #600s;
}

backend secondary_mobile {
    .host = "192.168.0.1";
    .port = "8083";
    .connect_timeout =  20s; #600s;
    .first_byte_timeout = 20s; #600s;
    .between_bytes_timeout = 20s; #600s;
}

В большинстве случаев это работает хорошо, но через некоторое время (несколько часов) мы будем получать отчеты о том, что пользователи видят неправильный сайт по неправильному URL-адресу. Например, они перейдут на www.example.com и получат страницу из бэкэнда secondary_mobile. Это всегда один и тот же бэкэнд, который возвращается неправильно, и URL-адрес в браузере показывает предполагаемый сайт (www.example.com). У нас нет никаких перенаправлений в Apache, поэтому я не уверен, как это запутать. Вот пример того, как я настраиваю бэкенды:

....
if ( req.http.host ~ "example.com$" ) { 
    set req.backend = default;
    set req.http.host = "www.example.com";
} else if ( req.http.host ~ "^(www.)?example2.com$" ) { 
    set req.backend = secondary;
    set req.http.host = "www.example2.com";
} else if ( req.http.host ~ "^(m.)?example2.com$" ) { 
    set req.backend = secondary_mobile;
    set req.http.host = "m.example2.com";
....

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