2015-02-17 19 views
5

Beh, mi terrò le cose semplici, le richieste di Aria nel Filtro (? O almeno così pensavo) erano praticamente tutti gestiti letteralmente:vernice 4, spurgo - ho pensato che avevo capito tutto

acl purge { 

    "localhost"; 

    "127.0.0.1"; 

} 

e poi

if (req.method == "PURGE") { 
      if (!client.ip ~ purge) { 
      return(synth(405, "This IP is not allowed to send PURGE requests.")); 
      } 
      return (purge); 
    } 

ho abbastanza certo entrambe le dichiarazioni di cui sopra sono "corrette", la cosa che sto appeso-up su è che se ho mandato un

curl -X PURGE http://domain.com/ 

o

curl -X PURGE http://domain.com/.*

e Varnish restituisce 200 purgato bene ... la cache viene eliminato? Anche se è solo la homepage e non l'intera cache (si è detto che utilizzava il metodo. * Sopra) e i frammenti di codice sopra riportati sono corretti c'è qualche ragione particolare per cui lo http://domain.com (come nella home page attuale) non viene eliminato?

spettacoli varnishncsa:

MYIP - - [16/Feb/2015:23:23:10 -0600] "PURGE http://domain.com/ HTTP/1.1" 200 241 "-" "curl/7.29.0" 

So che devo essere manca qualcosa di sciocco, ma non riesco a capirlo?

+0

Hai già capito? – hsb1007

risposta

1

Il official documentation dice in pratica ciò che hai fatto, ma tieni presente PURGE! = BAN, puoi utilizzare le espressioni regolari in BAN, ma non in PURGE. Con PURGE cancelli tutte le copie definite da Varian di un particolare URL.

Nel mio test con 4.0.2 funziona come consigliato, ho la home page cache, faccio un curl -X PURGE http://localhost:8080/ e in varnishlog vedo (tra le altre cose):

* <<Request>> 65542  
- Begin   req 65541 rxreq 
- Timestamp  Start: 1424188792.108573 0.000000 0.000000 
- Timestamp  Req: 1424188792.108573 0.000000 0.000000 
- ReqStart  ::1 60496 
- ReqMethod  PURGE 
- ReqURL  /

- VCL_acl  MATCH purge "localhost" 
- VCL_return  purge 
- VCL_call  HASH 
- VCL_return  lookup 
- VCL_call  PURGE 

e ricaricando vedo un MISS & richiesta di backend (perché non è nella cache):

* << BeReq >> 65548  
- Begin   bereq 65547 fetch 
- Timestamp  Start: 1424188815.112540 0.000000 0.000000 
- BereqMethod GET 
- BereqURL  /
- BereqProtocol HTTP/1.1 

- VCL_call  BACKEND_RESPONSE 
- TTL   VCL 120 21600 0 1424188815 
- VCL_return  deliver 

* <<Request>> 65547  
- Begin   req 65546 rxreq 

- ReqMethod  GET 
- ReqURL  /

- VCL_return  hash 
- VCL_call  HASH 
- VCL_return  lookup 
- Debug   "XXXX MISS" 
- VCL_call  MISS 
- VCL_return  fetch 
- Link   bereq 65548 fetch 

BTW Aggiungi ":: 1" per l'elenco di indirizzi IP nella LCA di spurgo nel caso in cui si utilizza IPv6. Sarebbe tornato un 405, ma chi lo sa.

+1

Vedi, questa è la cosa che faccio arricciare -X PURGE http://domain.com/ (la vernice è su 80) e ritorna 200 Purgato come risposta ma non riesco a trovare nulla eliminato. Anche se funzionasse come una corrispondenza letterale, il vero file index.php (homepage) DOVREBBE essere eliminato, no? – alturic

+1

Impossibile modificare i commenti, ma anche se l'ho curl -X PURGE http: // localhost/everything (arricciatura, varnishlog, ecc.) Sembrano mostrare una risposta 200 ma la pagina non viene eliminata. Domanda aggiuntiva, la vernice è "stupida" quando si tratta dell'effettiva ricerca/risposta di eliminazione, quindi se faccio una purga per http: // localhost/file inesistente normalmente verrà comunque visualizzato 200? Non gradisce il primo controllo per vedere se la cache esiste prima di restituire una risposta di eliminazione giusta? – alturic

+0

Sì, è corretto, se ti è permesso di eliminare avrai sempre un 200. Devi fare attenzione a passare il nome host giusto (-H "Host: domain.com"), e lo stesso percorso ("/"! = "/index.php") in modo che possa eliminare l'oggetto corretto. Il controllo è che in seguito una richiesta GET per l'oggetto si traduce in un MISS. –