2013-05-29 23 views
9

Nie potrafię zrozumieć, jak uzyskać lakierowanie, aby zignorować buforowanie 500 błędów wewnętrznych serwera. Zasadniczo, jeśli ktoś uderzy lakierem i zostanie zwrócony 500 wewnętrzny błąd serwera, chcę, aby lakier nie buforował tej strony (ustawić okres 0 ttl/grace?). Używam lakieru 3.0.3 i tutaj jest mój VCL. Domyślnie chcę buforować strony przez 30 dni.W jaki sposób NIE przechowywać pamięci podręcznej 500 błędów wewnętrznego serwera w powłoce lakierniczej

sub vcl_fetch { 
    # Set 30-day TTL 
    set beresp.ttl = 2592000 s; 
    set beresp.grace = 15d; /* The max amount of time to keep object in cache */ 

    if (beresp.status == 301 || beresp.status == 302) { 
      return (hit_for_pass); 
    } 

    # Serve pages from the cache should we get a sudden error and re-check in one minute 
    if (beresp.status >= 500) { 
     set beresp.grace = 1s; 
     set beresp.ttl = 1s; 
     return (hit_for_pass); 
    } 

    # Unset the "etag" header (suggested) 
    unset beresp.http.etag; 

    return(deliver); 
} 

Tak, po angielsku: jeśli serwer wewnętrzny 500 zostanie zwrócony ... X-CACHE powinien pokazać MISS. Kiedy odświeżam stronę, jeśli nadal jest to 500 wewnętrznych serwerów, powinien ponownie pokazać MISS. Jeśli strona zostanie pomyślnie dostarczona, powinna pokazać HIT.

Odpowiedz

14

Domyślnie lakier będzie buforować tylko następujące kody stanu [1]:

  • 200: OK
  • 203: nieautorytatywnych Informacja
  • 300: Multiple Choices
  • 301: Przeniesiony na stałe
  • 302: Przeniesiony Tymczasowo
  • 307: Temporary Redirect
  • 410: Przeminęło
  • 404: Not Found

pamiętać, że po raz pierwszy strona zostanie pomyślnie dostarczona będzie jeszcze dostać MISS

[1] http://book.varnish-software.com/3.0/VCL_Basics.html#the-initial-value-of-beresp-ttl

+1

Hm ... ja nie rozumiem, dlaczego Varnish buforowałby błąd 404. Zostaliśmy przez to spaleni - zasób jest zapasowy, ale użytkownik go nie widzi. – Leonid

+2

@Leonid, 404 jest ogólnie buforowany przez odwrotne proxy, ponieważ nie oznacza, że ​​serwer działa nieprawidłowo: raczej żądanie zostało odebrane i obsługiwane poprawnie, ale żądany zasób nie istnieje. – mickeybob