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.