Cómo instalar y configurar Varnish Cache 6 con Nginx en CentOS 8 / Rocky Linux 8

Varnish Cache es un acelerador HTTP de proxy inverso gratuito y de código abierto para sitios web y APIs. Puede instalarse como proxy inverso delante de cualquier servidor web que funcione con HTTP. Se sitúa entre el servidor web y el navegador y guarda las páginas web, las cookies y otros datos en la memoria. Esta caché se utilizará para servir todas las futuras peticiones de contenido exactamente similar. Esto aumentará la carga de la aplicación web y mejorará el rendimiento del servidor web en más de 300 veces.

En este tutorial, configuraremos el servidor Nginx como servidor backend y lo configuraremos para que escuche en el puerto 8080, y luego configuraremos la caché de Varnish para que escuche en el puerto HTTP 80 por defecto.

Requisitos previos

  • Un servidor que ejecute CentOS 8.
  • Una contraseña de root configurada el servidor.

Instalar y configurar el servidor web Nginx

En primer lugar, tendrás que instalar el servidor web Nginx en tu sistema. Puedes instalarlo con el siguiente comando:

dnf install nginx -y

Una vez instalado, inicia el servicio Nginx y habilítalo para que se inicie al reiniciar el sistema con el siguiente comando:

systemctl start nginx
systemctl enable nginx

Por defecto, el Nginx escucha en el puerto 80. Así que tendrás que configurar Nginx para que escuche en el puerto 80. Puedes configurarlo editando el archivo de configuración por defecto de Nginx:

nano /etc/nginx/nginx.conf

Busca las siguientes líneas:

        listen       80 default_server;
        listen       [::]:80 default_server;

Y, sustitúyelas por las siguientes líneas:

        listen       8080 default_server;
        listen       [::]:8080 default_server;

Guarda y cierra el archivo cuando hayas terminado. A continuación, reinicia el servicio Nginx para aplicar los cambios:

systemctl restart nginx

En este punto, el servidor web Nginx está instalado y escuchando en el puerto 8080. Puedes comprobarlo con el siguiente comando:

netstat -tpln | grep 8080

Deberías obtener la siguiente salida:

tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      30367/nginx: master 
tcp6       0      0 :::8080                 :::*                    LISTEN      30367/nginx: master 

Instalar Varnish Cache

Por defecto, el paquete Varnish está disponible en el repositorio por defecto de CentOS 8. Puedes instalarlo simplemente ejecutando el siguiente comando:

dnf module install varnish

Una vez instalado, inicia el servicio Varnish con el siguiente comando:

systemctl start varnish

También puedes verificar la versión instalada de la caché de Varnish con el siguiente comando:

varnishd -V

Deberías ver la siguiente salida:

varnishd (varnish-6.0.2 revision 0458b54db26cfbea79af45ca5c4767c7c2925a91)
Copyright (c) 2006 Verdens Gang AS
Copyright (c) 2006-2018 Varnish Software AS

Configurar Varnish para Nginx

A continuación, tendrás que configurar Varnish para que se ejecute en el puerto 80 para recibir las peticiones HTTP de los clientes. Puedes configurarlo editando el archivo de configuración por defecto de Varnish:

systemctl edit --full varnish

Busca la siguiente línea:

ExecStart=/usr/sbin/varnishd -a :6081 -f /etc/varnish/default.vcl -s malloc,256m

Y, sustitúyela por la siguiente línea:

ExecStart=/usr/sbin/varnishd -a :80 -f /etc/varnish/default.vcl -s malloc,256m

Guarda y cierra el archivo cuando hayas terminado.

A continuación, tendrás que definir el servidor backend para Varnish. Puedes hacerlo editando el archivo de configuración principal de Varnish /etc/varnish/default.vcl:

nano /etc/varnish/default.vcl

Cambia las siguientes líneas:

backend myserver {
    .host = "127.0.0.1";
    .port = "8080";
}

Guarda y cierra el archivo cuando hayas terminado. A continuación, recarga el demonio systemd con el siguiente comando:

systemctl daemon-reload

A continuación, reinicia el servicio Varnish y permite que se inicie al reiniciar el sistema con el siguiente comando:

