2012-07-18 3 views
0

Varnish 3.0.2, Apache2, Pressflow를 실행 중입니다. ESI를 처음으로 사용하려고 시도하고 있으며 작동하지만 부모 페이지가 처음 요청 된 경우에만 작동합니다. 그런 다음 캐시에서 부모 페이지와 대체 된 콘텐츠를 가져옵니다. 내가 생각할 수있는 유일한 점은 포함 된 파일을 캐시하지 말라고 말하고 있지만 포함 된 내용은 영구적으로 캐시된다는 것입니다. 여기에 포함 된 파일을 저장할 개체가 있습니다.Varnish ESI는 부모 페이지가 백엔드에서 페치 된 경우에만 작동합니다.

11 ObjProtocol c HTTP/1.1 
11 ObjResponse c OK 
11 ObjHeader c Date: Wed, 18 Jul 2012 23:25:56 GMT 
11 ObjHeader c X-Powered-By: PHP/5.3.3-1ubuntu9.10 
11 ObjHeader c Last-Modified: Wed, 18 Jul 2012 23:25:56 +0000 
11 ObjHeader c Expires: Sun, 11 Mar 1984 12:00:00 GMT 
11 ObjHeader c Vary: Cookie,Accept-Encoding 
11 ObjHeader c ETag: "1342653956" 
11 ObjHeader c Content-Encoding: gzip 
11 ObjHeader c Content-Length: 656 
11 ObjHeader c Content-Type: text/html 
11 ObjHeader c Server: Apache/2.2.11 
11 ObjHeader c Cache-Control: no-store 

나는 이것을 하루 종일 보냈고, 검색하고, 찾을 수있는 모든 기사를 읽고, VCL과 HTTP 헤더 모두에서 구성 조정의 전체 힙을 시도했습니다. 내가 잘못하고있는 것을 볼 수 없다.

이 캐시

sub vcl_fetch { 
    set beresp.do_esi = true; 
    if (req.url ~ "^/esi_") { 
    set beresp.http.Cache-Control = "no-store"; 
    set beresp.ttl = 0s; 
    } 
} 

나는 내가 varnishlog의 오류를 inidicate 아무것도보고하지 오전 추가 할에 보관하지 그것을 강제로 시도, 내 VCL에서 조각입니다. 난 단지 경로를 사용하여 시도하고, 호스트 + 경로를 포함 src에 있지만 차이가 없습니다. 백엔드에 신선한 콘텐츠를 요구하지 않습니다. 두 번째 및 후속 요청에 대한 로그를보고 있다면 ESI 페이지라는 것을 알지 못할 것입니다.

답변

0

은 varn_recv {} 하위에 varnish에게 캐시의 요청을 조회하지 말고 vcl의 조건에 의해 처리되는 백엔드 서버의 추가 http 응답 요소를 정의하도록 지정합니다. 예 : "Pragma : no-cache"를 ... 당신과 함께 vcl_recv에서이 조건을 확장 할 수

~ "^/esi_"..

sub vcl_recv(
    # ... 
    # the rest goes here .. 
    # ... 
    if ((req.url ~ "^/esi_") && (req.http.pragma ~ "no-cache")) { 
    return (pass); 
    } 
# ... 
} 
관련 문제