2013-05-29 25 views
9

Non riesco a capire, per la vita di me, come ottenere la vernice per ignorare la memorizzazione nella cache di 500 errori interni del server. Fondamentalmente, se qualcuno colpisce la vernice e viene restituito un errore del server interno di 500, voglio che la vernice non memorizzi nella cache quella pagina (imposta un periodo ttl/tolleranza 0s?). Sto usando vernice 3.0.3 e qui c'è il mio VCL. Per impostazione predefinita, voglio memorizzare le pagine in cache per 30 giorni.Come NON memorizzare nella cache 500 errori interni del server in Varnish

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); 
} 

Così, in inglese: se viene restituito un server interno 500 ... l'X-CACHE dovrebbe mostrare un MISS. Quando aggiorno la pagina, se è ancora 500 server interni, dovrebbe nuovamente mostrare un MISS. Se la pagina viene consegnata correttamente, dovrebbe mostrare un HIT.

risposta

14

Per impostazione predefinita Varnish nella cache solo i seguenti codici di stato [1]:

  • 200: OK
  • 203: non autorevole Informazioni
  • 300: scelte multiple
  • 301: Spostato in modo permanente
  • 302: sposta il prestatore
  • 307: Temporary Redirect
  • 410: Gone
  • 404: Not Found

Nota che la prima volta che la pagina viene consegnato con successo si continua a ottenere un MISS

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

+1

Hm ... lo faccio non capisco perché Varnish memorizza nella cache l'errore 404. Siamo stati bruciati da questo: la risorsa viene sottoposta a backup, ma l'utente non la vede. – Leonid

+2

@Leonid, Il 404 viene generalmente memorizzato nella cache da proxy inversi poiché non indica un malfunzionamento del server upstream: piuttosto la richiesta è stata ricevuta e gestita correttamente, ma la risorsa richiesta non esiste. – mickeybob