systemctl restart varnish
systemcl enable varnish

También puedes verificar el estado de Varnish con el siguiente comando:

systemctl status varnish

Deberías obtener la siguiente salida:

? varnish.service - Varnish Cache, a high-performance HTTP accelerator
   Loaded: loaded (/etc/systemd/system/varnish.service; disabled; vendor preset: disabled)
   Active: active (running) since Sat 2020-08-29 09:36:58 EDT; 12s ago
  Process: 30421 ExecStart=/usr/sbin/varnishd -a :80 -f /etc/varnish/default.vcl -s malloc,256m (code=exited, status=0/SUCCESS)
 Main PID: 30424 (varnishd)
    Tasks: 217
   Memory: 91.8M
   CGroup: /system.slice/varnish.service
           ??30424 /usr/sbin/varnishd -a :80 -f /etc/varnish/default.vcl -s malloc,256m
           ??30434 /usr/sbin/varnishd -a :80 -f /etc/varnish/default.vcl -s malloc,256m

Aug 29 09:36:57 centos8 systemd[1]: Starting Varnish Cache, a high-performance HTTP accelerator...
Aug 29 09:36:58 centos8 varnishd[30421]: Debug: Version: varnish-6.0.2 revision 0458b54db26cfbea79af45ca5c4767c7c2925a91
Aug 29 09:36:58 centos8 varnishd[30421]: Debug: Platform: Linux,4.18.0-193.6.3.el8_2.x86_64,x86_64,-junix,-smalloc,-sdefault,-hcritbit
Aug 29 09:36:58 centos8 varnishd[30424]: Version: varnish-6.0.2 revision 0458b54db26cfbea79af45ca5c4767c7c2925a91
Aug 29 09:36:58 centos8 varnishd[30424]: Platform: Linux,4.18.0-193.6.3.el8_2.x86_64,x86_64,-junix,-smalloc,-sdefault,-hcritbit
Aug 29 09:36:58 centos8 varnishd[30421]: Debug: Child (30434) Started
Aug 29 09:36:58 centos8 varnishd[30424]: Child (30434) Started
Aug 29 09:36:58 centos8 varnishd[30424]: Child (30434) said Child starts
Aug 29 09:36:58 centos8 systemd[1]: Started Varnish Cache, a high-performance HTTP accelerator.

Ahora puedes verificar el puerto de escucha de Nginx y Varnish con el siguiente comando:

netstat -tpln | grep 80

Deberías ver la siguiente salida:

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      30424/varnishd      
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      30367/nginx: master 
tcp6       0      0 :::80                   :::*                    LISTEN      30424/varnishd      
tcp6       0      0 :::8080                 :::*                    LISTEN      30367/nginx: master 

Configurar SELinux y Firewall

Por defecto, SELinux está activado en CentOS 8. Así que tendrás que configurar SELinux para Varnish. Puedes configurarlo con el siguiente comando:

setsebool -P httpd_can_network_connect 1

A continuación, tendrás que permitir el puerto 80 a través de firewalld. Puedes hacerlo con el siguiente comando:

firewall-cmd --permanent --zone public --add-port 80/tcp
firewall-cmd --reload

Una vez que hayas terminado, puedes pasar al siguiente paso.

Probar la caché de Varnish

En este punto, la caché de Varnish está instalada y configurada con el servidor web Nginx. Ahora, es el momento de probar si la caché de Varnish funciona o no.

Puedes probarlo utilizando el comando curl como se muestra a continuación:

curl -I http://localhost

Deberías ver la siguiente salida:

																																																																																																																																																																																																																																																																																																																																																																		
HTTP/1.1 200 OK
Server: nginx/1.14.1
Date: Sat, 29 Aug 2020 13:53:44 GMT
Content-Type: text/html; charset=UTF-8
X-Powered-By: PHP/7.2.24
X-Varnish: 32800
Age: 0
Via: 1.1 varnish (Varnish/6.0)
Accept-Ranges: bytes
Connection: keep-alive

Enhorabuena! has instalado con éxito Varnish Cache con Nginx en CentOS 8.

Scroll al inicio