多源的 Varnish 缓存/代理

多源的 Varnish 缓存/代理

我们正在使用 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;
}

相关内容