여러 소스를 위한 광택 캐시/프록시

여러 소스를 위한 광택 캐시/프록시

우리는 Varnish 3.0.3을 사용하고 있습니다.

웹사이트는 두 도메인의 이미지를 제공합니다. 사이트 도메인과 동일한 URL을 가진 이미지는 성공적으로 캐시되고 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;
}

관련 정보