bolt Valebyte VPS desde $4/mes — NVMe, despliegue en 60s.

Obtener VPS arrow_forward
eco Principiante Tutorial/Cómo hacer

Instalación y Configuración de V

calendar_month Jul 28, 2026 schedule 22 min de lectura visibility 33 vistas
Установка и настройка Varnish Cache на VPS для ускорения веб-сайтов
info

¿Necesitas un servidor para esta guía? Ofrecemos servidores dedicados y VPS en más de 50 países con configuración instantánea.

¿Necesitas un VPS para esta guía?

Explore otras opciones de servidores dedicados en

Instalación y configuración de Varnish Cache en un VPS para acelerar sitios web

TL;DR

En esta guía detallada, configuraremos Varnish Cache paso a paso en un VPS para acelerar significativamente la carga de su sitio web, reducir la carga del servidor y mejorar la experiencia del usuario. Varnish actuará como un acelerador HTTP de alto rendimiento, almacenando en caché contenido estático y dinámico y entregándolo directamente a los usuarios sin recurrir al servidor web principal.

  • Configuramos Varnish Cache 7.x para funcionar como proxy inverso y acelerador HTTP.
  • Integramos Varnish con un servidor web (por ejemplo, Nginx) y un terminador SSL (Caddy).
  • Garantizamos la seguridad del servidor con UFW y Fail2ban.
  • Proporcionamos comandos y archivos de configuración listos para usar.
  • Incluimos una estrategia de copia de seguridad y consejos de mantenimiento.
  • Explicamos qué configuración de VPS es óptima para Varnish Cache.

Qué configuramos y por qué

Esquema: Qué configuramos y por qué
Esquema: Qué configuramos y por qué

En esta guía, nos centraremos en la instalación y configuración detallada de Varnish Cache en un servidor privado virtual (VPS). Varnish es un potente acelerador HTTP que funciona como un servidor proxy inverso. Su tarea principal es el almacenamiento en caché del contenido solicitado con frecuencia, lo que le permite entregar respuestas directamente a los clientes sin sobrecargar su servidor web principal (Apache, Nginx, etc.).

Como resultado de una configuración exitosa, obtendrá:

  • Aceleración significativa de la carga del sitio web: Varnish procesa las solicitudes mucho más rápido que los servidores web tradicionales, especialmente para contenido estático y páginas que rara vez cambian.
  • Reducción de la carga del servidor: Menos solicitudes llegan a su servidor web y base de datos, lo que libera recursos para procesar tareas más complejas o un mayor número de solicitudes únicas.
  • Escalabilidad mejorada: Su servidor podrá soportar una carga mucho mayor y picos de tráfico, ya que Varnish asume una parte significativa del trabajo.
  • Mayor tolerancia a fallos: En caso de indisponibilidad temporal del backend, Varnish puede seguir entregando contenido en caché, asegurando una disponibilidad parcial del sitio.

Alternativas y por qué autoalojado en un VPS

Existen varios enfoques para acelerar los sitios web:

  • CDN (Content Delivery Network): Redes globales de servidores que almacenan en caché contenido y lo entregan a los usuarios desde el nodo más cercano. Ideal para audiencias geográficamente distribuidas. Ejemplos: Cloudflare, Akamai, Amazon CloudFront.
  • Almacenamiento en caché a nivel de servidor web: Nginx y Apache tienen módulos de almacenamiento en caché incorporados. Son efectivos, pero menos flexibles y potentes para el almacenamiento en caché HTTP puro que Varnish.
  • Almacenamiento en caché a nivel de aplicación: Plugins para CMS (WordPress, Joomla), frameworks (Laravel, Symfony) o lógica de aplicación personalizada. Esto permite almacenar en caché datos de la base de datos o páginas generadas.

La elección de Varnish autoalojado en un VPS tiene varias ventajas, especialmente para los propietarios de servidores que necesitan control total y optimización de costos:

  • Control total: Usted controla completamente la configuración de Varnish, VCL (Varnish Configuration Language), las reglas de caché y la lógica. Esto es crítico para aplicaciones complejas.
  • Ahorro: Para muchos proyectos, el costo de un VPS + Varnish puede ser significativamente menor que los pagos mensuales por CDN o servicios de caché gestionados, especialmente con altos volúmenes de tráfico.
  • Optimización para una tarea específica: Puede ajustar Varnish a las especificidades de su aplicación, lo que a menudo es imposible con las soluciones CDN genéricas.
  • Facilidad de integración: Varnish se integra fácilmente con la infraestructura existente en un VPS.

En este tutorial, nos centraremos en los pasos prácticos para que pueda implementar y configurar Varnish por su cuenta, utilizando las versiones de software actuales y las mejores prácticas.

Qué configuración de VPS se necesita para esta tarea

Esquema: Qué configuración de VPS se necesita para esta tarea
Esquema: Qué configuración de VPS se necesita para esta tarea

Los requisitos de VPS para Varnish Cache dependen principalmente del volumen de contenido a almacenar en caché, el tráfico esperado y la complejidad de las reglas VCL. Varnish es conocido por su alto rendimiento y uso eficiente de los recursos, especialmente la memoria RAM.

