
내 웹 서버에는 제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
클라이언트 브라우저를 리디렉션하는 응답을 받는 것 같습니다. 해당 조회 중 하나에 대한 로그를 제공할 수 있습니까?