Varnish Cache es un proxy HTTP gratuito y de código abierto. Se trata de un acelerador HTTP diseñado para sitios web dinámicos tráfico alto. Está situado entre el cliente y el servidor web Apache para servir el tráfico web de forma rápida. También se puede utilizar como balanceador de carga si utilizas varios servidores. Almacena en caché los contenidos a los que los usuarios acceden con frecuencia y los guarda en su memoria. Esto aumenta el rendimiento del sitio web.
En este tutorial te explicamos cómo configurar Apache con Varnish Cache en Ubuntu 20.04.
Requisitos Previos
- Un servidor Cloud corriendo con Ubuntu 20.04.
- Un usuario no root con privilegios Sudo.
Instala el Servidor Web Apache
Por defecto, el paquete de Apache está incluido en el repositorio por defecto de Ubuntu. Puedes instalarlo usando el siguiente comando:
# apt-get install apache2 -y
Una vez que Apache esté instalado, inicia el servicio de Apache y habilítalo para que se inicie con un reinicio del sistema:
# systemctl start apache2 && systemctl enable apache2
Ahora, abre tu navegador web y accede a la página de test de Apache con la URL http://your-server-ip. Deberías ver la siguiente pantalla:
Cambia el puerto por defecto de Apache
Por defecto, Varnish utiliza el puerto HTTP 80. Como vas a utilizar Varnish como servidor front-end, necesitarás configurar Apache para que escuche en el puerto 8080.
Para ello, primero edita el fichero Apache ports.com y cambia el puerto por defecto de 80 a 8080:
# nano /etc/apache2/ports.conf
Cambia la siguiente línea:
Listen 8080
Guarda y cierra el archivo y entonces edita el archivo de configuración virtual host de Apache:
# nano /etc/apache2/sites-available/000-default.conf
Cambia la siguiente línea:
<VirtualHost *:8080>
Guarda y cierra el archivo y después reinicia el servicio Apache para aplicar los cambios:
# systemctl restart apache2
A continuación, verifica el puerto de escucha de Apache utilizando el siguiente comando:
# ss -antpl | grep 8080
Deberías obtener el siguiente resultado:
LISTEN 0 511 *:8080 *:* users:(("apache2",pid=2194,fd=4),("apache2",pid=2193,fd=4),("apache2",pid=2192,fd=4))
Instala Varnish
Ahora ya puedes instalar el paquete Varnish utilizando el siguiente comando:
# apt-get install varnish -y
Una vez que Varnish esté instalado, inicia el servicio Varnish y habilítalo para que se inicie con un reinicio del sistema:
# systemctl start varnish
# systemctl enable varnish
Por defecto, Varnish escucha en los puertos 6081 y 6082. Puedes comprobarlo con el siguiente comando:
# ss -antpl | grep varnish
Éste es el resultado que deberías ver:
LISTEN 0 1024 0.0.0.0:6081 0.0.0.0:* users:(("cache-main",pid=3003,fd=3),("varnishd",pid=2974,fd=3))
LISTEN 0 10 127.0.0.1:6082 0.0.0.0:* users:(("varnishd",pid=2974,fd=8))
LISTEN 0 1024 [::]:6081 [::]:* users:(("cache-main",pid=3003,fd=4),("varnishd",pid=2974,fd=4))
LISTEN 0 10 [::1]:6082 [::]:* users:(("varnishd",pid=2974,fd=7))
Configura Varnish como Proxy Inverso para Apache
En esta sección, configurarás Varnish para que escuche en el puerto 80 y para que cada petición del cliente sea enviada al servidor Apache escuchando en el puerto 8080.
Primero, edita el archivo de configuración default.vcl de Varnish:
# nano /etc/varnish/default.vcl
Cambia las siguientes líneas:
backend default {
.host = "127.0.0.1";
.port = "8080";
}
Guarda y cierra el archivo.
Para continuar, edita el archivo /etc/default/varnish y cambia el puerto por defecto de 6081 por 80:
# nano /etc/default/varnish
Cambia el puerto de 6081 a 80:
DAEMON_OPTS="-a :80 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-S /etc/varnish/secret \
-s malloc,256m"
Guarda y cierra el archivo.
Después, necesitarás editar el archivo de servicio de Varnish /lib/systemd/system/varnish.service:
# nano /lib/systemd/system/varnish.service
Cambia el puerto de 6081 a 80 como se muestra más abajo:
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
Guarda y cierra el archivo y después carga de nuevo el demonio sustemd para aplicar los cambios:
# systemctl daemon-reload
Después, reinicia el servicio de Varnish para aplicar los cambios:
# systemctl restart varnish
Ahora, comprueba el puerto de escucha de Varnish con el siguiente comando:
# ss -antpl | grep 80
Deberías obtener el siguiente resultado:
LISTEN 0 1024 0.0.0.0:80 0.0.0.0:* users:(("cache-main",pid=8522,fd=3),("varnishd",pid=8494,fd=3))
LISTEN 0 1024 [::]:80 [::]:* users:(("cache-main",pid=8522,fd=4),("varnishd",pid=8494,fd=4))
Verifica el Caché de Varnish
En este punto, Varnish está instalado y configurado como proxy inverso para Apache.
Puedes verificar esto utilizando el siguiente comando:
# curl -I http://your-server-ip
Si todo está bien, deberías ver el header HTTP de Varnish:
HTTP/1.1 200 OK
Date: Tue, 27 Jul 2021 15:57:01 GMT
Server: Apache/2.4.41 (Ubuntu)
Last-Modified: Tue, 27 Jul 2021 15:50:01 GMT
Vary: Accept-Encoding
Content-Type: text/html
X-Varnish: 2
Age: 0
Via: 1.1 varnish (Varnish/6.2)
ETag: W/"2aa6-5c81cd2a0a40c-gzip"
Accept-Ranges: bytes
Content-Length: 10918
Connection: keep-alive
También puedes comprobar el log de Varnish para más información:
# varnishncsa
Éste es el resultado que deberías obtener:
106.213.219.132 - - [27/Jul/2021:15:57:31 +0000] "GET http://69.87.221.34/ HTTP/1.1" 304 0 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36"
106.213.219.132 - - [27/Jul/2021:15:57:41 +0000] "GET http://69.87.221.34/ HTTP/1.1" 304 0 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36"
Conclusión
¡Has configurado con éxito Varnish como proxy inverso para Apache en Ubuntu 20.04!
Ya puedes implementar esta configuración en el entorno de producción para aumentar el rendimiento de tu website.