Requisitos mínimos (para sitios/proyectos pequeños)

  • CPU: 1 núcleo (por ejemplo, Intel Xeon E5 o similar). Varnish no utiliza intensivamente la CPU, a menos que procese un volumen muy grande de solicitudes por segundo o reglas VCL complejas.
  • RAM: 1-2 GB. El consumo principal de memoria de Varnish se debe al almacenamiento en caché. Cuanta más RAM, más contenido se puede almacenar en caché en la memoria, lo que garantiza la máxima velocidad.
  • Disco: 20-40 GB NVMe/SSD. Varnish puede almacenar en caché en disco, pero esto es significativamente más lento que en RAM. El disco es necesario para el SO, los registros y el almacenamiento de copias de seguridad. NVMe/SSD es importante para la capacidad de respuesta general del sistema.
  • Red: 100 Mbps - 1 Gbps. Un alto ancho de banda de red es importante, ya que Varnish entregará el contenido en caché directamente a los clientes.

Plan de VPS recomendado (para sitios/proyectos medianos)

Para la mayoría de los proyectos, incluidas las aplicaciones SaaS, GitLab, Mattermost o servidores de juegos con tráfico moderado (si Varnish se utiliza para la interfaz web), se recomienda la siguiente configuración:

  • CPU: 2-4 núcleos (Intel Xeon o AMD EPYC modernos). Proporcionará un margen para manejar picos de tráfico y el funcionamiento de otros servicios.
  • RAM: 4-8 GB. Permitirá almacenar en caché un volumen significativo de contenido en la memoria RAM, lo cual es crítico para el rendimiento.
  • Disco: 80-160 GB NVMe/SSD. Espacio suficiente para el SO, los registros de Varnish, las copias de seguridad y otros archivos del sistema.
  • Red: 1 Gbps. Un canal estable y rápido para la entrega de contenido.

Se puede adquirir un VPS con las características indicadas, para garantizar un rendimiento y una estabilidad óptimos de Varnish Cache.

Cuándo se necesita un dedicado y no un VPS

Un servidor dedicado se vuelve necesario si:

  • Tráfico muy alto: Si su sitio web o aplicación genera cientos de millones de solicitudes al mes, y Varnish opera constantemente al límite de las capacidades del VPS.
  • Gran volumen de caché: Si necesita almacenar en caché cientos de gigabytes de datos en memoria para un rendimiento máximo, y un VPS con esa cantidad de RAM es demasiado caro o no está disponible.
  • Requisitos de aislamiento: Para aplicaciones críticas donde el aislamiento completo de los recursos y la ausencia de "vecinos" en el hipervisor son importantes.
  • Requisitos de hardware específicos: Si necesita tarjetas de red especiales, controladores RAID u otras características de hardware no disponibles en un VPS.

Para proyectos muy grandes, donde Varnish forma parte de una infraestructura compleja, puede ser necesario un servidor dedicado. Un servidor dedicado adecuado garantizará el máximo rendimiento y flexibilidad.

Ubicación: en qué influye

La elección de la ubicación del VPS tiene un impacto directo en:

  • Latencia: Cuanto más cerca esté el servidor de su audiencia principal, menor será la latencia y más rápida la carga de las páginas. Para Varnish, esto es especialmente crítico, ya que se encuentra en la vanguardia del procesamiento de solicitudes.
  • Cumplimiento legal: Algunas regiones tienen requisitos estrictos para el almacenamiento de datos (por ejemplo, GDPR en Europa). La elección de la ubicación del servidor debe tener en cuenta estos aspectos.
  • Costo: Los precios de los VPS pueden variar según la región.

Siempre elija una ubicación lo más cercana posible a su audiencia objetivo para lograr el mejor rendimiento.

Preparación del servidor

Diagrama: Preparación del servidor
Diagrama: Preparación del servidor

Antes de instalar Varnish Cache, es necesario realizar una configuración básica y proteger su VPS. Utilizaremos Ubuntu Server 24.04 LTS, ya que es una distribución actual y ampliamente utilizada con soporte a largo plazo.

1. Conexión SSH y creación de usuario

Se asume que se ha conectado al servidor como usuario root. Lo primero es crear un nuevo usuario con permisos sudo para el trabajo diario.


# Añadimos un nuevo usuario (reemplace 'su_usuario' por el nombre deseado)
sudo adduser ваш_пользователь

Siga las instrucciones para establecer la contraseña y la información del usuario. Luego, añada el usuario al grupo sudo para que pueda ejecutar comandos con privilegios de administrador.


# Añadimos el usuario al grupo sudo
sudo usermod -aG sudo ваш_пользователь

Salga de la sesión root e inicie sesión con el nuevo usuario:


# Salir de la sesión actual
exit
# Conexión con el nuevo usuario
ssh ваш_пользователь@ваш_ip_сервера

2. Configuración de claves SSH (recomendado)

Para mejorar la seguridad, se recomienda usar claves SSH en lugar de contraseñas. Genere una clave en su máquina local (si aún no lo ha hecho):


# En su máquina local
ssh-keygen -t rsa -b 4096

Copie la clave pública al servidor:


# En su máquina local
ssh-copy-id ваш_пользователь@ваш_ip_сервера

Después de esto, desactive el inicio de sesión con contraseña para root y su usuario, editando el archivo /etc/ssh/sshd_config:


# Abrimos el archivo de configuración del servidor SSH
sudo nano /etc/ssh/sshd_config

