2012-02-09 11 views
17

No puedo ver una pregunta similar, pero me disculpo si estoy engañando.Cómo enviar una solicitud de purga en el barniz

Estamos ejecutando un caché de barniz en nuestro sistema, pero queremos instalar un sistema en el que podamos purgar páginas individuales cuando se editan (bastante normal). Hemos estado tratando de hacer que funcione usando un encabezado HTTP. Por lo tanto, nuestra VCL está configurado como:

acl purge { 
     "localhost"; 
#### Our server IP ##### 
} 

sub vcl_recv { 
    if (req.request == "PURGE") { 
      if (!client.ip ~ purge) { 
        error 405 "Not allowed."; 
      } 
      return (lookup); 
    } 
} 

sub vcl_hit { 
    if (req.request == "PURGE") { 
      purge; 
    } 
} 

sub vcl_miss { 
     if (req.request == "PURGE") { 
       purge; 
     } 
} 

Sin embargo, estoy atascado en la forma de enviar realmente la petición http purga. Estamos utilizando PHP para el sitio web, así que hemos intentado usar:

header("PL: PURGE/HTTP/1.0"); 
header("Host: url to purge"); 

pero esto no parece hacer nada (y no parece varnishlog para mostrar nada purga).

También he experimentado con cURL pero, una vez más, parece que no funciona. ¿Me estoy perdiendo algo realmente básico aquí, o es la base sólida, lo que significa que mi implementación está estropeada?

Muchas gracias,

Respuesta

30

Debe realizar una solicitud HTTP.

no probado, pero debe estar en la línea de (si desea utilizar rizo como usted ha mencionado):

$curl = curl_init("http://your.varnish.cache/url-to-purge"); 
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PURGE"); 
curl_exec($curl); 
+2

Yup, PURGE es una solicitud HTTP como GET o POST, aunque es posterior a RFC 2616, pero es utilizada por cachés de contenido y proxies como Squid, Varnish y Apache Traffic Server. Un google rápido de "PURGE curl_setopt" vomitó [este ejemplo] (http://www.rwahyudi.com/linux/purge-squid-cache-using-curl-without-squidclient/). Disfruta :) – TerryE

+1

¡Muchas gracias a los dos! ¡Muy agradecido! :) – flukeflume

+1

O para más enfoques ad-hoc o guiados por secuencias de comandos, también puede usar 'curl -XPURGE" http: //su.varnish.cache/url-to-purge "' –

3

También puede purgar el uso de línea de comandos. Use el comando sudo varnishadm. Esto abrirá la interfaz de línea de comando Varnish. donde puede escribir su comando para purgar las páginas según su necesidad. Por ejemplo, para purgar su página de inicio, haga esto:

[email protected]:/etc/varnish# sudo varnishadm 
200   
----------------------------- 
Varnish Cache CLI 1.0 
----------------------------- 
Linux,3.5.0-28-generic,x86_64,-sfile,-smalloc,-hcritbit 

Type 'help' for command list. 
Type 'quit' to close CLI session. 

varnish> ban.url ^/$ 
200 
+1

No, no puede eliminar de varnishadm - solo ban como en tu ejemplo. Prohibir y purgar no son la misma funcionalidad, incluso si el resultado final es similar. – Clarence

-1

Quizás estoy en una versión más nueva pero lo que está arriba no me funcionó. Esto hizo:

sub vcl_hit { 
    if (req.request == "PURGE") { 
    ban("req.url ~ "+req.url); 
    error 200 "Purged."; 
    } 
} 
2

manera rápida, sucio y eficaz para enviar una petición PURGA:

curl -v -k -X PURGE URL 

en realidad se puede hacer un pequeño script con esa afirmación, de la siguiente manera:

1) Abrir un editor, en el ejemplo VI

vi varnish_purge_url.sh 

2) Introduce el texto siguiente:

#!/bin/sh 

curl -v -k -X PURGE $1 

(recuerde dejar la línea en blanco entre la primera y la última línea).

3) Guarde el archivo y salga. A continuación, establezca los atributos adecuados para ejecutarlo desde el shell:

chmod 750 varnish_purge_url.sh 

4) ¿Quieres ser root cuando crear y utilizar el script anterior. Si usa Ubuntu, siéntase libre de agregar sudo delante de los comandos cuando sea necesario.

5) El uso es simple:

./varnish_purge_url.sh URL 

Dónde URL es el URL para purgar.

+0

¿Alguna ayuda aquí? :) http://stackoverflow.com/questions/35632607/is-the-http-verb-purge-idempotent –

Cuestiones relacionadas