Мы используем Varnish 3.0.3.
Веб-сайт обслуживает изображения с двух доменов. Изображения, имеющие тот же URL, что и домен сайта, успешно кэшируются и обслуживаются через Varnish. Изображения, поступающие с другого домена, игнорируются. Мы хотели бы, чтобы все изображения доставлялись через Varnish независимо от того, откуда они поступают.
Я попробовал два подхода. Это две очень простые конфигурации Varnish. Эти две конфигурации работают, но изображения со второго домена игнорируются Varnish. Когда я наблюдаю за активностью браузера, он делает запрос напрямую на второй домен для этих изображений вместо того, чтобы быть доставленными Varnish.
В бэкэнде есть все изображения для обоих доменов. Веб-сайт просто закодирован для извлечения изображений с двух разных доменов. Я не могу изменить код веб-сайта, чтобы использовать один домен.
Похожий сценарий был бы, если бы наш веб-сайт извлекал изображения из нашей учетной записи Flickr или извлекал изображения из CDN. Можно ли было бы кэшировать Varnish и доставлять эти изображения? Я понимаю, что мы бы указали другой бэкэнд, но в моем тестировании я не могу получить ничего, кроме основного домена, который будет доставлен Varnish.
Цель этого — служить в качестве пограничного местоположения региона. Сервер Varnish должен обслуживать весь контент вместо того, чтобы посетитель извлекал контент из разных источников/доменов.
1.
backend default {
.host = "192.168.1.1";
.port = "http";
}
sub vcl_recv {
if (req.url ~ "\.(gif|jpg|jpeg|png)$") {
unset req.http.cookie;
unset req.http.Accept-Encoding;
unset req.http.Vary;
set req.backend = default;
return(lookup);
}
}
sub vcl_fetch {
set beresp.ttl = 24h;
set beresp.grace = 23h;
}
2.
backend default {
.host = "192.168.1.1";
.port = "http";
}
sub vcl_recv {
#Primary domain of site
if (req.http.host == "www.domain.com") {
set req.backend = default;
return (lookup);
#Domain where images are stored
} elsif (req.http.host == "www.domain2.com") {
set req.backend = default;
return (lookup);
}
}
sub vcl_fetch {
set beresp.ttl = 24h;
set beresp.grace = 23h;
}