2012-10-12 1 views
3

나는 Varnish 3.0.3을 사용 중이며 정적 리소스에 대한 HTTP 헤더의 최대 수명을 설정하여 브라우저 캐싱을 활용합니다. 나는 다음과 같은 구성이 default.vcl에 추가 시도 :Varnish 3 - HTTP 헤더의 최대 수명 설정 방법

sub vcl_fetch { 
    if (beresp.cacheable) { 
    /* Remove Expires from backend, it's not long enough */ 
    unset beresp.http.expires; 

    /* Set the clients TTL on this object */ 
    set beresp.http.cache-control = "max-age=900"; 

    /* Set how long Varnish will keep it */ 
    set beresp.ttl = 1w; 

    /* marker for vcl_deliver to reset Age: */ 
    set beresp.http.magicmarker = "1"; 
    } 
} 

sub vcl_deliver { 
    if (resp.http.magicmarker) { 
    /* Remove the magic marker */ 
    unset resp.http.magicmarker; 

    /* By definition we have a fresh object */ 
    set resp.http.age = "0"; 
    } 
} 

이는 https://www.varnish-cache.org/trac/wiki/VCLExampleLongerCaching에서 복사됩니다. 어쩌면 내가 오타를 만들었을 수도 있습니다. Varnish를 다시 시작하면 더 이상 작동하지 않습니다.

두 가지 질문이 있습니다. 이것이 Varnish 3의 올바른 방법입니까? 그렇다면, 내가 뭘 잘못하고 있니? 둘째, 다시 시작하기 전에 Varnish 구성 파일을 테스트하는 방법이 있습니까? 아파치가 "/ sbin/service httpd configtest"와 함께 가지는 방식에 따른 것. 그것은 실수하기 전에 잡는다. 고맙습니다.

답변

2

예, 일반적으로 이것은 백엔드의 TTL을 재정의하는 방법입니다. beresp.http.expires를 제거하고 beresp.http.cache-control을 설정하고 beresp.ttl을 설정하십시오. beresp.cacheable은 2. 01입니다. 3.0에서 같은 테스트는 beresp.ttl> 0을 확인하는 것입니다.

작은 마술은 req.http에 마법 마커를 저장하는 것입니다. 그런 다음 마커 마커를 req.http에 저장하면됩니다. 고객.

구성 파일을 테스트하는 것과 관련하여 "varnishd -C -f /etc/varnish/default.vcl"과 같이 직접 VCL 컴파일러를 호출 할 수 있습니다. VCL에 오류가 발생하면 오류 메시지가 나타납니다. VCL이 유효하면 생성 된 C 코드가있는 페이지가 몇 개 있습니다.

관련 문제