🎨 Sysprovider Code
Sysprovider LogoWiki
🇪🇸Hosting español para ecommerce

Cómo acelerar PrestaShop con Varnish en Plesk

Actualizado el 2 de abril de 2026

¿Tu tienda PrestaShop va lenta? ¿Las páginas tardan una eternidad en cargar y estás perdiendo ventas por eso? Es un problema muy común, pero tiene una solución potente y gratuita que quizás no conoces: combinar el caché de Varnish con tu panel de control Plesk.

En esta guía extensa y paso a paso, te voy a enseñar exactamente cómo acelerar PrestaShop con Varnish en Plesk. No necesitas ser un experto en servidores; te lo explico todo de forma clara y sencilla, como si estuviéramos tomando un café y resolviendo el problema juntos.

Vamos a por ello. Al final de este artículo, tu tienda volará y tus clientes (y Google) te lo agradecerán.

¿Por qué tu PrestaShop necesita Varnish? (El problema de la lentitud)

Antes de ponernos manos a la obra, es fundamental entender por qué PrestaShop se vuelve lento y cómo Varnish soluciona esto de raíz.

PrestaShop es un software muy completo y potente, pero es "pesado". Cada vez que un visitante entra en tu tienda, el servidor tiene que hacer un montón de trabajo:

  1. Ejecutar el código PHP.
  2. Consultar la base de datos (MySQL) para obtener productos, precios y categorías.
  3. Generar la página HTML desde cero.
  4. Enviarla al navegador del cliente.

Este proceso se repite para cada visitante y para cada clic. Si tienes 100 visitantes mirando el mismo producto, el servidor hace ese trabajo 100 veces. Esto consume muchísimos recursos y hace que los tiempos de carga se disparen, especialmente cuando hay picos de tráfico.

Aquí es donde entra Varnish. Varnish es un "acelerador de aplicaciones web" o, más técnicamente, un reverse proxy cache. Piensa en él como un vendedor súper eficiente en una tienda física.

En lugar de ir al almacén (la base de datos) a buscar el producto cada vez que un cliente lo pide, el vendedor deja los productos más populares en un estante al frente de la tienda. Cuando un cliente los pide, se los da al instante. Eso es Varnish: guarda una copia de las páginas más visitadas en la memoria RAM del servidor y las sirve directamente, sin tener que molestar al "almacén" (PHP y MySQL).

El resultado: tiempos de carga reducidos hasta en un 90%, un servidor mucho más relajado y la capacidad de soportar mucho más tráfico sin caerse.


Preparando el terreno: Requisitos previos

Vamos a asegurarnos de que tienes todo listo antes de empezar. Esto es crucial para que el proceso sea un éxito.

[INFO]
Requisitos indispensables:

  • Un servidor con Plesk instalado. Esta guía está pensada para entornos Linux (Ubuntu, Debian, CentOS, etc.).
  • Acceso root al servidor a través de SSH (línea de comandos). Necesitas este acceso para instalar y configurar Varnish.
  • Acceso al panel de Plesk como administrador.
  • Una tienda PrestaShop funcionando correctamente en uno de tus dominios.
  • Conocimientos básicos de línea de comandos (no te preocupes, te daré los comandos exactos).

Si no tienes acceso root, contacta con tu proveedor de hosting y solicítalo. Sin él, no podremos instalar Varnish directamente.


Paso 1: Instalando Varnish en tu servidor

El primer paso es instalar el software de Varnish. Lo haremos usando el gestor de paquetes de tu sistema operativo.

Conéctate a tu servidor por SSH y ejecuta los siguientes comandos según tu sistema:

Para Ubuntu/Debian:

sudo apt update
sudo apt install varnish

Para CentOS/RHEL/AlmaLinux:

sudo yum install epel-release
sudo yum install varnish

Para sistemas más modernos (CentOS 8+, AlmaLinux, Rocky Linux):

sudo dnf install epel-release
sudo dnf install varnish

Una vez instalado, verifica la versión con este comando:

varnishd -V

Deberías ver un mensaje con la versión instalada. Con esto, ya tenemos el "caché" instalado. Ahora toca configurarlo.


Paso 2: Configuración básica de Varnish (El puerto de escucha)

