Cómo instalar Varnish en Ubuntu 16.04

varnish4_banner

Cuando una tarea como instalar un Varnish se puede volver un locura o que quieras desistir en el intento aunque estés siguiendo la documentación oficial… Sí, eso puede pasar.

En este caso nos encontramos con una Ubuntu 16.04 LTS y una versión 4 de Varnish instalada directamente desde los repositorios de Ubuntu.

Suena bien y sencillo ¿no?

Pues os animo a seguir este artículo en el que explico cómo instalar y configurar Varnish en Ubuntu 16.04 para que escuche en el puerto 80.

El entorno:

Sistema: Ubuntu 16.04

Servidor Web: Apache/2.4.18 (Completamente operativo y con vhosts ya configurados)

Instalar Varnish:

Esta es la parte más sencilla con un simple comando lo tendremos instalado.

sudo apt-get install varnish

Ficheros de configuración de Varnish:

  • /etc/default/varnish
  • /etc/varnish/default.vcl

En la teoría estos son los dos ficheros que deberíamos configurar, así que hagámoslo

Editando el fichero /etc/default/varnish

Ejecutamos el siguiente comando para abrir y editar el fichero varnish que está en la ruta /etc/default/

sudo nano /etc/default/varnish

Borramos su contenido y lo dejamos tal y como muestro ya que queremos que el Varnish escuche en el puerto 80:

START=yes
NFILES=131072
MEMLOCK=82000
DAEMON_OPTS="-a :80 \
             -T localhost:6082 \
             -f /etc/varnish/default.vcl \
             -S /etc/varnish/secret \
             -s malloc,256m"

Ahora editamos el fichero default.vcl que se encuentra en /etc/varnish/

sudo nano /etc/varnish/default.vcl

Borramos su contenido y lo dejamos como muestro ya que configuraremos el Apache para que escuche en el puerto 8080:

vcl 4.0;
# Default backend definition. Set this to point to your content server.
backend default {
    .host = "la.Ip.de.tu.servidor";
    .port = "8080";
}

sub vcl_recv {
    # Happens before we check if we have this in cache already.
    #
    # Typically you clean up the request here, removing cookies you don't need,
    # rewriting the request, etc.
}

sub vcl_backend_response {
    # Happens after we have read the response headers from the backend.
    #
    # Here you clean the response headers, removing silly Set-Cookie headers
    # and other mistakes your backend does.
}

sub vcl_deliver {
    # Happens when we have all the pieces we need, and are about to send the
    # response to the client.
    #
    # You can do accounting or modifying the final object here.
}

Llegados a este punto, simplemente tendríamos que configurar el Apache para que escuche en el puerto 8080 y editar los vhosts cambiando el puerto 80 por el 8080, reiniciaríamos los servicios y a funcionar… PUES NO!!!!

Seguimos con Varnish…

¿Qué pasa? Si ejecutamos ahora Varnish no escuchará en el puerto 80, se nos iniciará escuchando en el puerto 6081, ya que el fichero /etc/default/varnish sólo es leído como el script /etc/init.d/varnish pero no por systemd, así que vamos a seguir haciendo unos cambios.

Copiamos el fichero varnish.service a /etc/systemd/system/

sudo cp /lib/systemd/system/varnish.service /etc/systemd/system/

Editamos el fichero:

sudo nano /etc/systemd/system/varnish.service

Dentro de este fichero dejaremos lo que os muestro:

[Unit]
Description=Varnish HTTP accelerator
Documentation=https://www.varnish-cache.org/docs/4.1/ man:varnishd

[Service]
Type=simple
LimitNOFILE=131072
LimitMEMLOCK=82000
ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :80 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m
ExecReload=/usr/share/varnish/reload-vcl
ProtectSystem=full
ProtectHome=true
PrivateTmp=true
PrivateDevices=true

[Install]
WantedBy=multi-user.target

¿Qué he cambiado?

En la línea que aparece ExecStart y se muestra el flag -a he modificado :6081 por :80 que es en el puerto que quiero que escuche el Varnish.

Ahora ya tenemos nuestro Varnish configurado así que ejecutaremos el siguiente comando:

sudo systemctl daemon-reload

Configurando Apache

Los ficheros principales a modificar si no tenéis ningún virtual host (si los tenéis estoy seguro que sabéis que tenéis que modificar).

  • /etc/apache2/ports.conf
  • /etc/apache2/sites-available/000-default.conf

Editando el fichero ports.conf de Apache2.

Modificaremos este fichero para que nuestro Apache2 escuche las peticiones en el puerto 8080.

sudo nano /etc/apache2/ports.conf

Modificamos la variable Listen 80 por Listen 8080

Editando el fichero 000-default.conf.

En el caso de que no tengamos ningún virtual host habilitado o etcétera, editaremos este fichero, modificando la línea:

<VirtualHost *:80>

Por esta:

<VirtualHost *:8080>

Reiniciando los servicios

Ahora si podemos reiniciar los servicios y comenzar a realizar pruebas para ver que todo funciona correctamente.

sudo systemctl reload varnish.service
sudo service apache2 restart

Verificar que Varnish se está ejecutando en el puerto 80:

Si queremos comprobar que Varnish está cogiendo correctamente la configuración y corriendo en el puerto 80, podemos ejecutar el siguiente comando:

sudo ps aux |grep varnishd

Nos debería devolver algo así:

/usr/sbin/varnishd -j unix,user=vcache -F -a :80 -T localhost:6082 -f /etc/varnish

En los datos que nos devuelve vemos el flag -a y :80 por tanto se está ejecutando correctamente en el puerto 80.

Cambios en caso de tener un Virtual Host:

Pongamos el caso que tenemos configurado el virtual host boscolopez.com y que este lo tenemos en el fichero boscolopez.com.conf dentro del directorio /etc/apache2/sites-available/

sudo nano /etc/apache2/sites-available/boscolopez.com.conf

Editaremos la línea donde nos pone <VirtualHost *:80> y la sustituiremos por <VirtualHost *:8080>

Para verificar que nos funciona nuestro Virtual Host correctamente con Varnish, podemos ejecutar lo siguiente:

curl -H "Host: www.boscolopez.com" http://localhost:80/

Esto nos tendría que devolver nuestra web.

¿No nos fiamos o queremos algo externo que nos confirme que Varnish está funcionando?

Podéis acceder a la siguiente Web y poner la url de vuestro site http://www.isvarnishworking.com/

 

Sobre Bosco López

/dev/null

Te puede interesar también

Notificaciones de Nagios vía Telegram

En este artículo veremos como configurar nuestro Nagios para que nos informe de las distintas …

2 Comentarios

  1. Genio! ídolo! pude instalarlo siguiendo tu tutorial de tu gran blog!, te sigo maestro! 🙂
    ya que estamos en el tema, te consulto… sabes como seguir con soporte de trafico HTTPS?, se que Varnish no lo soporta…

    Saludos

Deja una respuesta

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.