Configuración de CDN y caché avanzada en PrestaShop
La velocidad de carga en una tienda PrestaShop es un factor crítico que impacta directamente en la tasa de conversión, el posicionamiento SEO y la experiencia de usuario. Cuando un catálogo supera los pocos miles de productos o recibe picos de tráfico por campañas, el servidor PHP y MySQL comienzan a mostrar signos de fatiga. La solución profesional no pasa solo por un buen hosting, sino por una arquitectura de caché avanzada apoyada en un CDN (Content Delivery Network).
En este artículo vamos a desgranar cómo configurar un stack de alto rendimiento para PrestaShop combinando Varnish, Redis y Cloudflare. No hablaremos de teoría genérica, sino de pasos concretos para transformar tu tienda en una máquina rápida y resistente.
¿Por qué no basta con el Caché Interno de PrestaShop?
PrestaShop incluye un sistema de caché nativo (Smarty, caché de consultas, CCC para CSS/JS). Sin embargo, este caché opera a nivel de aplicación PHP. Cuando un usuario visita una página, el servidor web (Apache/Nginx) sigue ejecutando PHP aunque sea para servir contenido cachead. En una tienda con 50.000 productos, cada visita puede generar docenas de consultas a la base de datos.
Aquí es donde entran las herramientas externas:
- Varnish: Actúa como proxy inverso. Almacena en RAM las páginas HTML completas. Si un usuario pide una página que ya está en caché, Varnish la sirve sin tocar PHP ni MySQL.
- Redis: Base de datos en memoria. Sustituye al caché de archivos plano de PrestaShop. Almacena sesiones, resultados de consultas SQL y bloques de contenido.
- Cloudflare: CDN global. Distribuye los assets estáticos (imágenes, CSS, JS) en 330+ ciudades. Además, ofrece protección DDoS y optimización automática de imágenes.
Configuración de Varnish para PrestaShop
Varnish es la pieza más poderosa para acelerar páginas de producto y categoría. Sin embargo, PrestaShop tiene particularidades: el carrito, la autenticación y el panel de administración nunca deben cachearse.
Instalación y Configuración Básica
Primero, instala Varnish en tu servidor (Debian/Ubuntu):
sudo apt update
sudo apt install varnish
Luego, configura el puerto de escucha. Normalmente Varnish escucha en el puerto 80 y el servidor web (Apache/Nginx) en el 8080. Edita /etc/default/varnish o el archivo de servicio systemd:
VARNISH_LISTEN_PORT=80
VARNISH_ADMIN_LISTEN_ADDRESS=127.0.0.1
VARNISH_ADMIN_LISTEN_PORT=6082
Reglas VCL para PrestaShop
El archivo de configuración de Varnish (.vcl) es donde ocurre la magia. Aquí tienes un ejemplo funcional para PrestaShop 1.7/8.x:
vcl 4.1;
backend default {
.host = "127.0.0.1";
.port = "8080";
}
# Tiempos de caché
sub vcl_recv {
# No cachear admin ni páginas de cuenta
if (req.url ~ "^/admin" || req.url ~ "^/module" || req.url ~ "controller=admin") {
return (pass);
}
# No cachear carrito ni checkout
if (req.url ~ "(cart|order|my-account|authentication|identity)") {
return (pass);
}
# No cachear búsquedas internas
if (req.url ~ "search_query" || req.url ~ "controller=search") {
return (pass);
}
# Cachear todo lo demás (GET y HEAD)
if (req.method != "GET" && req.method != "HEAD") {
return (pass);
}
# Eliminar cookies de seguimiento para páginas cacheadas
unset req.http.Cookie;
return (hash);
}
sub vcl_backend_response {
# Cachear durante 1 hora por defecto
set beresp.ttl = 1h;
# Para imágenes y assets, cachear 24h
if (beresp.url ~ "\.(jpg|jpeg|png|gif|ico|css|js|webp)$") {
set beresp.ttl = 24h;
}
# No cachear respuestas con errores
if (beresp.status >= 400) {
set beresp.ttl = 0s;
return (deliver);
}
# Eliminar cookies de backend para páginas cacheadas
unset beresp.http.set-cookie;
}
sub vcl_deliver {
# Añadir cabecera para debug
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT (" + obj.hits + ")";
} else {
set resp.http.X-Cache = "MISS";
}
}
[WARNING] No copies y pegues este VCL sin probarlo. Si tu ruta de admin es diferente (por ejemplo
/admin1234), ajústala enreq.url. Un error aquí puede dejar tu tienda inaccesible.
Después de aplicar el VCL, reinicia Varnish:
sudo systemctl restart varnish
Validación del Funcionamiento
Usa curl para comprobar si Varnish está sirviendo caché:
curl -I https://tutienda.com
Busca la cabecera X-Cache: HIT. Si ves MISS repetidamente, revisa las reglas de cookies o la configuración del backend.
Redis: La Memoria Caché que tu Base de Datos Necesita
Mientras Varnish cachea páginas completas, Redis se encarga de la capa de datos: sesiones, resultados de consultas SQL y bloques de módulos. Sin Redis, PrestaShop escribe estos datos en archivos temporales, lo que provoca mucha E/S en disco.
Instalación y Configuración del Módulo
Instala Redis en el servidor:
sudo apt install redis-server
sudo systemctl enable redis
Luego, en PrestaShop, necesitas un módulo puente. El recomendado es PrestaShop Redis (gratuito en Addons) o el módulo de terceros "Cached". Una vez instalado:
- Ve a Parámetros Avanzados > Rendimiento.
- En Caché, selecciona "Redis".
- Configura los parámetros de conexión (normalmente
127.0.0.1, puerto6379, base de datos0).
Ajustes Finos en Redis
Para exprimir Redis al máximo, edita /etc/redis/redis.conf:
# Usar menos del 75% de la RAM disponible
maxmemory 2gb
maxmemory-policy allkeys-lru
# Persistencia opcional (RDB cada 5 min si hay cambios)
save 300 10
[TIP] Si tu tienda tiene mucho tráfico de sesiones (muchos usuarios logueados), asigna más RAM a
maxmemory. Monitorea conredis-cli info memorypara ver el uso.
Qué Datos Cachea Redis en PrestaShop
- Consultas SQL: Las consultas repetitivas (ej: listado de categorías, precios de atributos) se almacenan en RAM.
- Bloques Smarty: Los bloques de módulos (ej: "Productos destacados", "Últimas noticias") se renderizan una vez y se sirven desde Redis.
- Sesiones: Las sesiones de usuario se almacenan en Redis en lugar de en la base de datos MySQL, reduciendo la carga.
Cloudflare: El CDN que Acelera y Protege tu Ecommerce
Cloudflare no es un CDN cualquiera. Para una tienda PrestaShop, ofrece:
- Caché de página completa (con reglas especiales para no cachear el carrito).
- Optimización automática de imágenes (WebP, AVIF).
- Firewall de aplicaciones web (WAF) contra ataques SQLi y XSS.
- Mínimo 30% de reducción en ancho de banda gracias a la compresión Brotli.
Configuración Paso a Paso
- Añade tu dominio en Cloudflare y cambia los nameservers.
- En el panel de Cloudflare, ve a Speed > Optimization:
- Activa Auto Minify (HTML, CSS, JS).
- Activa Brotli.
- Activa Polish (optimización de imágenes) en modo "Lossy".
- En Speed > Cache, configura el Browser Cache TTL a 4 horas (o más para contenido estático).
Reglas de Page Rules para PrestaShop
Las Page Rules son esenciales para que Cloudflare no cachee páginas dinámicas. Crea estas reglas:
| URL | Configuración |
|---|---|
tutienda.com/cart* | Cache Level: Bypass |
tutienda.com/order* | Cache Level: Bypass |
tutienda.com/my-account* | Cache Level: Bypass |
tutienda.com/admin* | Cache Level: Bypass |
tutienda.com/*.php | Cache Level: Bypass |
tutienda.com/*.jpg | Cache Level: Standard, Edge Cache TTL: 1 mes |
[INFO] Cloudflare también permite usar Workers para personalizar la caché. Por ejemplo, puedes cachear páginas de producto incluso para usuarios logueados si no muestras contenido personalizado.
SSL y HTTPS
Asegúrate de que Cloudflare maneje el SSL correctamente. En SSL/TLS > Overview, selecciona Full (strict). Luego, en PrestaShop, ve a Parámetros Avanzados > Rendimiento y activa Forzar HTTPS y Habilitar HTTP/2.
Integración Completa: Varnish + Redis + Cloudflare
La clave del rendimiento está en que estas tres herramientas trabajen en armonía. Aquí tienes el flujo de una petición optimizada:
- Usuario solicita
tutienda.com/zapatillas-rojas. - Cloudflare (caché global) comprueba si tiene la página en su red. Si es un HIT, sirve directamente (sin llegar al servidor).
- Si es MISS, la petición llega al servidor. Varnish (caché local en RAM) comprueba su caché. Si HIT, sirve la página.
- Si Varnish es MISS, la petición pasa a Nginx/Apache y ejecuta PrestaShop. Redis proporciona los datos cacheados (sesiones, consultas SQL) para que PHP no tenga que consultar MySQL constantemente.
- La respuesta se almacena en Varnish y se envía de vuelta a Cloudflare, que la guarda en su edge.
Pruebas de Carga Recomendadas
Antes de lanzar cambios en producción, realiza pruebas con herramientas como:
- GTmetrix: Mide el tiempo de carga y la puntuación de rendimiento.
- K6 o Locust: Para simular tráfico concurrente.
- Redis CLI:
redis-cli monitorpara ver qué consultas se están cacheando.
Un objetivo realista para una tienda PrestaShop bien configurada es:
- Tiempo de primera respuesta (TTFB) por debajo de 200 ms.
- Puntuación PageSpeed superior a 90 en móvil y escritorio.
- Soporte de 500+ usuarios concurrentes sin degradación notable.
Solución de Problemas Comunes
El carrito se vacía al activar Varnish
Causa: Varnish está cacheando páginas que incluyen el carrito.
Solución: Asegúrate de que las reglas req.url en VCL incluyan todas las rutas de checkout. También puedes configurar PrestaShop para que use AJAX en el carrito (preferencias de carrito) y que Varnish no cachee las peticiones AJAX.
Cloudflare muestra "Error 521"
Causa: Cloudflare no puede conectar con tu servidor. Normalmente ocurre si Varnish está escuchando en el puerto 80 y Cloudflare espera conexión directa.
Solución: En Cloudflare, ve a SSL/TLS > Origin Server y crea un certificado de origen. Luego, configura tu servidor para que escuche en HTTPS (puerto 443) o usa el modo Flexible SSL (menos seguro).
Redis se llena de datos basura
Causa: No se ha configurado una política de expulsión correcta.
Solución: En redis.conf, usa maxmemory-policy allkeys-lru. Esto eliminará las claves menos usadas cuando se alcance el límite de memoria.
Conclusión y Próximos Pasos
Configurar CDN PrestaShop con Varnish, Redis y Cloudflare no es un proyecto de fin de semana, pero el retorno en velocidad y escalabilidad es inmediato. Una tienda que carga en menos de 2 segundos tiene un 30% más de conversiones que una que tarda 5 segundos.
Para seguir profundizando, te recomiendo:
- Monitorizar con New Relic o Datadog para ver cuellos de botella en PHP/MySQL.
- Implementar un sistema de purga de caché para que cuando actualices un producto, Varnish y Cloudflare invaliden las URLs afectadas.
- Usar imágenes WebP con fallback a JPEG/PNG mediante el módulo de PrestaShop "PrestaShop WebP".
El rendimiento no es un lujo, es una necesidad competitiva. Con estas herramientas, tu tienda no solo será rápida, sino que estará preparada para el Black Friday sin sudar.
