2016-12-20 4 views
0

1 분 동안 제 3 자 페이지 (내 제어 할 수없는 서비스로부터 프록시 됨)에 캐시에 보관되도록 바니시를 구성하려고합니다. 불행히도이 서비스가 중단 될 수 있으며 이로 인해 문제가 내 사이트로 전송됩니다. 이를 방지하기 위해 서비스를 사용할 수 없을 때 로컬 캐시에서 서비스하기를 원합니다.바니시 3.0에 유예를 올바르게 구성하는 방법

나는 gracesaint mode의 팁을 따랐다.

내 VCL 파일의 일부 스 니펫을 따르십시오.

백엔드 구성 :

backend external { 
    .host = "external.acme.com"; 
    .port = "80"; 
    .probe = { 
     .url = "/page"; 
     .interval = 5s; 
     .timeout = 5s; 
     .window = 1; 
     .threshold = 1; 
    } 
} 

vcl_recv :

sub vcl_recv { 
    set req.backend = my_backend; 

    ... 

    # redirect onto 3rd part service 
    if (req.url ~ "www.acme.com:80/page$") { 
     set req.url = regsub(req.url, "(.*)", "http://external.acme.com/page"); 
     set req.backend = external; 
    } 

    if (!req.backend.healthy) { 
     set req.grace = 2h; 
    } else { 
     set req.grace = 10s; 
    } 
    ... 

vcl_fetch :

sub vcl_fetch { 

    if (beresp.status == 503) { 
     set beresp.saintmode = 5s; 
     #set beresp.ttl = 1h; 
     return (restart); 
    } 
    set beresp.grace = 2h; 
    set beresp.ttl = 2h; 

    if (req.http.host == "external.acme.com") { 
     set beresp.http.X-Varnish-Action = "Caching external.acme.com"; 
     set beresp.ttl = 1m; 
     return(deliver); 
    } 

내가 testin 해요 g의 iptables을 사용하고 구성이 작동하여 원격 서비스의 아래쪽 :

가 3RP 파티 페이지의 OK
  • 건강 폴링
  • 내 유일한 문제 OK입니다 원격 페이지의

    • 프록시입니다 그 : 원격 서비스를 종료하면 제 3 자 페이지가 캐시에 의해 1 분 이상 (TTL은 vcl_fetch으로 설정 됨)까지 제공됩니다. 이는 원격 페이지를 사용할 수있는 좋은 TTL입니다 ...하지만 원하는 것은 훨씬 더 길게 (2 시간) 계속해서 봉사하십시오.

      이 내가 거기 읽는 것과 대조적으로 보인다 http://book.varnish-software.com/3.0/Saving_a_request.html#req-grace-and-beresp-grace

      내 의심, 나는 은혜 모드로 전환 아니지만, health check을 구성하지에 나는이 문서에서 발견 된 유일한 이유가 있다는 것입니다하지만 난 보면 varnishlog에 건강 체크가 제대로 실행되는 것을 봅니다 ("아직도 건강합니다", "아프다"...)

      내가 뭘 놓치고있어? 필요한 것을 얻을 수있는 방법이 있습니까?

      varnishlog은 모두가 잘되어 가고

      이 로그는 (원격 서버가 있고 실행) 추적 : 이것은 여전히 ​​원격가 다운 될 때 로그 (하지만 무엇

      0 Backend_health - external Still healthy 4--X-RH 1 1 1 0.010659 0.010557 HTTP/1.1 200 OK 
          12 BackendClose - external 
          12 BackendOpen b external ... 
          12 TxRequest b GET 
          12 TxURL  b ... 
          12 TxProtocol b HTTP/1.1 
          12 TxHeader  b Cache-Control: max-age=0 
          12 TxHeader  b Upgrade-Insecure-Requests: 1 
          12 TxHeader  b User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36 
          12 TxHeader  b Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
          12 TxHeader  b Accept-Encoding: gzip, deflate, sdch, br 
          12 TxHeader  b Accept-Language: it-IT,it;q=0.8,en-US;q=0.6,en;q=0.4,de;q=0.2 
          12 TxHeader  b Cookie:... 
          12 TxHeader  b If-None-Match: "6338e-4c0f-54429328f4d3d" 
          12 TxHeader  b If-Modified-Since: Wed, 21 Dec 2016 11:10:16 GMT 
          12 TxHeader  b Via: 1.1 ... 
          12 TxHeader  b X-Forwarded-For: ... 
          12 TxHeader  b X-Forwarded-Host: ... 
          12 TxHeader  b X-Forwarded-Server: ... 
          12 TxHeader  b host: ... 
          12 TxHeader  b X-Varnish: 1305584183 
          12 RxProtocol b HTTP/1.1 
          12 RxStatus  b 304 
          12 RxResponse b Not Modified 
          12 RxHeader  b Date: Thu, 22 Dec 2016 09:25:21 GMT 
          12 RxHeader  b Server: Apache/2.2.22 (Debian) 
          12 RxHeader  b ETag: "6338e-4c0f-54429328f4d3d" 
          12 RxHeader  b Vary: Accept-Encoding 
          12 Fetch_Body b 0(none) cls 0 mklen 0 
          12 Length  b 0 
          12 BackendReuse b external 
          3 SessionOpen c ::1 60278 :6081 
          3 ReqStart  c ::1 60278 1305584183 
          3 RxRequest c GET 
          3 RxURL  c /VirtualHostBase/... 
          3 RxProtocol c HTTP/1.1 
          3 RxHeader  c Host: localhost:6081 
          3 RxHeader  c Cache-Control: max-age=0 
          3 RxHeader  c Upgrade-Insecure-Requests: 1 
          3 RxHeader  c User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36 
          3 RxHeader  c Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
          3 RxHeader  c Accept-Encoding: gzip, deflate, sdch, br 
          3 RxHeader  c Accept-Language: it-IT,it;q=0.8,en-US;q=0.6,en;q=0.4,de;q=0.2 
          3 RxHeader  c Cookie:... 
          3 RxHeader  c If-None-Match: "6338e-4c0f-54429328f4d3d" 
          3 RxHeader  c If-Modified-Since: Wed, 21 Dec 2016 11:10:16 GMT 
          3 RxHeader  c Via: 1.1 ... 
          3 RxHeader  c X-Forwarded-For: ... 
          3 RxHeader  c X-Forwarded-Host: ... 
          3 RxHeader  c X-Forwarded-Server: ... 
          3 RxHeader  c Connection: Keep-Alive 
          3 VCL_call  c recv pass 
          3 VCL_call  c hash 
          3 Hash   c http://... 
          3 Hash   c ... 
          3 VCL_return c hash 
          3 VCL_call  c pass pass 
          3 Backend  c 12 external external 
          3 TTL   c 1305584183 RFC -1 -1 -1 1482398514 0 1482398721 0 0 
          3 VCL_call  c fetch 
          3 TTL   c 1305584183 VCL -1 7200 -1 1482398514 -0 
          3 TTL   c 1305584183 VCL 7200 7200 -1 1482398514 -0 
          3 TTL   c 1305584183 VCL 60 7200 -1 1482398514 -0 
          3 VCL_return c deliver 
          3 ObjProtocol c HTTP/1.1 
          3 ObjResponse c Not Modified 
          3 ObjHeader c Date: Thu, 22 Dec 2016 09:25:21 GMT 
          3 ObjHeader c Server: Apache/2.2.22 (Debian) 
          3 ObjHeader c ETag: "6338e-4c0f-54429328f4d3d" 
          3 ObjHeader c Vary: Accept-Encoding 
          3 ObjHeader c X-Varnish-Action: Caching external.acme.com 
          3 VCL_call  c deliver deliver 
          3 TxProtocol c HTTP/1.1 
          3 TxStatus  c 304 
          3 TxResponse c Not Modified 
          3 TxHeader  c Server: Apache/2.2.22 (Debian) 
          3 TxHeader  c ETag: "6338e-4c0f-54429328f4d3d" 
          3 TxHeader  c Vary: Accept-Encoding 
          3 TxHeader  c X-Varnish-Action: Caching external.acme.com 
          3 TxHeader  c Accept-Ranges: bytes 
          3 TxHeader  c Date: Thu, 22 Dec 2016 09:21:53 GMT 
          3 TxHeader  c X-Varnish: 1305584183 
          3 TxHeader  c Age: 0 
          3 TxHeader  c Via: 1.1 varnish 
          3 TxHeader  c Connection: keep-alive 
          3 Length  c 0 
          3 ReqEnd  c 1305584183 1482398513.625868082 1482398513.630025387 0.000263691 0.004073620 0.000083685 
          3 SessionClose c EOF 
          3 StatSess  c ::1 60278 0 1 1 0 1 1 290 0 
          0 CLI   - Rd ping 
          0 CLI   - Wr 200 19 PONG 1482398514 1.0 
          0 CLI   - Rd ping 
          0 CLI   - Wr 200 19 PONG 1482398517 1.0 
          0 Backend_health - external Still healthy 4--X-RH 1 1 1 0.010621 0.010573 HTTP/1.1 200 OK 
      

      0 CLI   - Rd ping 
      0 CLI   - Wr 200 19 PONG 1482398997 1.0 
      0 Backend_health - external Went sick ------- 0 1 1 0.000000 0.010652 
      0 CLI   - Rd ping 
      0 CLI   - Wr 200 19 PONG 1482399000 1.0 
      3 SessionOpen c ::1 60382 :6081 
      3 ReqStart  c ::1 60382 1305584190 
      3 RxRequest c GET 
      3 RxURL  c /VirtualHostBase/https/... 
      3 RxProtocol c HTTP/1.1 
      3 RxHeader  c Host: localhost:6081 
      3 RxHeader  c Pragma: no-cache 
      3 RxHeader  c Cache-Control: no-cache 
      3 RxHeader  c Upgrade-Insecure-Requests: 1 
      3 RxHeader  c User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36 
      3 RxHeader  c Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
      3 RxHeader  c Accept-Encoding: gzip, deflate, sdch, br 
      3 RxHeader  c Accept-Language: it-IT,it;q=0.8,en-US;q=0.6,en;q=0.4,de;q=0.2 
      3 RxHeader  c Cookie: ... 
      3 RxHeader  c Via: 1.1 ... 
      3 RxHeader  c X-Forwarded-For: ... 
      3 RxHeader  c X-Forwarded-Host: ... 
      3 RxHeader  c X-Forwarded-Server: ... 
      3 RxHeader  c Connection: Keep-Alive 
      3 VCL_call  c recv lookup 
      3 VCL_call  c hash 
      3 Hash   c http://... 
      3 Hash   c ... 
      3 VCL_return c hash 
      3 Hit   c 1305584185 
      3 VCL_call  c hit deliver 
      3 VCL_call  c deliver deliver 
      3 TxProtocol c HTTP/1.1 
      3 TxStatus  c 200 
      3 TxResponse c OK 
      3 TxHeader  c Server: Apache/2.2.22 (Debian) 
      3 TxHeader  c Access-Control-Allow-Origin: * 
      3 TxHeader  c Last-Modified: Wed, 21 Dec 2016 11:10:16 GMT 
      3 TxHeader  c ETag: "6338e-4c0f-54429328f4d3d" 
      3 TxHeader  c Vary: Accept-Encoding 
      3 TxHeader  c Content-Encoding: gzip 
      3 TxHeader  c Content-Type: text/html 
      3 TxHeader  c X-Varnish-Action: Caching external.acme.com 
      3 TxHeader  c Content-Length: 4367 
      3 TxHeader  c Accept-Ranges: bytes 
      3 TxHeader  c Date: Thu, 22 Dec 2016 09:30:03 GMT 
      3 TxHeader  c X-Varnish: 1305584190 1305584185 
      3 TxHeader  c Age: 39 
      3 TxHeader  c Via: 1.1 varnish 
      3 TxHeader  c Connection: keep-alive 
      3 Length  c 4367 
      3 ReqEnd  c 1305584190 1482399003.173985004 1482399003.174190044 0.000112534 0.000087976 0.000117064 
      3 SessionClose c EOF 
      3 StatSess  c ::1 60382 0 1 1 0 0 0 441 4367 
      0 CLI   - Rd ping 
      0 CLI   - Wr 200 19 PONG 1482399003 1.0 
      0 CLI   - Rd ping 
      0 CLI   - Wr 200 19 PONG 1482399006 1.0 
      

      을 그리고 마지막으로이 오류가 나는보다 더 후 (이상 TTL 후 얻을 : TTL에 도달하지 않은 것처럼) 캐시 된 콘텐츠를 분)

      0 CLI   - Rd ping 
          0 CLI   - Wr 200 19 PONG 1482399282 1.0 
          0 CLI   - Rd ping 
          0 CLI   - Wr 200 19 PONG 1482399285 1.0 
          12 SessionOpen c ::1 60412 :6081 
          12 ReqStart  c ::1 60412 1305584191 
          12 RxRequest c GET 
          12 RxURL  c /VirtualHostBase/https/... 
          12 RxProtocol c HTTP/1.1 
          12 RxHeader  c Host: localhost:6081 
          12 RxHeader  c Cache-Control: max-age=0 
          12 RxHeader  c Upgrade-Insecure-Requests: 1 
          12 RxHeader  c User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36 
          12 RxHeader  c Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
          12 RxHeader  c Accept-Encoding: gzip, deflate, sdch, br 
          12 RxHeader  c Accept-Language: it-IT,it;q=0.8,en-US;q=0.6,en;q=0.4,de;q=0.2 
          12 RxHeader  c Cookie: ... 
          12 RxHeader  c If-None-Match: "6338e-4c0f-54429328f4d3d" 
          12 RxHeader  c If-Modified-Since: Wed, 21 Dec 2016 11:10:16 GMT 
          12 RxHeader  c Via: 1.1 ... 
          12 RxHeader  c X-Forwarded-For: ... 
          12 RxHeader  c X-Forwarded-Host: ... 
          12 RxHeader  c X-Forwarded-Server: ... 
          12 RxHeader  c Connection: Keep-Alive 
          12 VCL_call  c recv pass 
          12 VCL_call  c hash 
          12 Hash   c http://... 
          12 Hash   c ... 
          12 VCL_return c hash 
          12 VCL_call  c pass pass 
          12 FetchError c no backend connection 
          12 VCL_call  c error deliver 
          12 VCL_call  c deliver deliver 
          12 TxProtocol c HTTP/1.1 
          12 TxStatus  c 503 
          12 TxResponse c Service Unavailable 
          12 TxHeader  c Server: Varnish 
          12 TxHeader  c Content-Type: text/html; charset=utf-8 
          12 TxHeader  c Retry-After: 5 
          12 TxHeader  c Content-Length: 419 
          12 TxHeader  c Accept-Ranges: bytes 
          12 TxHeader  c Date: Thu, 22 Dec 2016 09:34:48 GMT 
          12 TxHeader  c X-Varnish: 1305584191 
          12 TxHeader  c Age: 0 
          12 TxHeader  c Via: 1.1 varnish 
          12 TxHeader  c Connection: close 
          12 Length  c 419 
          12 ReqEnd  c 1305584191 1482399288.281390190 1482399288.281631470 0.000269890 0.000148058 0.000093222 
          12 SessionClose c error 
          12 StatSess  c ::1 60412 0 1 1 0 1 0 257 419 
          0 CLI   - Rd ping 
          0 CLI   - Wr 200 19 PONG 1482399288 1.0 
          0 Backend_health - external Still sick ------- 0 1 1 0.000000 0.010652 
          0 CLI   - Rd ping 
          0 CLI   - Wr 200 19 PONG 1482399291 1.0 
      

    답변

    0

    나는 당신의 문제가 vcl_fetch의 라인 return (restart);에있다 생각합니다. 다시 시작하면 바니시가 처음부터 다른 백엔드로 요청을 처리하게됩니다. 다른 백엔드가 없으므로 오류가 발생합니다.이것은 개체가 TTL보다 크지 않은만큼 캐시에서 제공되는 원인입니다.

    이 정확한 유동 될 것이다 :

    1. TTL 유효 => 캐시로부터 제공;

    2. TTL이 잘못되었습니다. => 백엔드에서 가져 오기를 시도합니다.

    3. 백엔드 응답 없음 => 은총 TTL 사용;

    4. 그레이스 TTL 유효 => 스태틱 캐시에서 전달;

    재시작은 광택이 그것을 제거 4. 시도 단계로 마법이 일어날 보게 두지 않을하여이 흐름을 변화하고 있습니다.

    +0

    답장을 보내 주셔서 감사합니다. 재시작 설명을 위해 (완전히 빠졌습니다). 불행히도'return (restart)'을 제거해도 아무 것도 변경되지 않았습니다. 1 분 동안 캐시 된 컨텐츠를 얻은 다음 503 –

    +0

    의 Varnish 오류가 발생했습니다. 오류 요청에 대한 로그를 게시 할 수 있으면 문제를 쉽게 식별 할 수 있습니다. varnishlog를 시도하고 위조 된 요청에 대한 모든 데이터를 게시하면 내 대답을 편집하게되어 기쁩니다. 또한 Varnish를 버전 4로 업그레이드 할 것을 제안합니다. 성능에 대한 몇 가지 큰 개선 사항과 요청 및 반입 방법 처리 방법이 있습니다. – alejdg

    +0

    안녕하세요 다시 @alejdg 나는 varnishlog 정보를 추가하여 질문을 편집했습니다. –