2014-12-09 2 views
0

쿠키가있는 모든 페이지를 캐시하고 싶습니다. PHP의 백엔드가 준비되지 않았으므로 여러 개의 Set-Cookie 헤더를 보내고 있습니다. 모든 session_start 및 setcookie 기능을 제거 할 때 HIT가 페이지에 추가되지만 varnish를 자동으로 수행하도록 설정하면 페이지가 자동으로 MISSes를 보냅니다. 당신이에 의해 물건을 파괴하지 않는Varnish 4, 쿠키가있는 캐시 페이지

sub vcl_backend_response { 
    set beresp.ttl = 120 s; 
    unset beresp.http.set-cookie; 
} 

확인 : 그것은 당신이 진흙 물로 가고 있지만, TTL을 강제하려고하는 것 같다

vcl 4.0; 

backend default { 
    .host = "myhost.app"; 
    .port = "80"; 
} 

sub vcl_recv { 
    unset req.http.cookie; 
} 

sub vcl_backend_response { 
    unset beresp.http.set-cookie; 
} 

sub vcl_deliver { 
    if (obj.hits > 0) { 
     set resp.http.X-Cache = "HIT"; 
    } else { 
     set resp.http.X-Cache = "MISS"; 
    } 
} 
+0

캐시 제어 및 TTL에 대한 어떤 응답 헤더 값이 반환하는 PHP 파일입니까? –

+0

안녕하세요 @MarcelDumont, 제 생각에 그것이 부적절하다고 생각합니다. 백엔드를 변경하고 싶지 않습니다. 설정을 해제 한 다음 CacheControl 및 TTL을 VCL Varn으로 설정하면 모든 페이지를 캐시 할 수 있습니까? –

+0

묻는 이유는 바스켓에서 예기치 않은 패스가 발생할 수있는 요소가 더 많다는 것입니다. CacheControl과 TTL이 종종 원인입니다. 그래서 관련이 있습니다. 요청 및 응답 헤더 전체를 표시 할 수 있다면 이상적입니다. –

답변

1

: 여기

default.vcl입니다 쿠키 및 ttls를 무시한 캐싱.

0

매번 캐시 MISS에 직면했으며 Jorge Nerín이 언급 한대로 sub vcl_backend_response{..}을 업데이트했습니다. 이제 캐시 HIT를 보여 주지만 로그인이되지 않았습니다. unset beresp.http.set-cookie; 때문에 분명했습니다. 그래서 Manipulating request headers in VCL에서 URL을 기반으로 쿠키를 설정 해제하도록 제안합니다. 나는 vcl_backend_response에서 동일하게 적용했다. 내 앱 로그인 URL에 auth이 포함되어 있습니다. 따라서 URL이 auth 인 경우를 제외하고는 어디 까지나 unset beresp.http.set-cookie;으로 업데이트되었습니다. 이제 로그인이 일어나고 또한 HIT를 캐시합니다. 희망이 커뮤니티 도움이

sub vcl_backend_response { 
set beresp.ttl = 120 s; 
if ((bereq.url ~ "auth")){ 
    } 
else{ 
    unset beresp.http.set-cookie; 
} 
#rest of code 
}