캐시에 닿지 않는 바니시로의 프록시 패스

캐시에 닿지 않는 바니시로의 프록시 패스

내 웹 서버에는 제3자가 호스팅하는 웹사이트(blog.company.com/blog)를 캐시하려는 광택 인스턴스가 있습니다. 사이트의 나머지 부분은 로컬로 호스팅되므로 이에 대한 프록시패스가 있고 브라우저가 이를 우리 웹사이트(company.com/blog)의 일부인 것처럼 가장하도록 하고 싶습니다.

(/etc/httpd/conf.d/proxy.conf) ProxyTimeout 300

# Blog
ProxyPass /blog http://localhost:8000
ProxyPassReverse /blog http://localhost:8000

그리고 blog.sugarsync.com을 가리키는 광택제 백엔드를 가지고 있습니다:

backend default {
  .host = "70.40.204.127";
  .port = "80";
}

페이지는 확인되지만 페이지는 기본적으로 blog.company.com/blog로 리디렉션되고 캐시에 도달하지 않습니다. varnishlog는 GET 요청을 수신하는 "pass" 기능을 표시합니다. 사용자 정의 백엔드 외부의 /etc/varnish/default.vcl에 있는 모든 기본 동작을 사용하고 있으므로 전달하면 안 되기 때문에 이상합니다.

   11 SessionOpen  c 127.0.0.1 46485 0.0.0.0:8000
   11 ReqStart     c 127.0.0.1 46485 394102336
   11 RxRequest    c GET
   11 RxURL        c /
   11 RxProtocol   c HTTP/1.1
   11 RxHeader     c Host: localhost:8000
   11 RxHeader     c User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4
   11 RxHeader     c Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
   11 RxHeader     c Accept-Encoding: gzip,deflate,sdch
   11 RxHeader     c Accept-Language: en-US,en;q=0.8
   11 RxHeader     c Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
   11 RxHeader     c Cookie: __utmx=74837904.GQgj_x3FQCSgKU8YgJ937g$30088162-10:0; __utmxx=74837904.GQgj_x3FQCSgKU8YgJ937g$30088162-10:1351630608:15552000; __utmx=32887036.GQgj_x3FQCSgKU8YgJ937g$30088162-10:0; __utmxx=32887036.GQgj_x3FQCSgKU8YgJ937g$30088162-10:1351791703:155
   11 RxHeader     c scns-hdr-ip: 50.76.54.11
   11 RxHeader     c X-Forwarded-For: 10.5.112.22
   11 RxHeader     c X-Forwarded-Host: www.s.company.com
   11 RxHeader     c X-Forwarded-Server: www.company.com
   11 RxHeader     c Connection: Keep-Alive
   11 VCL_call     c recv
   11 VCL_return   c pass
   11 VCL_call     c pass
   11 VCL_return   c pass

이상한 점은 호스트 이름을 직접 입력하면(hostname.company.com:8000 또는 company.com/blog) 바니시 캐시에 제대로 도달하지만 여전히 브라우저에서 URL이 리디렉션된다는 것입니다. 올바른 URL(www.company.com/blog)로의 컬링도 캐시에 적중됩니다. 하위 도메인도 작동하지 않는 것 같습니다. 여기서 무슨 일이 일어나고 있는 걸까요?

답변1

그 이유 pass는 기본 VCL 로직이 요청 헤더에 Authorization또는 가 있는 항목을 캐시하는 것을 거부하고 Cookie요청에 Cookie.

if (req.http.Authorization || req.http.Cookie) {
    /* Not cacheable by default */
    return (pass);
}

이러한 기본 동작은 많은 주의에서 나온 것이므로 사용자 세션에 대한 응답으로 페이지에 대해 다른 콘텐츠가 반환되는 서버입니다. 에서 이 동작을 수정할 수 있습니다 vcl_recv. 기본값의 복사본으로 구현하되 req.http.Cookie확인 사항을 제거하십시오.

if (req.http.Authorization) {
    /* Not cacheable by default */
    return (pass);
}

리디렉션 동작 측면에서 보면 30x클라이언트 브라우저를 리디렉션하는 응답을 받는 것 같습니다. 해당 조회 중 하나에 대한 로그를 제공할 수 있습니까?

관련 정보