Busque y modifique las siguientes líneas (o añádalas si no existen):


# Desactivamos el inicio de sesión con contraseña
PasswordAuthentication no
# Desactivamos el inicio de sesión para root (si no lo usa para otros fines)
PermitRootLogin no

Guarde el archivo (Ctrl+O, luego Enter) y salga (Ctrl+X). Reinicie el servicio SSH:


# Reiniciamos el servicio SSH para aplicar los cambios
sudo systemctl restart sshd

3. Configuración del firewall (UFW)

Uncomplicated Firewall (UFW) es una interfaz fácil de usar para iptables. Lo configuraremos para permitir solo las conexiones necesarias.


# Actualizamos la lista de paquetes
sudo apt update
# Instalamos UFW
sudo apt install ufw -y
# Permitimos conexiones SSH (puerto 22)
sudo ufw allow OpenSSH
# Permitimos HTTP (puerto 80)
sudo ufw allow http
# Permitimos HTTPS (puerto 443)
sudo ufw allow https
# Habilitamos el firewall
sudo ufw enable
# Verificamos el estado del firewall
sudo ufw status verbose

Al habilitar el firewall, se le pedirá que confirme la acción. Ingrese y y presione Enter.

4. Instalación de Fail2ban

Fail2ban escanea los registros del servidor en busca de actividad sospechosa (por ejemplo, intentos fallidos de inicio de sesión SSH) y bloquea temporalmente las direcciones IP de los atacantes.


# Instalamos Fail2ban
sudo apt install fail2ban -y
# Habilitamos e iniciamos el servicio Fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
# Verificamos el estado
sudo systemctl status fail2ban

Fail2ban está configurado por defecto para proteger SSH. Puede crear un archivo de configuración /etc/fail2ban/jail.local para una configuración más detallada, por ejemplo:


# Creamos el archivo de configuración local de Fail2ban
sudo nano /etc/fail2ban/jail.local

Añada el siguiente contenido:


