Varnish Cache

Las instancias Simple Hosting benefician de un potente sistema de caché proporcionado por Varnish. Esto le permite distribuir el contenido de su sitio web a un mayor número de visitantes sin utilizar los recursos de su instancia o servidor.

Por ejemplo, cuando un visitante de un sitio web solicita un archivo de su servidor web “foo.jpg”, este archivo se coloca en el Varnish cache. Cuando el siguiente visitante solicita la misma imagen, la imagen se sirve desde el Varnish cache, lo permite a su servidor web no responder a la petición.

Comprobar el estado del caché

El almacenamiento en caché está habilitado por defecto y se establece un período de caducidad de 120 segundos para todas las solicitudes.

Puede controlar durante cuánto tiempo debe almacenarse en caché un objeto o si debe almacenarse en caché. También puede controlar si se deben almacenar en caché diferentes representaciones del mismo objeto para responder a diferentes peticiones. Puede obtener más información sobre el control de la caché en las siguientes secciones.

Cuando realiza una solicitud HTTP (s) a un sitio web alojado en Simple Hosting o vinculado con un acelerador web, notará que la respuesta contendrá encabezados específicos que indican si el almacenamiento en caché está habilitado o no.

Puede utilizar varias herramientas para ver las cabeceras HTTP en las respuestas. Por ejemplo, puede utilizar la herramienta «Inspector» de su navegador o el siguiente comando: curl -i http://example.com

Todas las peticiones HTTP(s), almacenadas en caché o no, pasan por nuestro sistema Varnish cache, por lo que siempre encontrará el encabezado Via (RFC2616) en las respuestas :

Via: 1.1 varnish

Para determinar si su respuesta está siendo almacenada en caché o no, compruebe si el encabezado Age: tiene un valor mayor que 0. El siguiente ejemplo muestra una respuesta que fue servida desde la caché y fue generada por el código actual hace 117 segundos:

Via: 1.1 varnish
Age: 117

Haga varias solicitudes a la misma dirección y compruebe si el valor de Age: aumenta o se mantiene en 0. Si el objeto no se almacena en caché, el valor siempre será 0, lo que significa que fue servido por la instancia y no por el Web Accelerator.

