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 de 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 apache2Ahora, 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.conf y cambia el puerto por defecto de 80 a 8080:
# nano /etc/apache2/ports.confCambia la siguiente línea:
Listen 8080Guarda y cierra el archivo y entonces edita el archivo de configuración virtual host de Apache:
# nano /etc/apache2/sites-available/000-default.confCambia la siguiente línea:
<VirtualHost *:8080>Guarda y cierra el archivo y después reinicia el servicio Apache para aplicar los cambios:
# systemctl restart apache2A continuación, verifica el puerto de escucha de Apache utilizando el siguiente comando:
# ss -antpl | grep 8080Deberí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 -yUna 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 varnishPor 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.vclCambia 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/varnishCambia 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.serviceCambia 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,256mGuarda y cierra el archivo y después carga de nuevo el demonio systemd para aplicar los cambios:
# systemctl daemon-reloadDespués, reinicia el servicio de Varnish para aplicar los cambios:
# systemctl restart varnishAhora, comprueba el puerto de escucha de Varnish con el siguiente comando:
# ss -antpl | grep 80Deberí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-ipSi 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.