[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 1h

Guarde y salga. Reinicie Fail2ban:


# Reiniciamos Fail2ban para aplicar las nuevas reglas
sudo systemctl restart fail2ban

5. Actualización del sistema

Mantenga siempre su sistema actualizado.


# Actualizamos la lista de paquetes
sudo apt update
# Actualizamos todos los paquetes instalados
sudo apt upgrade -y
# Eliminamos paquetes y dependencias no utilizados
sudo apt autoremove -y

Su servidor está listo para la instalación de Varnish Cache y servicios relacionados.

Instalación de software — paso a paso

Diagrama: Instalación de software — paso a paso
Diagrama: Instalación de software — paso a paso

Ahora que el servidor está preparado, procedamos con la instalación de Varnish Cache, así como Nginx (como servidor web backend) y Caddy (como frontend para terminación SSL y proxy).

1. Instalación de Nginx (servidor web backend)

Nginx escuchará en un puerto interno y entregará contenido a Varnish. Instalaremos la versión actual disponible a través de los repositorios de Ubuntu 24.04 LTS.


# Actualizamos la lista de paquetes
sudo apt update
# Instalamos Nginx (versión 1.25.x o posterior para 2026)
sudo apt install nginx -y
# Verificamos el estado de Nginx
sudo systemctl status nginx

Nginx debe estar activo (active (running)).

2. Instalación de Varnish Cache

Instalaremos Varnish Cache desde los repositorios oficiales de Ubuntu. Para 2026, se espera una versión estable de Varnish 7.x (por ejemplo, 7.4 o 7.5).


# Añadimos la clave GPG para el repositorio oficial de Varnish
sudo curl -s https://packagecloud.io/varnishcache/varnish7/gpgkey | sudo gpg --dearmor | sudo tee /usr/share/keyrings/varnishcache.gpg > /dev/null
# Añadimos el repositorio de Varnish Cache
echo "deb [signed-by=/usr/share/keyrings/varnishcache.gpg] https://packagecloud.io/varnishcache/varnish7/ubuntu/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/varnishcache.list
# Actualizamos la lista de paquetes para incluir el nuevo repositorio
sudo apt update
# Instalamos Varnish Cache (versión 7.4.x o posterior)
sudo apt install varnish -y
# Verificamos el estado de Varnish
sudo systemctl status varnish

Varnish también debe estar activo. Por defecto, puede estar configurado para escuchar en el puerto 6081 o 80. Cambiaremos esto en la siguiente sección.

3. Instalación de Caddy (terminador SSL y frontend)

Caddy es un servidor web moderno con HTTPS automático. Escuchará en los puertos 80 y 443, manejará SSL y reenviará las solicitudes a Varnish. Para 2026, Caddy 2.x será la versión estable principal.


# Instalamos las dependencias para Caddy
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
# Añadimos la clave GPG para el repositorio de Caddy
sudo curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
# Añadimos el repositorio de Caddy
sudo curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
# Actualizamos la lista de paquetes
sudo apt update
# Instalamos Caddy (versión 2.x)
sudo apt install caddy -y
# Verificamos el estado de Caddy
sudo systemctl status caddy

Caddy también debe estar activo.

4. Apertura de puertos en el firewall para comunicación interna

Necesitaremos abrir puertos internos para la comunicación entre Caddy, Varnish y Nginx. Varnish escuchará en el puerto 8080 y Nginx en el 8081. Estos puertos no deben ser accesibles desde el exterior.


# Permitimos los puertos internos 8080 y 8081 solo para localhost (127.0.0.1)
sudo ufw allow in on lo to any port 8080
sudo ufw allow in on lo to any port 8081
# Verificamos que las reglas se hayan aplicado
sudo ufw status verbose

Ahora todos los componentes necesarios están instalados, y podemos proceder a su configuración.

Configuración

Diagrama: Configuración
Diagrama: Configuración

Esta sección describe la configuración paso a paso de todos los componentes: Nginx (backend), Varnish Cache y Caddy (frontend con SSL).

1. Configuración de Nginx (backend)

Nginx escuchará en el puerto interno 127.0.0.1:8081. Crearemos un nuevo archivo de configuración para su sitio.


# Создаем новый конфигурационный файл для вашего сайта
sudo nano /etc/nginx/sites-available/ваш_домен.conf

Agregue el siguiente contenido, reemplazando ваш_домен.com por su dominio real e indicando la ruta a sus archivos web (por ejemplo, /var/www/ваш_домен/html).


server {
    listen 127.0.0.1:8081; # Nginx escucha solo en localhost
    server_name ваш_домен.com www.ваш_домен.com;

    root /var/www/ваш_домен/html; # Ruta a sus archivos
    index index.html index.htm index.php;

    location / {
        try_files $uri $uri/ =404;
    }

    # Ejemplo para aplicaciones PHP
    # location ~ \.php$ {
    #     include snippets/fastcgi-php.conf;
    #     fastcgi_pass unix:/var/run/php/php8.3-fpm.sock; # Especifique la versión actual de PHP-FPM
    # }

    # Agregando encabezado para Varnish, para que sepa que es el backend
    add_header X-Served-By $host;
}

Cree un enlace simbólico a sites-enabled y elimine la configuración predeterminada de Nginx:


# Creamos un enlace simbólico
sudo ln -s /etc/nginx/sites-available/ваш_домен.conf /etc/nginx/sites-enabled/
# Eliminamos la configuración predeterminada de Nginx
sudo rm /etc/nginx/sites-enabled/default
# Verificamos la sintaxis de la configuración de Nginx
sudo nginx -t
# Reiniciamos Nginx
sudo systemctl restart nginx

Asegúrese de que no haya errores y que Nginx se haya reiniciado correctamente.

2. Configuración de Varnish Cache

Configuraremos Varnish para que escuche en el puerto 127.0.0.1:8080 y proxy las solicitudes a Nginx en 127.0.0.1:8081.

2.1. Configuración de Systemd para Varnish

Edite el archivo de configuración de Systemd para Varnish para cambiar el puerto de escucha. En lugar de modificar /etc/default/varnish (que puede ser sobrescrito durante una actualización), usaremos un override de Systemd.


# Creamos el directorio para los archivos de override de Systemd
sudo mkdir -p /etc/systemd/system/varnish.service.d/
# Creamos el archivo de override
sudo nano /etc/systemd/system/varnish.service.d/override.conf

Agregue el siguiente contenido:


[Service]
ExecStart=
ExecStart=/usr/sbin/varnishd -a 127.0.0.1:8080 -F -f /etc/varnish/default.vcl -s malloc,2G

Aquí:

  • -a 127.0.0.1:8080: Varnish escuchará en el puerto 8080 solo en la interfaz local.
  • -f /etc/varnish/default.vcl: Indica la ruta al archivo VCL.
  • -s malloc,2G: Asigna 2 GB de RAM para la caché de Varnish. Ajuste este valor de acuerdo con la RAM disponible de su VPS (por ejemplo, 4G para 4GB).

Guarde y salga. Recargue la configuración de Systemd y reinicie Varnish:


# Recargamos la configuración de Systemd
sudo systemctl daemon-reload
# Reiniciamos Varnish
sudo systemctl restart varnish
# Verificamos el estado de Varnish
sudo systemctl status varnish

Asegúrese de que Varnish esté en ejecución y escuchando en 127.0.0.1:8080.

2.2. Configuración de VCL (Varnish Configuration Language)

El archivo /etc/varnish/default.vcl define la lógica de caché de Varnish. Ábralo para editar:


# Abrimos el archivo VCL
sudo nano /etc/varnish/default.vcl

Reemplace el contenido con lo siguiente. Este archivo VCL es un buen punto de partida que almacena en caché contenido estático, maneja cookies y encabezados de caché.


vcl 4.1;

# Definimos el backend (Nginx)
backend default {
    .host = "127.0.0.1";
    .port = "8081";
    .probe = {
        .url = "/health"; # Ruta para verificar la salud del backend
        .interval = 5s;
        .timeout = 1s;
        .window = 5;
        .threshold = 3;
    }
}

# Procesamiento de solicitudes entrantes
sub vcl_recv {
    # Eliminamos encabezados innecesarios que pueden interferir con el almacenamiento en caché
    unset req.http.Cookie;
    unset req.http.If-Modified-Since;
    unset req.http.If-None-Match;

    # Todas las solicitudes al backend se envían si el método no es GET o HEAD
    if (req.method != "GET" && req.method != "HEAD") {
        return (pipe); # O pass, si es necesario procesar POST/PUT/DELETE
    }

    # No almacenar en caché solicitudes AJAX o solicitudes a la API
    if (req.url ~ "^/api/" || req.url ~ "^/ajax/") {
        return (pass);
    }

    # No almacenar en caché solicitudes a paneles de administración
    if (req.url ~ "^/admin/" || req.url ~ "^/wp-admin/" || req.url ~ "^/gitlab/admin/") {
        return (pass);
    }

    # Intentamos almacenar en caché todo lo demás
    return (hash);
}

# Procesamiento de respuestas del backend
sub vcl_fetch {
    # No almacenar en caché páginas con código de error
    if (beresp.status >= 500) {
        return (abandon);
    }

    # No almacenar en caché páginas con encabezados específicos (por ejemplo, Set-Cookie)
    if (beresp.http.Set-Cookie) {
        return (pass);
    }

    # Establecemos el tiempo de vida de la caché por defecto si el backend no especificó Cache-Control
    if (!beresp.http.Cache-Control && !beresp.http.Expires) {
        set beresp.ttl = 1h; # Almacenar en caché 1 hora por defecto
    }

    # Eliminamos las cookies para los objetos en caché para evitar problemas de personalización
    unset beresp.http.Set-Cookie;

    # Agregamos el encabezado X-Varnish para depuración
    set beresp.http.X-Varnish = regsub(server.identity, "\(([^)]+)\)", "");

    return (deliver);
}

# Procesamiento de respuestas de Varnish al cliente
sub vcl_deliver {
    # Agregamos un encabezado indicando que el objeto fue entregado desde la caché
    if (obj.hits > 0) {
        set resp.http.X-Cache = "HIT";
    } else {
        set resp.http.X-Cache = "MISS";
    }
    set resp.http.X-Cache-Hits = obj.hits;
    unset resp.http.Via; # Eliminamos el encabezado Via
    return (deliver);
}

Guarde y salga. Ahora verifique el archivo VCL en busca de errores de sintaxis y reinicie Varnish:


# Verificamos la sintaxis de VCL
sudo varnishd -C -f /etc/varnish/default.vcl
# Reiniciamos Varnish
sudo systemctl restart varnish

Para el correcto funcionamiento de la verificación del backend (.probe), agregue una ubicación para /health en su configuración de Nginx (/etc/nginx/sites-available/ваш_домен.conf):


    location = /health {
        add_header Content-Type text/plain;
        return 200 "OK";
    }

No olvide reiniciar Nginx después de este cambio: sudo systemctl restart nginx.

3. Configuración de Caddy (terminador SSL y frontend)

Caddy escuchará en los puertos 80 y 443, obtendrá automáticamente certificados SSL y proxy las solicitudes a Varnish en 127.0.0.1:8080.


# Abrimos el archivo de configuración de Caddy
sudo nano /etc/caddy/Caddyfile

Reemplace el contenido con lo siguiente, especificando su dominio:


ваш_домен.com {
    # HTTPS automático (Let's Encrypt)
    tls {
        dns cloudflare {env.CLOUDFLARE_API_TOKEN} # Ejemplo para Cloudflare DNS API. Use HTTP-challenge u otro proveedor de DNS.
    }

    # Proxy todas las solicitudes a Varnish
    reverse_proxy 127.0.0.1:8080 {
        # Pasamos la IP real del cliente
        header_up X-Forwarded-For {remote_host}
        header_up X-Real-IP {remote_host}
        header_up Host {host}
        # Pasamos la información de HTTPS
        header_up X-Forwarded-Proto {scheme}
    }

    # Habilitamos la compresión Gzip (si Varnish no lo hace por sí mismo)
    encode gzip zstd

    # Registro
    log {
        output file /var/log/caddy/access.log
    }
}

Nota importante sobre TLS: El ejemplo utiliza DNS-challenge para Let's Encrypt con Cloudflare. Si no usa Cloudflare o prefiere HTTP-challenge, elimine la línea dns cloudflare {env.CLOUDFLARE_API_TOKEN}. Caddy intentará automáticamente usar HTTP-challenge si el puerto 80 está disponible.

Si utiliza DNS-challenge, cree el archivo /etc/caddy/.env para almacenar el token de API de Cloudflare:


# Creamos el directorio para el archivo .env
sudo mkdir -p /etc/caddy
# Creamos el archivo .env
sudo nano /etc/caddy/.env

Agregue su token de API:


CLOUDFLARE_API_TOKEN=ВАШ_CLOUDFLARE_API_ТОКЕН

Asegúrese de que los permisos del archivo .env estén restringidos:


# Establecemos permisos solo para el propietario
sudo chmod 600 /etc/caddy/.env
# Establecemos el propietario Caddy
sudo chown caddy:caddy /etc/caddy/.env

Guarde Caddyfile y .env. Verifique la sintaxis de Caddy y reinícielo:


# Verificamos la sintaxis de Caddyfile
sudo caddy validate --config /etc/caddy/Caddyfile
# Reiniciamos Caddy
sudo systemctl restart caddy
# Verificamos el estado de Caddy
sudo systemctl status caddy

Asegúrese de que Caddy esté en ejecución y haya obtenido los certificados SSL correctamente.

4. Verificación de funcionamiento

Después de configurar todos los componentes, nos aseguraremos de que todo funcione correctamente.


# Verificamos la disponibilidad del sitio a través de Curl
curl -I https://ваш_домен.com

En los encabezados de respuesta, debería ver:

  • HTTP/2 200 (o HTTP/1.1 200)
  • server: Caddy
  • x-cache: MISS (en la primera solicitud)
  • x-cache-hits: 0 (en la primera solicitud)

Repita la solicitud varias veces:


# Solicitud repetida a través de Curl
curl -I https://ваш_домен.com

Ahora debería ver:

  • x-cache: HIT
  • x-cache-hits: 1 (o más, si hubo muchas solicitudes)

Esto confirma que Varnish está almacenando el contenido en caché correctamente. También puede usar varnishlog y varnishstat para monitorear Varnish:


# Ver registros de Varnish en tiempo real
sudo varnishlog
# Estadísticas de Varnish
sudo varnishstat

Presione Ctrl+C para salir de varnishlog/varnishstat.

Copias de seguridad y mantenimiento

Diagrama: Copias de seguridad y mantenimiento
Diagrama: Copias de seguridad y mantenimiento

Las copias de seguridad regulares y el mantenimiento oportuno son cruciales para la estabilidad y seguridad de su sitio web que funciona con Varnish Cache.

1. Qué respaldar

Para Varnish Cache y la infraestructura asociada, es necesario respaldar los siguientes elementos:

  • Archivos de configuración de Varnish:
    • /etc/varnish/default.vcl (archivo VCL principal)
    • /etc/systemd/system/varnish.service.d/override.conf (configuración de Systemd)
  • Archivos de configuración del servidor web (Nginx):
    • /etc/nginx/nginx.conf
    • /etc/nginx/sites-available/su_dominio.conf
    • /etc/nginx/sites-enabled/ (enlaces simbólicos)
  • Archivos de configuración de Caddy:
    • /etc/caddy/Caddyfile
    • /etc/caddy/.env (si se usa)
    • /var/lib/caddy/.local/share/caddy/ (certificados Let's Encrypt, si no se usan plugins DNS)
  • Archivos del sitio web: Todo el contenido de su sitio web (HTML, CSS, JS, imágenes, scripts PHP, etc.), generalmente ubicado en /var/www/su_dominio/html.
  • Base de datos: Si su sitio utiliza una base de datos (MySQL, PostgreSQL), asegúrese de hacer un volcado de la misma.
  • Configuraciones del sistema: /etc/ssh/sshd_config, /etc/ufw/, /etc/fail2ban/.

2. Script simple de copia de seguridad automática

Puede usar un script simple de bash en combinación con cron para crear archivos automáticamente. Para el almacenamiento, puede usar rsync para copiar a otro servidor o restic/borg para copias de seguridad deduplicadas y cifradas en un almacenamiento compatible con S3.

Ejemplo de un script simple para crear archivos (/usr/local/bin/backup_script.sh):


#!/bin/bash

# Configuración
BACKUP_DIR="/var/backups/webserver"
DATE=$(date +%Y-%m-%d_%H-%M-%S)
WEB_ROOT="/var/www/su_dominio/html"
NGINX_CONF="/etc/nginx"
VARNISH_CONF="/etc/varnish"
CADDY_CONF="/etc/caddy"
DB_NAME="su_base_de_datos" # Reemplace con el nombre de su BD
DB_USER="su_usuario_bd" # Reemplace con el usuario de la BD
DB_PASS="su_contraseña_bd" # Reemplace con la contraseña de la BD
MYSQL_CMD="/usr/bin/mysqldump" # O pg_dump para PostgreSQL

# Creamos el directorio para las copias de seguridad si no existe
mkdir -p $BACKUP_DIR

# 1. Copia de seguridad de archivos web
echo "Creando copia de seguridad de archivos web..."
tar -czf $BACKUP_DIR/web_files_$DATE.tar.gz $WEB_ROOT

# 2. Copia de seguridad de configuraciones de Nginx
echo "Creando copia de seguridad de configuraciones de Nginx..."
tar -czf $BACKUP_DIR/nginx_config_$DATE.tar.gz $NGINX_CONF

# 3. Copia de seguridad de configuraciones de Varnish
echo "Creando copia de seguridad de configuraciones de Varnish..."
tar -czf $BACKUP_DIR/varnish_config_$DATE.tar.gz $VARNISH_CONF /etc/systemd/system/varnish.service.d/override.conf

# 4. Copia de seguridad de configuraciones de Caddy
echo "Creando copia de seguridad de configuraciones de Caddy..."
tar -czf $BACKUP_DIR/caddy_config_$DATE.tar.gz $CADDY_CONF /var/lib/caddy/.local/share/caddy/

# 5. Copia de seguridad de la base de datos (ejemplo para MySQL)
if [ -n "$DB_NAME" ]; then
    echo "Creando copia de seguridad de la base de datos..."
    $MYSQL_CMD -u $DB_USER -p$DB_PASS $DB_NAME | gzip > $BACKUP_DIR/database_$DATE.sql.gz
fi

# Eliminando copias de seguridad antiguas (más de 7 días)
echo "Eliminando copias de seguridad antiguas..."
find $BACKUP_DIR -type f -name ".tar.gz" -o -name ".sql.gz" -mtime +7 -delete

echo "Copia de seguridad completada."

# Guarde el script
sudo nano /usr/local/bin/backup_script.sh
# Hágalo ejecutable
sudo chmod +x /usr/local/bin/backup_script.sh

Agregue una tarea a cron para su ejecución diaria (por ejemplo, a las 3:00 AM):


# Abrimos crontab
sudo crontab -e

Agregue la siguiente línea:


0 3   * /usr/local/bin/backup_script.sh > /dev/null 2>&1

3. Dónde almacenar las copias de seguridad

Nunca almacene las copias de seguridad en el mismo servidor que los datos originales. Esto es inútil en caso de fallo del disco o compromiso del servidor.

  • Almacenamiento externo compatible con S3: Amazon S3, DigitalOcean Spaces, Backblaze B2. Esta es una opción económica y fiable. Use restic o borgbackup para el cifrado y la deduplicación.
  • VPS separado: Un VPS pequeño y económico en otra ubicación, destinado exclusivamente al almacenamiento de copias de seguridad. Use rsync por SSH.
  • Almacenamiento local en su máquina: Para proyectos pequeños, puede descargar periódicamente las copias de seguridad a su ordenador.

4. Actualizaciones: rolling vs maintenance window

Mantener el software actualizado es importante para la seguridad y el rendimiento.

  • Actualizaciones de SO y paquetes (Ubuntu, Nginx, Caddy, Varnish):
    • Rolling updates: Para sistemas no críticos o en un entorno de prueba, se pueden configurar actualizaciones de seguridad automáticas. Sin embargo, para servidores de producción, se recomienda la actualización manual con pruebas previas.
    • Maintenance window (ventana de mantenimiento): Planifique ventanas de mantenimiento regulares (por ejemplo, una vez al mes) durante el tiempo de menor actividad. Antes de aplicar las actualizaciones, haga una copia de seguridad.
  • Actualización de Varnish:
    • Las versiones principales de Varnish (por ejemplo, de 6.x a 7.x) pueden requerir la adaptación del archivo VCL debido a cambios en la sintaxis o la API. Lea atentamente el changelog.
    • Las actualizaciones menores (7.4.0 a 7.4.1) suelen ser retrocompatibles y seguras.

# Actualización del sistema
sudo apt update && sudo apt upgrade -y
# Reinicio de servicios, si fueron actualizados
sudo systemctl restart nginx caddy varnish

Siempre verifique la funcionalidad del sitio después de cualquier actualización.

Solución de problemas + Preguntas frecuentes

Esta sección recopila problemas típicos y preguntas frecuentes que pueden surgir al trabajar con Varnish Cache.

Error: Varnish no almacena contenido en caché (X-Cache: MISS)

Qué verificar: Asegúrese de que Varnish esté configurado correctamente y reciba las solicitudes. Verifique su archivo VCL (/etc/varnish/default.vcl) en busca de reglas que puedan provocar un salto de caché (return (pass) o return (pipe)). A menudo, la causa son los encabezados Set-Cookie, Cache-Control: private o solicitudes con un método diferente a GET/HEAD. Use sudo varnishlog para analizar las solicitudes y respuestas.

Cómo solucionarlo: Optimice el archivo VCL. Si el Set-Cookie es enviado por el backend, considere eliminarlo para los objetos en caché en vcl_fetch. Verifique que su backend (Nginx) no envíe encabezados que prohíban el almacenamiento en caché. Asegúrese de que no haya Cache-Control: no-cache o no-store para las páginas en caché.

Error: El sitio no está disponible o muestra un error 502 Bad Gateway

Qué verificar: Esto indica un problema con la conexión de Varnish al backend (Nginx) o de Caddy a Varnish. Verifique los registros de Caddy (sudo journalctl -u caddy --since "5 minutes ago"), Varnish (sudo varnishlog) y Nginx (sudo tail -f /var/log/nginx/error.log). Asegúrese de que todos los servicios (Caddy, Varnish, Nginx) estén en ejecución y escuchando en los puertos correctos (Caddy: 80/443, Varnish: 127.0.0.1:8080, Nginx: 127.0.0.1:8081). Verifique las reglas del firewall (UFW) para detectar el bloqueo de puertos internos.

Cómo solucionarlo: Reinicie los servicios en el orden correcto: primero Nginx, luego Varnish, luego Caddy. Asegúrese de que /etc/caddy/Caddyfile especifique la dirección correcta de Varnish (127.0.0.1:8080), y que /etc/varnish/default.vcl especifique la dirección correcta de Nginx (127.0.0.1:8081). Verifique override.conf para Varnish para asegurarse de que esté escuchando en el puerto 8080.

Error: Problemas con los certificados SSL (Caddy)

Qué verificar: Verifique los registros de Caddy. Si Caddy no puede obtener un certificado Let's Encrypt, esto podría deberse a errores en los registros DNS, al bloqueo del puerto 80/443 por el firewall o a una configuración incorrecta del desafío DNS (si se usa). Asegúrese de que su dominio apunte a la dirección IP del servidor.

Cómo solucionarlo: Asegúrese de que los puertos 80 y 443 estén abiertos en UFW. Verifique los registros A/AAAA de su dominio. Si usa el desafío DNS, asegúrese de que el token de API esté especificado correctamente y tenga los permisos necesarios. Deshabilite temporalmente el desafío DNS en Caddyfile e intente el desafío HTTP (asegúrese de que el puerto 80 esté abierto).

¿Qué configuración mínima de VPS es adecuada para Varnish Cache?

Para un sitio web pequeño con tráfico moderado, un VPS con 1 núcleo de CPU, 1-2 GB de RAM y 20-40 GB de disco NVMe/SSD será suficiente. Esto es suficiente para el funcionamiento de Varnish, el servidor web y el sistema operativo. Sin embargo, para obtener una mejora notable en el rendimiento y la capacidad de almacenar más contenido en la memoria caché, se recomiendan 2-4 GB de RAM.

¿Qué elegir — VPS o dedicado para esta tarea?

Para la mayoría de los proyectos medianos y grandes, un VPS será una excelente opción, ofreciendo un buen equilibrio entre rendimiento y costo. Un servidor dedicado solo es necesario en casos de carga muy alta (cientos de millones de solicitudes al mes), cuando se requiere almacenar cientos de gigabytes de datos en la memoria caché, o cuando existen requisitos estrictos de aislamiento de hardware y equipo específico. Comience con un VPS y escale a un dedicado si surge una necesidad real.

¿Por qué Varnish no almacena en caché las páginas para usuarios autenticados?

Qué verificar: Por defecto, Varnish evita almacenar en caché páginas que contienen cookies (Cookie en la solicitud, Set-Cookie en la respuesta) para evitar mostrar contenido personalizado a otros usuarios. Este es un comportamiento estándar, orientado a la seguridad y la corrección.

Cómo solucionarlo: Si necesita almacenar en caché páginas con cookies, debe eliminar explícitamente el encabezado Cookie de la solicitud en vcl_recv para URL o tipos de contenido específicos, así como Set-Cookie de la respuesta en vcl_fetch. Esto requiere una configuración muy cuidadosa de VCL para no romper la funcionalidad del sitio (por ejemplo, inicio de sesión, carrito de compras). Considere usar Edge Side Includes (ESI) para partes dinámicas de las páginas.

¿Cómo limpiar la caché de Varnish?

Qué verificar: Varnish ofrece varias formas de limpiar la caché. La más sencilla es reiniciar el servicio, pero esto borrará toda la caché. Métodos más granulares incluyen el uso de solicitudes HTTP PURGE o BAN.

Cómo solucionarlo:

  • Reinicio de Varnish: sudo systemctl restart varnish (borra toda la caché).
  • PURGE (limpieza de una URL específica): Agregue reglas en VCL para manejar el método PURGE. Por ejemplo, en vcl_recv:
    
        if (req.method == "PURGE") {
            if (!client.ip ~ "127.0.0.1") { # Permitir PURGE solo desde localhost
                return (synth(403, "Forbidden"));
            }
            return (hash);
        }
        sub vcl_hit {
            if (req.method == "PURGE") {
                return (synth(200, "Purged"));
            }
        }
        sub vcl_miss {
            if (req.method == "PURGE") {
                return (synth(200, "Purged"));
            }
        }
                    
    Después de esto, puede usar: curl -X PURGE http://127.0.0.1:8080/path/to/page.
  • BAN (limpieza por patrón): También requiere configuración en VCL. Permite eliminar de la caché todos los objetos que coincidan con una expresión regular (por ejemplo, todas las páginas que comienzan con /blog/).

Conclusiones y próximos pasos

Diagrama: Conclusiones y próximos pasos
Diagrama: Conclusiones y próximos pasos

¡Felicidades! Ha instalado y configurado Varnish Cache con éxito en su VPS, integrándolo con Caddy para la terminación SSL y Nginx como backend. Su sitio web ahora funciona significativamente más rápido y el servidor es capaz de soportar una mayor carga gracias al almacenamiento en caché eficiente. También ha sentado las bases para una infraestructura segura y mantenible con un firewall, Fail2ban y un sistema de copia de seguridad.

Ahora que la configuración básica está completa, puede considerar los siguientes pasos para optimizar y desarrollar aún más su proyecto:

  • Ajuste fino de VCL: Explore la documentación de Varnish VCL para adaptar las reglas de caché a las necesidades específicas de su aplicación. Esto puede incluir el almacenamiento en caché por tipos de usuario, el uso de Edge Side Includes (ESI) para el almacenamiento en caché fragmentado o reglas más complejas para la purga de caché.
  • Monitoreo y análisis: Configure herramientas de monitoreo, como Prometheus + Grafana, para rastrear las métricas de Varnish (hits, misses, backend health), Nginx, Caddy y el rendimiento general del servidor. Esto ayudará a identificar cuellos de botella y optimizar el funcionamiento.
  • Escalabilidad: Si su tráfico continúa creciendo, considere la escalabilidad horizontal, agregando varios servidores Varnish o migrando a una CDN para la distribución global de contenido.

¿Te fue útil esta guía?

Tus comentarios nos ayudan a mejorar nuestras guías.

Compartir esta publicación:

Envía esta guía a alguien a quien pueda resultarle útil.

Telegram VKVK WhatsApp Facebook LinkedIn XX

Instalación y configuración de Varnish Cache en VPS para acelerar sitios web
support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.