Varnish y página de mantenimiento con Código 503

·

Cuando se hacen migraciones en un sitio web (por ejemplo, una subida a producción o un cambio de versión) y hay que tener «la web apagada» unos minutos, los buscadores recomiendan que, para que eso no afecte a los resultados de búsqueda, se debe devolver un código 503.

Hay veces en los que hay que parar el servidor web, hacer algún cambio más además de cambiar la web… ¿te has preguntado cómo podría gestionar esto Varnish? Es cierto que Varnish es capaz de devolver una página «antigua» cacheada aunque el servidor no funciona (que para eso están los tiempos de gracia) pero en algunos casos en que las páginas son muy dinámicas eso no funciona del todo bien, lo que significa que podríamos hacer que el propio Varnish sea enl que devuelva nuestra página de aviso.

¿Cómo hacer esto? Es bastante sencillo… Para empezar crearemos un fichero VCL separado del actual (que podríamos llamar mantenimiento.vcl).

backend default {
  .host = "127.0.0.1";
  .port = "8080";
}
sub vcl_recv {
  error 503;
}
sub vcl_error {
  set obj.http.Content-Type = "text/html; charset=utf-8";
  synthetic {"
<html>
<head>
  <title>Estamos actualizando el sitio</title>
</head>
<body>
  <h1>Estamos actualizando el sitio web</h1>
  <p>Sentimos mucho las molestias. En estos momentos estamos actualizando parte de nuestro sitio web para ofrecer un mejor servicio...</p>
</body>
</html>
  "};
  return (deliver);
}

Con esto devolveríamos un código 503 en todo lo que se sirva además de ese «fantástico» mensaje de «estamos en mantenimiento».

¿Cómo poner esto en producción sin necesidad de tocar el fichero de configuración por defecto? Pues simplemente ejecutando los comandos adecuado (primero hacer saber de la existencia del fichero, y luego cargándolo):

varnishadm "vcl.load mantenimiento /etc/varnish/mantenimiento.vcl"
varnishadm "vcl.use mantenimiento"

Y tan sencillo como esto… luego se puede recuperar el Varnish anterior y voilà.

Comments

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *