Instalar Varnish Cache 6 para Apache/Nginx en CentOS 8
Varnish Cache es un potente proxy HTTP inverso utilizado para acelerar las aplicaciones web que está disponible como software de código abierto. Varnish almacena en caché tanto el contenido estático como el dinámico. Gestiona todas las peticiones entrantes antes de que lleguen a tu servidor web. Se sitúa entre el navegador web y el servidor web Apache o Nginx. La caché de Varnish almacena todas las peticiones de páginas entrantes en la memoria para que los servidores web no tengan que crear la misma página web una y otra vez.
En este post, te mostraremos cómo instalar la caché de Varnish con Apache y Nginx en CentOS 8.
Requisitos previos
- Un servidor con CentOS 8.
- Una contraseña de root configurada en tu servidor.
Cómo empezar
Antes de empezar, se recomienda actualizar los paquetes del sistema a la última versión. Puedes actualizarlos ejecutando el siguiente comando:
dnf update -y
Una vez actualizados todos los paquetes, puedes pasar al siguiente paso.
Instalar Varnish
Por defecto, el paquete Varnish está incluido en el repositorio por defecto de CentOS 8. Puedes instalarlo ejecutando el siguiente comando:
dnf install varnish -y
Después de instalar Varnish, edita el archivo de configuración por defecto de Varnish y define la dirección de respaldo del servidor web Nginx o Apache.
nano /etc/varnish/default.vcl
Cambia las siguientes líneas:
backend default { .host = "127.0.0.1"; .port = "8080"; }
Guarda y cierra el archivo cuando hayas terminado.
Configurar Varnish
Por defecto, Varnish escucha en el puerto 6081. Así que tendrás que configurar Varnish para que escuche en el puerto 80. Puedes configurarlo editando el archivo varnish.service:
nano /lib/systemd/system/varnish.service
Encuentra la siguiente línea:
ExecStart=/usr/sbin/varnishd -a :6081 -f /etc/varnish/default.vcl -s malloc,256m
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 y luego recarga el demonio systemd para aplicar los cambios:
systemctl daemon-reload
A continuación, inicia el servicio Varnish y permite que se inicie al reiniciar el sistema con el siguiente comando:
systemctl start varnish
systemctl enable varnish
También puedes comprobar 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 (/usr/lib/systemd/system/varnish.service; disabled; vendor preset: disabled) Active: active (running) since Fri 2021-03-12 04:17:32 EST; 4s ago Process: 6391 ExecStart=/usr/sbin/varnishd -a :80 -f /etc/varnish/default.vcl -s malloc,256m (code=exited, status=0/SUCCESS) Main PID: 6392 (varnishd) Tasks: 217 Memory: 99.5M CGroup: /system.slice/varnish.service ??6392 /usr/sbin/varnishd -a :80 -f /etc/varnish/default.vcl -s malloc,256m ??6402 /usr/sbin/varnishd -a :80 -f /etc/varnish/default.vcl -s malloc,256m Mar 12 04:17:32 masternode systemd[1]: Starting Varnish Cache, a high-performance HTTP accelerator... Mar 12 04:17:32 masternode varnishd[6391]: Debug: Version: varnish-6.0.6 revision 29a1a8243dbef3d973aec28dc90403188c1dc8e7 Mar 12 04:17:32 masternode varnishd[6391]: Debug: Platform: Linux,4.18.0-193.6.3.el8_2.x86_64,x86_64,-junix,-smalloc,-sdefault,-hcritbit Mar 12 04:17:32 masternode varnishd[6392]: Version: varnish-6.0.6 revision 29a1a8243dbef3d973aec28dc90403188c1dc8e7 Mar 12 04:17:32 masternode varnishd[6392]: Platform: Linux,4.18.0-193.6.3.el8_2.x86_64,x86_64,-junix,-smalloc,-sdefault,-hcritbit Mar 12 04:17:32 masternode varnishd[6391]: Debug: Child (6402) Started Mar 12 04:17:32 masternode varnishd[6392]: Child (6402) Started Mar 12 04:17:32 masternode varnishd[6392]: Child (6402) said Child starts Mar 12 04:17:32 masternode systemd[1]: Started Varnish Cache, a high-performance HTTP accelerator.
En este momento, Varnish está iniciado y escuchando en el puerto 80. Puedes comprobarlo con el siguiente comando:
ss -antpl | grep varnishd
Deberías obtener la siguiente salida:
LISTEN 0 10 127.0.0.1:34977 0.0.0.0:* users:(("varnishd",pid=1532,fd=11)) LISTEN 0 128 0.0.0.0:80 0.0.0.0:* users:(("cache-main",pid=1542,fd=6),("varnishd",pid=1532,fd=6)) LISTEN 0 128 [::]:80 [::]:* users:(("cache-main",pid=1542,fd=7),("varnishd",pid=1532,fd=7)) LISTEN 0 10 [::1]:34909 [::]:* users:(("varnishd",pid=1532,fd=10))
En este punto, Varnish está instalado y configurado. Ahora puedes pasar al siguiente paso.
Instalar y configurar Nginx para que funcione con Varnish
En primer lugar, tendrás que instalar el paquete Nginx en tu servidor. Puedes instalarlo con el siguiente comando:
dnf install nginx -y
Una vez instalado, tendrás que cambiar el puerto de escucha de Nginx de 80 a 8080. Puedes hacerlo editando el archivo de configuración por defecto de Nginx:
nano /etc/nginx/nginx.conf
Cambia las siguientes líneas:
listen 8080 default_server; listen [::]:8080 default_server;
Guarda y cierra el archivo y luego verifica que Nginx no tenga ningún error de sintaxis con el siguiente comando:
nginx -t
Deberías obtener la siguiente salida:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
A continuación, inicia el servicio Nginx y habilítalo para que se inicie al reiniciar el sistema:
systemctl start nginx
systemctl enable nginx
También puedes verificar el puerto de escucha de Nginx con el siguiente comando:
ss -antpl | grep 8080
Deberías obtener la siguiente salida:
LISTEN 0 128 0.0.0.0:8080 0.0.0.0:* users:(("nginx",pid=5569,fd=8),("nginx",pid=5568,fd=8)) LISTEN 0 128 [::]:8080 [::]:* users:(("nginx",pid=5569,fd=9),("nginx",pid=5568,fd=9))
En este punto, la caché de Varnish está instalada y configurada para reenviar todas las peticiones que llegan por el puerto 80 al servidor web Nginx, que está escuchando en el puerto 8080.
Puedes verificar si la caché de Varnish funciona o no con el siguiente comando:
curl -I http://localhost
Deberías obtener la siguiente salida:
HTTP/1.1 200 OK Server: nginx/1.14.1 Date: Fri, 12 Mar 2021 09:18:32 GMT Content-Type: text/html Content-Length: 4057 Last-Modified: Mon, 07 Oct 2019 21:16:24 GMT ETag: "5d9bab28-fd9" X-Varnish: 2 Age: 0 Via: 1.1 varnish (Varnish/6.0) Accept-Ranges: bytes Connection: keep-alive
Instalar y configurar Apache para que funcione con Varnish
En primer lugar, tendrás que instalar el paquete del servidor web Apache en tu sistema. Puedes instalarlo con el siguiente comando:
dnf install httpd -y
Después de instalar Apache, edita el archivo de configuración por defecto de Apache y cambia el puerto de escucha de 80 a 8080.
nano /etc/httpd/conf/httpd.conf
Cambia la siguiente línea:
Listen 8080
Guarda y cierra el archivo y, a continuación, inicia el servicio de Apache y permite que se inicie al reiniciar el sistema con el siguiente comando:
systemctl start httpd
systemctl enable httpd
También puedes verificar el puerto de escucha de Apache con el siguiente comando:
ss -antpl | grep httpd
Deberías obtener la siguiente salida:
LISTEN 0 128 *:8080 *:* users:(("httpd",pid=7556,fd=4),("httpd",pid=7555,fd=4),("httpd",pid=7554,fd=4),("httpd",pid=7552,fd=4))
En este punto, la caché de Varnish está instalada y configurada para reenviar todas las peticiones que llegan por el puerto 80 al servidor web Apache, que está escuchando en el puerto 8080.
Puedes verificar si la caché de Varnish funciona o no con el siguiente comando:
curl -I http://localhost
Deberías obtener la siguiente salida:
Date: Fri, 12 Mar 2021 09:21:14 GMT Server: Apache/2.4.37 (centos) Content-Location: index.html.zh-CN Vary: negotiate,accept-language TCN: choice Last-Modified: Fri, 14 Jun 2019 03:37:43 GMT ETag: "fa6-58b405e7d6fc0;5bd5365602e05" Accept-Ranges: bytes Content-Length: 4006 Content-Type: text/html; charset=UTF-8 Content-Language: zh-cn X-Varnish: 2 Age: 0 Via: 1.1 varnish (Varnish/6.0) Connection: keep-alive
Trabajar con la línea de comandos de Varnish
Varnish viene con varias utilidades que te ayudan a monitorizar y controlar Varnish.
varnishadm es una utilidad de línea de comandos que se utiliza para listar los backends configurados.
varnishadm
Deberías ver la siguiente salida:
200 ----------------------------- Varnish Cache CLI 1.0 ----------------------------- Linux,4.18.0-193.6.3.el8_2.x86_64,x86_64,-junix,-smalloc,-sdefault,-hcritbit varnish-6.0.6 revision 29a1a8243dbef3d973aec28dc90403188c1dc8e7 Type 'help' for command list. Type 'quit' to close CLI session.
Ahora, ejecuta el siguiente comando para listar todos los backends:
varnish> backend.list
Deberías ver la siguiente salida:
200 Backend name Admin Probe Last updated boot.default probe Healthy (no probe) Sat, 13 Mar 2021 03:00:02 GMT
varnishlog
La utilidad varnishlog se utiliza para mostrar los registros de todas las peticiones de los usuarios.
varnishlog
Deberías obtener la siguiente salida:
* << BeReq >> 6 - Begin bereq 5 fetch - VCL_use boot - Timestamp Start: 1615604631.507187 0.000000 0.000000 - BereqMethod GET - BereqURL / - BereqProtocol HTTP/1.1 - BereqHeader Host: 69.87.218.214 - BereqHeader Upgrade-Insecure-Requests: 1 - BereqHeader User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36 - BereqHeader Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 - BereqHeader Accept-Language: en-GB,en-US;q=0.9,en;q=0.8 - BereqHeader X-Forwarded-For: 106.213.193.241 - BereqHeader Accept-Encoding: gzip - BereqHeader X-Varnish: 6 - VCL_call BACKEND_FETCH - VCL_return fetch - BackendOpen 31 boot.default 127.0.0.1 8080 127.0.0.1 58860 - BackendStart 127.0.0.1 8080 - Timestamp Bereq: 1615604631.507458 0.000270 0.000270 - Timestamp Beresp: 1615604631.507844 0.000657 0.000386 - BerespProtocol HTTP/1.1 - BerespStatus 200 - BerespReason OK - BerespHeader Server: nginx/1.14.1 - BerespHeader Date: Sat, 13 Mar 2021 03:03:51 GMT - BerespHeader Content-Type: text/html - BerespHeader Content-Length: 4057 - BerespHeader Last-Modified: Mon, 07 Oct 2019 21:16:24 GMT
varnishstat
El comando varnishstat te proporciona información sobre las estadísticas en memoria, el almacenamiento, los hilos creados y los objetos eliminados.
varnishstat
Deberías ver la siguiente pantalla:
varnishtop
El comando varnishtop lee los registros de memoria compartida de varnishd y presenta una lista continuamente actualizada de las entradas de registro más frecuentes.
varnishtop
Deberías ver la siguiente pantalla:
varnishhist
Varnishhist analiza los registros de varnish e imprime las últimas n peticiones según su procesamiento.
varnishhist
Deberías ver la siguiente pantalla:
Conclusión
En la guía anterior, has aprendido a instalar y configurar la caché de Varnish con el servidor web Apache y Nginx. Ahora puedes implementar la caché Varnish en el entorno de producción y acelerar el rendimiento de tu sitio web. No dudes en preguntarme si tienes alguna duda.