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:

Estadísticas del barniz

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:

varnishtop

varnishhist

Varnishhist analiza los registros de varnish e imprime las últimas n peticiones según su procesamiento.

varnishhist

Deberías ver la siguiente pantalla:

varnishhist

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.

También te podría gustar...