Varnish Cache es un potente proxy HTTP inverso que se utiliza para acelerar las aplicaciones web y que está disponible como software de código abierto. Varnish almacena en caché contenido estático y dinámico. Maneja todas las solicitudes entrantes antes de que lleguen al backend de su servidor web. Se encuentra entre un navegador web y un servidor web Apache o Nginx. Varnish cache almacena todas las solicitudes 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 esta publicación, le mostraremos cómo instalar Varnish caché con Apache y Nginx en CentOS 8.
Requisitos
- Un servidor que ejecuta CentOS 8.
- Se ha configurado una contraseña raíz en su servidor.
Cómo empezar
Antes de comenzar, se recomienda actualizar los paquetes de su sistema a la última versión. Puede actualizarlos ejecutando el siguiente comando:
dnf update -y
Una vez que todos los paquetes estén actualizados, puede continuar con el siguiente paso.
Instalar barniz
De forma predeterminada, el paquete Varnish se incluye en el repositorio predeterminado de CentOS 8. Puede instalarlo ejecutando el siguiente comando:
dnf install varnish -y
Después de instalar Varnish, edite el archivo de configuración predeterminado de Varnish y defina la dirección respaldada por el servidor web Nginx o Apache.
nano /etc/varnish/default.vcl
Cambie las siguientes líneas:
backend default { .host = "127.0.0.1"; .port = "8080"; }
Guarde y cierre el archivo cuando haya terminado.
Configurar barniz
De forma predeterminada, Varnish escucha en el puerto 6081. Por lo tanto, deberá configurar Varnish para escuchar en el puerto 80. Puede configurarlo editando el archivo varnish.service:
nano /lib/systemd/system/varnish.service
Busque la siguiente línea:
ExecStart=/usr/sbin/varnishd -a :6081 -f /etc/varnish/default.vcl -s malloc,256m
Se reemplazó con la siguiente línea:
ExecStart=/usr/sbin/varnishd -a :80 -f /etc/varnish/default.vcl -s malloc,256m
Guarde y cierre el archivo, luego vuelva a cargar el demonio systemd para aplicar los cambios:
systemctl daemon-reload
A continuación, inicie el servicio Varnish y habilítelo para que se inicie al reiniciar el sistema con el siguiente comando:
systemctl start varnish
systemctl enable varnish
También puede verificar el estado del Barniz con el siguiente comando:
systemctl status varnish
Deberías obtener el siguiente resultado:
? 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 punto, Varnish se inicia y escucha en el puerto 80. Puede verificarlo con el siguiente comando:
ss -antpl | grep varnishd
Deberías obtener el siguiente resultado:
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 puede continuar con el siguiente paso.
Instalar y configurar Nginx para trabajar con Varnish
Primero, deberá instalar el paquete Nginx en su servidor. Puede instalarlo con el siguiente comando:
dnf install nginx -y
Una vez instalado, deberá cambiar el puerto de escucha de Nginx de 80 a 8080. Puede hacerlo editando el archivo de configuración predeterminado de Nginx:
nano /etc/nginx/nginx.conf
Cambie las siguientes líneas:
listen 8080 default_server; listen [::]:8080 default_server;
Guarde y cierre el archivo, luego verifique el Nginx para cualquier error de sintaxis usando el siguiente comando:
nginx -t
Deberías obtener el siguiente resultado:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
A continuación, inicie el servicio Nginx y habilítelo para que se inicie al reiniciar el sistema:
systemctl start nginx
systemctl enable nginx
También puede verificar el puerto de escucha de Nginx con el siguiente comando:
ss -antpl | grep 8080
Deberías obtener el siguiente resultado:
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 solicitudes provenientes del puerto 80 al servidor web Nginx que está escuchando en el puerto 8080.
Puede verificar si el caché Varnish está funcionando o no con el siguiente comando:
curl -I http://localhost
Deberías obtener el siguiente resultado:
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 trabajar con Varnish
Primero, deberá instalar el paquete del servidor web Apache en su sistema. Puede instalarlo con el siguiente comando:
dnf install httpd -y
Después de instalar Apache, edite el archivo de configuración predeterminado de Apache y cambie el puerto de escucha de 80 a 8080.
nano /etc/httpd/conf/httpd.conf
Cambie la siguiente línea:
Listen 8080
Guarde y cierre el archivo, luego inicie el servicio Apache y habilítelo para que se inicie al reiniciar el sistema con el siguiente comando:
systemctl start httpd
systemctl enable httpd
También puede verificar el puerto de escucha de Apache con el siguiente comando:
ss -antpl | grep httpd
Deberías obtener el siguiente resultado:
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 solicitudes provenientes del puerto 80 al servidor web Apache que está escuchando en el puerto 8080.
Puede verificar si el caché Varnish está funcionando o no con el siguiente comando:
curl -I http://localhost
Deberías obtener el siguiente resultado:
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 Varnish Command Line
Varnish viene con varias utilidades útiles que lo ayudan a monitorear y controlar Varnish.
varnishadm es una utilidad de línea de comandos que se utiliza para enumerar los backends configurados.
varnishadm
Debería ver el siguiente resultado:
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, ejecute el siguiente comando para enumerar todos los backends:
varnish> backend.list
Debería ver el siguiente resultado:
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 solicitudes de los usuarios.
varnishlog
Deberías obtener el siguiente resultado:
* << 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 le brinda información sobre estadísticas en memoria, almacenamiento, subprocesos creados y objetos eliminados.
varnishstat
Debería ver la siguiente pantalla:
tapa de barniz
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ía ver la siguiente pantalla:
varnishhist
Varnishhist analiza los registros de barniz e imprime las últimas n solicitudes mediante su procesamiento.
varnishhist
Debería ver la siguiente pantalla:
Conclusión
En la guía anterior, aprendió cómo instalar y configurar Varnish caché con el servidor web Apache y Nginx. Ahora puede implementar la caché Varnish en el entorno de producción y acelerar el rendimiento de su sitio web. Siéntase libre de preguntarme si tiene alguna pregunta.