Por defecto, Varnish escucha en el puerto 6081, pero nosotros queremos que sea el "portero" principal de nuestra tienda. Para ello, vamos a cambiar su puerto de escucha al puerto 80 (el puerto estándar para tráfico web).

  1. Editar el archivo de servicio de Varnish:
    El archivo de configuración del servicio varía según el sistema.

    • Ubuntu/Debian: /lib/systemd/system/varnish.service
    • CentOS/RHEL 7: /usr/lib/systemd/system/varnish.service
    • CentOS/RHEL 8+ / AlmaLinux: /etc/varnish/varnish.params

    Vamos a usar el editor nano (es el más amigable para principiantes). Primero, haz una copia de seguridad del archivo original:

    sudo cp /lib/systemd/system/varnish.service /lib/systemd/system/varnish.service.bak
    

    Luego, edita el archivo:

    sudo nano /lib/systemd/system/varnish.service
    
  2. Modificar la línea del puerto:
    Dentro del archivo, busca una línea que contenga ExecStart y que se parezca a esta:

    ExecStart=/usr/sbin/varnishd -a :6081 -f /etc/varnish/default.vcl -s malloc,256m
    

    Cambia el :6081 por :80. Debe quedar así:

    ExecStart=/usr/sbin/varnishd -a :80 -f /etc/varnish/default.vcl -s malloc,256m
    
    • Explicación: -a :80 le dice a Varnish que escuche en el puerto 80. -s malloc,256m significa que usará 256MB de RAM para el caché. Puedes aumentar esta cantidad si tu servidor tiene mucha memoria (por ejemplo, 512m o 1g para 1GB).
  3. Guardar y salir:
    Para guardar en nano, presiona Ctrl + X, luego Y para confirmar y finalmente Enter para salir.

  4. Recargar la configuración del sistema:
    Ahora debemos decirle al sistema que hemos cambiado la configuración del servicio.

    sudo systemctl daemon-reload
    
  5. Reiniciar Varnish:
    Aplicamos los cambios reiniciando el servicio.

    sudo systemctl restart varnish
    
  6. Verificar que Varnish está corriendo en el puerto 80:
    Ejecuta:

    sudo netstat -tulpn | grep :80
    

    Deberías ver una línea que menciona varnishd y que está escuchando en el puerto 0.0.0.0:80. ¡Perfecto! Varnish ya está activo.


Paso 3: Configurando Plesk para que escuche en otro puerto

Ahora tenemos un conflicto: Apache (el servidor web de Plesk) y Varnish quieren usar el puerto 80. Tenemos que decirle a Apache que se mueva a otro puerto, por ejemplo, el 8080, para que Varnish actúe como intermediario.

  1. Accede a Plesk: Entra a tu panel de Plesk como administrador.

  2. Ve a Configuración de Apache:
    Navega a Herramientas y Configuración (en el menú de la izquierda).

  3. Busca la Configuración del Servidor Web:
    En la sección de Configuración del Servidor, haz clic en Configuración de Apache.

  4. Cambia el puerto de escucha:
    Busca el campo Listen o Puerto de escucha. Verás que está configurado en el puerto 80. Cámbialo al puerto 8080.

    • Puede que también necesites cambiar la directiva ServerName para que apunte al puerto correcto, aunque Plesk suele gestionarlo automáticamente.
  5. Guarda y reinicia Apache:
    Haz clic en Aceptar o Guardar. Plesk te preguntará si quieres reconfigurar Apache. Acepta y espera a que termine. Luego, reinicia Apache para asegurarnos.

    sudo systemctl restart apache2
    

    O en CentOS:

    sudo systemctl restart httpd
    

