2013-01-09 2 views
1

내가 「자원 "이 가정 일에 자원을 보장하기 위해 캐시를 제거 - http://localhost/doc, 내가 자주 방문 이후 누군가가 그것을 통해 업데이트 제외하고, 니스 에 의해 모든 시간을 캐시 할 것으로 예상 POST, POST 업데이트가 끝난 후 모든 추가 요청은 "doc"의 최신 버전을 검색해야합니다.니스 : 조건부

  1. Exec에서 명령 : varnishadm -T 127.0.0.1:6082 purge req.url == "/doc"
  2. 화재

    내 생각은 POST 요청이 기본적으로 캐싱없이 니스를 통과하기 때문에, 내 백엔드 서버 내에서이 논리를 포장하고, 내가 할 수있는 내 백엔드 서버에 는 HTTP 퍼지 요청 : 그러나 curl -X PURGE http://localhost/doc

는, 내가 "Cache-Control"헤더를 존중 VCL을 config (설정) 필요! 내 VCL은 다음과 같다 있지만 작동하지 :

sub vcl_fetch { 
    if (beresp.http.Cache-Control ~ "no-cache") { 
     purge; 
    } 
    return (deliver); 
} 
acl purgers { "127.0.0.1"; } 

sub vcl_recv { 
    if (req.request == "PURGE") { 
     if (!client.ip ~ purgers) { 
      error 405 "Method not allowed"; 
     } 
     return (lookup); 
    } 
} 
sub vcl_hit { 
    if (req.request == "PURGE") { 
     #purge; 
     purge("req.url ~ " req.url); 
     error 200 "Purged"; 
    } 
} 
sub vcl_miss { 
    if (req.request == "PURGE") { 
     purge; 
     error 200 "Purged"; 
    } 
} 
sub vcl_pass { 
    if (req.request == "PURGE") { 
     error 502 "PURGE on a passed object"; 
    } 
} 

이 불만 :

Message from VCC-compiler: 
Expected ';' got '(' 

(program line 174), at 
('input' Line 154 Pos 14) 
     purge("req.url ~ " req.url); 
-------------#----------------------- 

Running VCC-compiler failed, exit 1 

VCL compilation failed 
  • Question1 : 어떻게 내 목표를 달성하기 위해 VCL를 업데이트?
  • Question2 :이 매우 일반적인 시나리오라고 생각 : 캐시 자원 동안이 최신이 을 유지하고 니스를 사용하여이를 달성하기위한 가장 좋은 방법은 무엇입니까?

감사합니다.

+1

바니시 3에서 purge()가 ban()로 바뀌고 제거되었습니다. 도입되었습니다. – Ketola

+0

감사합니다. Ketola, 오늘 실제로 찾았습니다. https://www.varnish-cache.org/docs/3.0/ https://www.varnish-software.com/static/book/Cache_invalidation.html installation/upgrade.html? highlight = purge 그러나 질문 2가 답을 기다리는 중입니다 :) –

답변

0

응용 프로그램 서버는 문서가 업데이트되면 URL을 삭제하도록 요청할 수 있습니다. 문서에 대한 GET 요청이 아닌 PURGE 요청을 보내야합니다.

또는 URL을 받으면 해당 URL로 POST 할 때 URL을 금지 할 수 있습니다.