De lo contrario, el valor aumentará hasta que el caché caduque, ya que el objeto está siendo servido por el Web Accelerator, o directamente desde el caché de su navegador, o desde un sistema proxy intermediario como su ISP o proxy corporativo. Después de la expiración, o después de una purga, el valor será `0 para la primera respuesta.

Modificar el período de caché

El período pro defecto en el que un elemento permanecerá en la caché es de 120 segundos. Si quieres cambiar esto, puedes hacerlo añadiendo el siguiente encabezado y variando el valor de max-age (en segundos):

HTTP Cache-Control: max-age=200

Advertencia

Para fines de desarrollo o pruebas, puede reducir la caché a 1 segundo, con max-age=1. Con max-age=0, el caché se deshabilitará, pero tenga en cuenta que el rendimiento de su instancia se reducirá sin el sistema de caché instalado, y no es recomendable.

Ejemplo para PHP:

header("Cache-Control: max-age=1");

Example for an .htaccess file if it is a static website:

Header add Cache-Control "max-age=1"

Example in Node.js (Works with the standard HTTP libraries and with the Express framework):

function (request, response) {
    response.setHeader('Cache-Control', 'max-age=1');
}

Nota

Advanced VPS customers: The Web Accelerator takes care of s-maxage.

Purga de caché

A continuación se muestran los distintos métodos disponibles para purgar objetos del Varnish cache

Purga del caché utilizando la petición HTTP PURGE/PURGEALL

Es posible purgar una caché de URL particular enviando una petición HTTP PURGE. También puede purgar toda el caché con una petición HTTP PURGEALL.

Nota

Las peticiones PURGE y PURGEALL sólo funcionarán desde su instancia Simple Hosting o Servidor. Por el momento, no pueden emitirse a distancia.

Por ejemplo, puede conectarse a su instancia o servidor utilizando la consola SSH y ejecutar un comando curl:

$ curl -X PURGE http://www.example.com/test/index.html
$ curl -X PURGEALL http://www.example.com/

Alternativamente, aquí tiene un script PHP que puede llamar desde un navegador para borrar el caché de una URL en particular:

<?php
/* purge.php
 * Purge a URL on this host
 */
header("Cache-Control: max-age=1"); // don't cache ourself

error_reporting(E_ALL);
ini_set("display_errors", 1);

// Set to true to hide varnish result
define("SILENT", false);

$path = isset($_GET["path"]) ? $_GET["path"] : "";

$purge_url = "http://" . $_SERVER["HTTP_HOST"] . "/$path";

if ( $ch = curl_init($purge_url) ) {
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PURGE");
    curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
    curl_setopt($ch, CURLOPT_NOBODY, SILENT);

    curl_exec($ch);
    curl_close($ch);
}
?>

Purgar el caché desde la interfaz web

Es posible purgar el caché directamente desde el panel de control de la instancia de Simple Hosting.

Una vez que haya iniciado una sesión, busque la sección «Varnish» y haga clic en el enlace para purgar todos los objetos del caché.

Si usted ve «200 = OK» esto significa que la purga fue exitosa.

Nota

El comando PURGEALL sólo se puede realizar cada 120 segundos. Esta limitación es para prevenir el abuso de la CPU del caché.

Purgar el caché cuando se despliega una rama de git

Para las instancias de Simple Hosting que están utilizando el repositorio git incorporado, la ejecución del comando de despliegue realizará automáticamente un PURGEALL al final del proceso de despliegue.

mod_expires

Su instancia incluye el módulo mod_expires en Apache2, que le permite establecer fechas de caducidad personalizadas para los elementos del caché en función de la hora en que se modificó por última vez el archivo fuente o de la hora de acceso del cliente.

Puede utilizar la directiva ExpiresDefault para establecer una hora de expiración para todos los elementos almacenados en el caché, o puede establecer la hora de expiración para tipos de archivo específicos utilizando ExpiresByType.

Para más información, consulte la documentación mod_expires Apache2.

Surrogate-key

Puede gestionar grupos de objetos en el caché utilizando el encabezado Surrogate-Key. Para registrar un objeto (por ejemplo, una página web o una imagen), simplemente incluya el encabezado en su respuesta con un valor que corresponda al grupo deseado. Después, podrá purgar el caché de este grupo añadiendo su encabezado al comando PURGE.

Por ejemplo, para añadir un objeto a un grupo con PHP :

header("Surrogate-Key: foo");

Or wish Node.js:

function (request, response) {
    response.setHeader('Surrogate-Key', 'foo');
}

Y luego para purgar todos los objetos de este grupo:

curl -X PURGE -H 'Surrogate-Key: foo' http://www.example.com/

También puede asociar un objeto con varios grupos y purgar varios grupos al mismo tiempo. Para ello, introduzca los nombres de los grupos separados por un espacio: Surrogate-Key: foo bar.

Cookies

Como regla general, las peticiones que contengan cookies no se servirán desde el caché. De la misma manera, las respuestas que escriban cookies con el encabezado set-cookie: no serán almacenadas en caché por nuestra plataforma.

Para servir objetos del caché que tengan en cuenta los cookies, puede utilizar un prefijo especial en su nombre: STYXKEY.

Cuando nuestra plataforma reciba una petición que contenga cookies con este prefijo, servirá al objeto caché si existe y no ha caducado, o almacenará en caché la respuesta del servidor si no contiene el set-cookie.

A continuación se muestra un ejemplo de utilización de un cookie con una clave que contiene el prefijo STYXKEY para recordar el idioma del usuario :

  1. Un navegador solicita la raíz de su sitio web (GET /)
  2. Su sitio o aplicación responde con el encabezado ``set-cookie: STYXKEY-lang=EN` → la respuesta no será almacenada en caché, ya que se utiliza set-cookie
  3. El navegador mantiene el cookie y vuelve a llamar a su sitio web (GET /)
  4. Su sitio o aplicación detecta la presencia del cookie STYXKEY-lang, por lo que el valor es EN, y responde con contenido en inglés y sin el encabezado set-cookie: → la respuesta será almacenada en caché por nuestra plataforma.
  5. El navegador solicita su sitio web otra vez (GET /)
  6. Nuestra plataforma detecta el cookie STYXKEY-lang=EN y sirve el objeto previamente almacenado en caché

Tenga en cuenta que el prefijo debe respetar el formato estándar de los cookies.

Para asegurarnos de que nuestra plataforma tiene en cuenta su cookie, se recomienda utilizar STYXKEY seguido de -, _ or ., y luego el nombre de su clave específica. Por ejemplo, estos formatos de nombre de cookie se tendrán en cuenta:

STYXKEY_language=fr
STYXKEY-language=en
STYXKEY.language=de

Sin embargo, estos formatos no se tendrán en cuenta..:

language-STYXKEY=en            # The cookie name must start with STYXKEY
STYX-KEY-language=en           # STYXKEY must be one word
styxkey_is_case_sensitive=true # STYXKEY must be in uppercase
STYXKEY=present                # STYXKEY must be a prefix and not a cookie name