[WARNING]
No cierres esta sesión de SSH todavía. Si algo sale mal, es posible que necesites revertir los cambios. Además, ten en cuenta que, a partir de ahora, para acceder a tu tienda directamente por Apache (sin Varnish) tendrías que usar el puerto 8080 (ej: http://tudominio.com:8080).


Paso 4: Creando la configuración mágica de Varnish para PrestaShop (El archivo .vcl)

Este es el corazón de la operación. Varnish necesita un archivo de configuración que le diga qué guardar en caché y cómo hacerlo. PrestaShop tiene reglas específicas que debemos respetar para no romper el carrito de compras o el panel de administración.

Vamos a crear un archivo de configuración personalizado.

  1. Haz una copia de seguridad del archivo original:

    sudo cp /etc/varnish/default.vcl /etc/varnish/default.vcl.bak
    
  2. Crea un nuevo archivo de configuración:
    Vamos a crear un archivo específico para PrestaShop.

    sudo nano /etc/varnish/plesk-prestashop.vcl
    
  3. Pega el siguiente contenido: Este es un punto de partida excelente. Copia y pega todo este bloque en el archivo.

vcl 4.0;

import std;

# El puerto donde Apache está escuchando ahora.
backend default {
    .host = "127.0.0.1";
    .port = "8080";
}

# Reglas para el tráfico que llega a Varnish
sub vcl_recv {
    # 1. NO cachear el panel de administración
    if (req.url ~ "^/admin" || req.url ~ "^/prestashop/admin" || req.url ~ "/(admin|backoffice)") {
        return (pass);
    }

    # 2. NO cachear peticiones que no sean GET o HEAD (ej. POST, PUT, DELETE)
    if (req.method != "GET" && req.method != "HEAD") {
        return (pass);
    }

    # 3. NO cachear la página del carrito y la de crear cuenta
    if (req.url ~ "/carrito" || req.url ~ "/pedido" || req.url ~ "/autenticacion" || req.url ~ "/mi-cuenta" || req.url ~ "/identificacion") {
        return (pass);
    }

    # 4. NO cachear si hay cookies de sesión de cliente o del carrito
    if (req.http.cookie ~ "PrestaShop-*" || req.http.cookie ~ "PHPSESSID") {
        return (pass);
    }

    # 5. Eliminar los parámetros de seguimiento de Google (utm_*) para mejorar el caché
    if (req.url ~ "(\?|&)(utm_source|utm_medium|utm_campaign|utm_content|gclid|cx|ie|cof|siteurl)=") {
        set req.url = regsuball(req.url, "&(utm_source|utm_medium|utm_campaign|utm_content|gclid|cx|ie|cof|siteurl)=([A-z0-9_\-\.%25]+)", "");
        set req.url = regsuball(req.url, "\?(utm_source|utm_medium|utm_campaign|utm_content|gclid|cx|ie|cof|siteurl)=([A-z0-9_\-\.%25]+)", "?");
        set req.url = regsub(req.url, "\?&", "?");
        set req.url = regsub(req.url, "\?$", "");
    }

    # Permitir que el resto de peticiones se procesen y se cacheen
    return (hash);
}

# Reglas para modificar la respuesta antes de guardarla en caché
sub vcl_backend_response {
    # NO cachear respuestas con errores
    if (beresp.status >= 400) {
        set beresp.ttl = 0s;
        return (deliver);
    }

    # Si es una página de PrestaShop (HTML), cachear durante 1 hora
    if (beresp.http.content-type ~ "text/html" || beresp.http.content-type ~ "text/css" || beresp.http.content-type ~ "application/javascript") {
        set beresp.ttl = 1h;
        # Eliminar las cookies de la respuesta para que el caché se pueda servir a otros usuarios
        unset beresp.http.set-cookie;
    }

    # Si es una imagen, CSS o JS, cachear durante 1 día (más tiempo)
    if (beresp.http.content-type ~ "image/" || beresp.http.content-type ~ "text/css" || beresp.http.content-type ~ "application/javascript") {
        set beresp.ttl = 1d;
    }

    return (deliver);
}

# Reglas para servir el contenido al usuario
sub vcl_deliver {
    # Añadir una cabecera para saber si el contenido vino del caché (útil para depurar)
    if (obj.hits > 0) {
        set resp.http.X-Cache = "HIT";
    } else {
        set resp.http.X-Cache = "MISS";
    }
    return (deliver);
}

[INFO]
¿Qué hace este código? Es más simple de lo que parece. Le dice a Varnish que:

  • Nunca guarde en caché el panel de administración (/admin).
  • Nunca guarde en caché el carrito, el checkout o las páginas de cuenta (donde hay información personal).
  • guarde en caché el resto de páginas HTML, imágenes, CSS y JavaScript durante un tiempo determinado.
  • Ignore ciertas cookies de sesión para que el caché funcione mejor.
  1. Guardar y salir: De nuevo, Ctrl + X, luego Y y Enter.

  2. Decirle a Varnish que use este archivo:
    Necesitamos editar el archivo de servicio de Varnish de nuevo para que apunte a nuestro nuevo archivo .vcl.

    sudo nano /lib/systemd/system/varnish.service
    

    Busca la línea ExecStart y cambia la referencia a default.vcl por plesk-prestashop.vcl. Quedará así:

    ExecStart=/usr/sbin/varnishd -a :80 -f /etc/varnish/plesk-prestashop.vcl -s malloc,256m
    
  3. Recargar y reiniciar Varnish de nuevo:

    sudo systemctl daemon-reload
    sudo systemctl restart varnish
    

Paso 5: Configurando PrestaShop para un caché óptimo

Ahora que Varnish está activo, vamos a configurar PrestaShop para que sea aún más rápido y compatible. PrestaShop tiene su propio sistema de caché que debemos ajustar.

  1. Accede al Panel de Administración de PrestaShop.

  2. Ve a la configuración de rendimiento:
    Navega a Parámetros avanzados > Rendimiento.

  3. Configura las opciones de caché:

    • Combinar archivos JavaScript: Actívalo. Esto reduce el número de peticiones al servidor.
    • Combinar archivos CSS: Actívalo. Igual que el anterior.
    • Cachear páginas: Actívalo. Esta es la opción clave. Verás una lista desplegable para elegir el sistema de caché.
    • En el desplegable "Usar caché", selecciona "Sistema de archivos" (File System). No uses "Memcached" a menos que lo tengas configurado, ya que podría dar conflictos con Varnish.
  4. Guarda los cambios.

[TIP]
Activa el modo "No guardar en caché si las cookies existen" en la configuración de rendimiento de PrestaShop. Esto evita que se generen páginas

¿Necesitas ayuda?Son dos de nuestros técnicos, Agustín y Mikel, y están disponibles para resolver cualquier problema.

Hablar con ellos ahora
Agustín y Mikel