Cómo configurar Cloudflare con PrestaShop correctamente
¿Por qué usar Cloudflare con PrestaShop?
Cloudflare se sitúa entre tus visitantes y tu servidor PrestaShop, actuando como un proxy inverso que proporciona protección DDoS, un Firewall de Aplicaciones Web (WAF), una CDN global para recursos estáticos y terminación SSL/TLS. Cuando se configura correctamente, Cloudflare puede mejorar drásticamente los tiempos de carga de tu tienda, reducir el ancho de banda del servidor y bloquear tráfico malicioso antes de que llegue a tu alojamiento. Sin embargo, una configuración incorrecta de Cloudflare es una de las causas más comunes de bucles de redirección, checkouts rotos, IPs de clientes incorrectas y desastres de caché en PrestaShop. Esta guía te lleva paso a paso por una configuración correcta.
Paso 1: Configuración DNS
Después de añadir tu dominio a Cloudflare, necesitas configurar tus registros DNS. La decisión más importante es qué registros deben estar proxificados (nube naranja) frente a solo DNS (nube gris).
Registros proxificados (nube naranja):
- Tu registro A o AAAA principal apuntando a la IP de tu servidor (por ejemplo,
ejemplo.comywww.ejemplo.com) - Cualquier CNAME para subdominios que sirven contenido web
Registros solo DNS (nube gris):
- Registros MX (correo) — estos nunca deben proxificarse
- Registros utilizados para FTP, SSH u otros servicios no HTTP
- Registros que apuntan a servidores de correo (por ejemplo,
mail.ejemplo.com)
Importante: Si usas un subdominio para el back office de tu PrestaShop (por ejemplo, admin.ejemplo.com), puedes proxificarlo, pero ten en cuenta las reglas de caché que se discuten más adelante. Nunca crees un registro DNS que exponga innecesariamente la IP real de tu servidor — una vez que tu dominio principal está proxificado, los atacantes que conozcan la IP real pueden eludir Cloudflare por completo. Considera cambiar la IP de tu servidor después de activar Cloudflare si anteriormente era pública.
Paso 2: Configuración SSL/TLS — Usa Full (Strict)
Este es el ajuste más crítico de todos. Navega a SSL/TLS > Overview en tu panel de Cloudflare.
Usa siempre el modo Full (Strict). Esto es lo que hace cada modo y por qué los demás son incorrectos para PrestaShop:
- Off: Sin cifrado en absoluto. Nunca uses esto para una tienda de comercio electrónico.
- Flexible: Cifra el tráfico entre el visitante y Cloudflare, pero envía HTTP sin cifrar a tu servidor. Esto causa bucles de redirección infinitos en PrestaShop porque el servidor ve HTTP, establece
force_ssl = 1, redirige a HTTPS, Cloudflare lo entrega por HTTPS, pero la siguiente petición llega al servidor como HTTP de nuevo. Este es el error número uno de Cloudflare con PrestaShop. - Full: Cifra de extremo a extremo pero no valida el certificado SSL de tu servidor. Aceptable pero no recomendado.
- Full (Strict): Cifra de extremo a extremo y valida tu certificado de origen. Esto es lo correcto. Si no tienes un certificado SSL de pago, usa un Certificado de Origen de Cloudflare gratuito (válido por 15 años) instalado en tu servidor.
Para instalar un Certificado de Origen de Cloudflare: ve a SSL/TLS > Origin Server > Create Certificate. Descarga el certificado y la clave privada, instálalos en tu servidor web (Apache o Nginx) y reinicia el servicio. Este certificado solo es válido para el tráfico que pasa a través de Cloudflare — se mostrará como inválido si se accede directamente.
En SSL/TLS > Edge Certificates, activa:
- Always Use HTTPS: Sí
- Automatic HTTPS Rewrites: Sí (corrige el contenido mixto reescribiendo URLs HTTP a HTTPS)
- Minimum TLS Version: TLS 1.2
Paso 3: Configuración de caché
El comportamiento de caché predeterminado de Cloudflare funciona bien para recursos estáticos pero puede causar problemas graves si cachea páginas dinámicas de PrestaShop. Navega a Caching > Configuration.
Ajustes recomendados:
- Caching Level: Standard
- Browser Cache TTL: Respect Existing Headers (deja que PrestaShop controle la caché del navegador a través de sus ajustes CCC)
- Always Online: Desactiva esto para tiendas de comercio electrónico — mostrar páginas de producto obsoletas con precios incorrectos o artículos agotados es peor que mostrar una página de error
Lo que Cloudflare cachea por defecto: Solo extensiones de archivos estáticos como .js, .css, .png, .jpg, .gif, .svg, .woff2, .ico. NO cachea páginas HTML por defecto, lo cual es correcto para PrestaShop. No actives "Cache Everything" sin reglas de exclusión adecuadas, o tus clientes verán los carritos, sesiones y datos personales de otros clientes.
Paso 4: Page Rules y Cache Rules
Las Page Rules (o las más recientes Cache Rules) te permiten personalizar el comportamiento de Cloudflare para patrones de URL específicos. Para PrestaShop, necesitas reglas que protejan el panel de administración y el checkout del cacheo mientras optimizan la entrega de contenido estático.
Regla 1: Excluir caché para el panel de administración
Crea una regla que coincida con ejemplo.com/admin* (reemplaza "admin" con el nombre real de tu directorio de back office):
- Cache Level: Bypass
- Disable Performance: Sí (desactiva Rocket Loader, Mirage y otras optimizaciones que pueden romper el JS del panel admin)
- Security Level: High
Regla 2: Excluir caché para el checkout y el carrito
Crea una regla que coincida con ejemplo.com/order* y otra para ejemplo.com/cart* (o usa ejemplo.com/*order* si utilizas URLs amigables):
- Cache Level: Bypass
- Disable Performance: Sí
Si tu PrestaShop usa URLs de checkout generadas por módulos (como los de módulos de checkout express), añade reglas también para esas rutas.
Regla 3: Excluir caché para la cuenta de cliente
Coincide con ejemplo.com/my-account* o ejemplo.com/identity* y cualquier otra página autenticada dirigida al cliente:
- Cache Level: Bypass
Regla 4: Cachear recursos estáticos agresivamente
Coincide con ejemplo.com/themes/*, ejemplo.com/js/* y ejemplo.com/modules/*/views/css/*:
- Cache Level: Cache Everything
- Edge Cache TTL: 1 mes
- Browser Cache TTL: 1 semana
Nota sobre el nuevo sistema de reglas: Cloudflare está migrando de Page Rules a Cache Rules, Configuration Rules y Transform Rules separadas. La lógica es la misma — crea una Cache Rule con una expresión de filtro personalizada como (http.request.uri.path contains "/admin") y establece la acción para excluir la caché.
Paso 5: Rocket Loader — Desactívalo
Rocket Loader es la funcionalidad de Cloudflare que difiere la carga de todo el JavaScript en tus páginas. Navega a Speed > Optimization > Content Optimization y desactiva Rocket Loader.
Aunque suena beneficioso, Rocket Loader causa problemas graves con PrestaShop:
- Botones de añadir al carrito rotos: PrestaShop depende de bloques de JavaScript en línea y manejadores jQuery ready que deben ejecutarse en orden. Rocket Loader los difiere y reordena.
- Fallos en módulos de pago: Las pasarelas de pago como PayPal, Stripe y Mollie inyectan su propio JavaScript con el que Rocket Loader interfiere, causando fallos en el checkout y pedidos perdidos.
- Panel de administración roto: El back office usa ampliamente JavaScript en línea para la validación de formularios, llamadas AJAX y páginas de configuración de módulos. Rocket Loader rompe todo esto.
- Módulos de consentimiento de cookies y RGPD: Estos dependen de bloquear ciertos recursos hasta que se otorgue el consentimiento. Rocket Loader socava esto al reescribir cómo se cargan todos los recursos externos.
Incluso si estableces una Page Rule para desactivar las funciones de rendimiento en /admin*, el front office seguirá rompiéndose. El enfoque más seguro es desactivar Rocket Loader globalmente.
Paso 6: Restauración de la IP real
Cuando Cloudflare proxifica el tráfico, tu servidor ve las direcciones IP de Cloudflare en lugar de las IPs reales de tus visitantes. Esto rompe PrestaShop de varias formas: los registros de pedidos muestran IPs de Cloudflare, la detección de fraude falla, la geolocalización es incorrecta, la limitación de tasa no funciona y los datos de analítica son inútiles.
Apache (mod_remoteip)
Instala y activa el módulo:
sudo a2enmod remoteip
sudo systemctl restart apache2Añade a tu configuración de Apache (virtual host o global):
RemoteIPHeader CF-Connecting-IP
RemoteIPTrustedProxy 173.245.48.0/20
RemoteIPTrustedProxy 103.21.244.0/22
RemoteIPTrustedProxy 103.22.200.0/22
RemoteIPTrustedProxy 103.31.4.0/22
RemoteIPTrustedProxy 141.101.64.0/18
RemoteIPTrustedProxy 108.162.192.0/18
RemoteIPTrustedProxy 190.93.240.0/20
RemoteIPTrustedProxy 188.114.96.0/20
RemoteIPTrustedProxy 197.234.240.0/22
RemoteIPTrustedProxy 198.41.128.0/17
RemoteIPTrustedProxy 162.158.0.0/15
RemoteIPTrustedProxy 104.16.0.0/13
RemoteIPTrustedProxy 104.24.0.0/14
RemoteIPTrustedProxy 172.64.0.0/13
RemoteIPTrustedProxy 131.0.72.0/22Cloudflare publica sus rangos de IP en cloudflare.com/ips — revísalo periódicamente y actualiza tu configuración si cambian.
Nginx
Usa el módulo ngx_http_realip_module (normalmente compilado por defecto):
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 103.21.244.0/22;
# ... añade todos los rangos de Cloudflare ...
real_ip_header CF-Connecting-IP;Configuración de PrestaShop
Incluso con mod_remoteip, algunos módulos de PrestaShop leen la IP desde $_SERVER['HTTP_CF_CONNECTING_IP'] o $_SERVER['HTTP_X_FORWARDED_FOR']. Si aún ves IPs de Cloudflare en los pedidos después de configurar mod_remoteip, revisa el archivo config/defines.inc.php de tu PrestaShop para ver si hay sobreescrituras relacionadas con IPs o añade lo siguiente (no siempre es necesario si mod_remoteip funciona correctamente):
if (isset($_SERVER['HTTP_CF_CONNECTING_IP'])) {
$_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_CF_CONNECTING_IP'];
}Paso 7: Reglas WAF (Firewall de Aplicaciones Web)
El WAF de Cloudflare protege tu tienda contra inyección SQL, XSS y otros ataques. En el plan gratuito, obtienes protección básica. En Pro y superiores, obtienes los conjuntos de reglas gestionadas.
Configuración WAF recomendada
- Security Level: Medium (en Security > Settings). "High" puede activar desafíos para clientes legítimos en redes móviles o VPNs.
- Challenge Passage: 30 minutos (cuánto tiempo permanece verificado un visitante después de resolver un desafío)
- Bot Fight Mode: Actívalo con precaución — puede bloquear callbacks de pasarelas de pago (IPNs) de PayPal, Stripe, etc. Si lo activas, añade excepciones WAF para las rutas de webhook conocidas como
/module/paypal/notify.
Reglas WAF personalizadas para PrestaShop
Crea estas reglas de firewall en Security > WAF > Custom Rules:
Bloquear acceso directo a archivos sensibles:
Expresión: (http.request.uri.path contains "config/settings.inc.php") or (http.request.uri.path contains ".env") or (http.request.uri.path contains "composer.json") or (http.request.uri.path contains "var/logs/")
Acción: Block
Limitar tasa de intentos de inicio de sesión:
Usa reglas de limitación de tasa para restringir las peticiones a tu URL de inicio de sesión admin (por ejemplo, /adminXYZ/index.php) a 5 peticiones por minuto por IP. Esto previene ataques de fuerza bruta en el back office.
Lista blanca de IPs de proveedores de pago:
Si usas Bot Fight Mode, crea una regla Allow para las IPs de webhook de tu proveedor de pago para que sus callbacks de servidor a servidor nunca sean desafiados.
Paso 8: Configuración de rendimiento
Navega a Speed > Optimization y configura:
- Auto Minify: Activa para JavaScript, CSS y HTML. El CCC (Combinar, Comprimir, Cachear) de PrestaShop hace su propia minificación, así que puede haber doble minificación, pero esto suele ser inofensivo. Si ves problemas de renderizado, desactiva la minificación CSS de Cloudflare y confía en el CCC de PrestaShop en su lugar.
- Brotli: Activar — mejor compresión que gzip, soportada por todos los navegadores modernos
- Early Hints: Activar — indica a los navegadores que precarguen recursos críticos antes de que el HTML se entregue completamente
- HTTP/2: Activado por defecto en todos los planes de Cloudflare
- HTTP/3 (QUIC): Activar para mejor rendimiento en redes móviles
Mirage (plan Pro): Si está disponible, actívalo. Mirage carga las imágenes de forma diferida y sirve imágenes dimensionadas apropiadamente según el dispositivo del visitante. Funciona bien con las imágenes de producto de PrestaShop.
Polish (plan Pro): Activar con compresión "Lossy" para imágenes de producto, o "Lossless" si la calidad de imagen es crítica (por ejemplo, impresiones artísticas). Polish comprime las imágenes al vuelo en el borde sin modificar tus originales.
Paso 9: Purgar la caché de Cloudflare
Cuando actualizas el diseño de tu tienda, añades nuevos productos o cambias archivos CSS/JS, necesitas purgar la caché de Cloudflare para que los visitantes vean la versión más reciente.
Métodos para purgar:
- Purge Everything: Dashboard > Caching > Configuration > Purge Everything. Úsalo con moderación — fuerza a que todos los recursos se vuelvan a obtener de tu servidor.
- Purge by URL: Purga archivos específicos como
ejemplo.com/themes/tu-tema/assets/css/theme.css - Purge by Tag / Prefix: Disponible en planes Enterprise
- Purga basada en API: Usa la API de Cloudflare para automatizar la purga de caché después de los despliegues. Puedes integrar esto en tu flujo de trabajo de despliegue de módulos PrestaShop.
El sistema CCC de PrestaShop añade cadenas de versión a los archivos CSS y JS (por ejemplo, theme.css?v=12345), lo que invalida naturalmente la caché de Cloudflare cuando los archivos cambian. Si dependes correctamente del CCC, raramente necesitarás purgas manuales de caché para recursos estáticos.
Errores comunes y cómo evitarlos
Error 1: SSL configurado en Flexible
Síntomas: Bucle de redirección infinito, ERR_TOO_MANY_REDIRECTS, página en blanco. Solución: Cambia el modo SSL a Full (Strict) e instala un certificado de origen en tu servidor.
Error 2: Cachear páginas dinámicas
Síntomas: El cliente A ve el carrito o los detalles de cuenta del cliente B, precios incorrectos mostrados, usuarios logueados ven contenido de no logueados. Solución: Nunca uses "Cache Everything" como configuración global. Solo cachea rutas de recursos estáticos. Excluye siempre la caché para /order, /cart, /my-account y el panel de administración.
Error 3: Rocket Loader activado
Síntomas: Añadir al carrito no funciona, los formularios de pago no se cargan, los módulos del back office muestran errores de JavaScript, las galerías de la página de producto están rotas. Solución: Desactiva Rocket Loader globalmente.
Error 4: No restaurar las IPs reales
Síntomas: Todos los pedidos muestran la misma dirección IP (una IP de Cloudflare), los módulos de geolocalización muestran países incorrectos, la limitación de tasa bloquea a Cloudflare en vez de a los atacantes. Solución: Configura mod_remoteip o ngx_http_realip_module como se describe arriba.
Error 5: Bot Fight Mode bloqueando webhooks
Síntomas: Las confirmaciones de pago nunca llegan, los pedidos permanecen en estado "En espera de pago", los logs de IPN/webhook muestran 403 o respuestas de desafío. Solución: Crea reglas de excepción WAF para las URLs y rangos de IP de los webhooks de tu proveedor de pago.
Error 6: Problemas de correo electrónico después de la configuración
Síntomas: Los correos electrónicos dejan de funcionar, la validación SPF/DKIM falla. Causa: Los registros DNS relacionados con el correo (MX, SPF TXT, DKIM) se configuraron accidentalmente como proxificados (nube naranja). Solución: Todos los registros DNS de correo electrónico deben estar en solo DNS (nube gris). La proxificación solo funciona para tráfico HTTP/HTTPS.
Error 7: Modo de desarrollo dejado activado
Síntomas: La caché nunca funciona, alta carga en el servidor de origen. Causa: El modo de desarrollo se activó durante la configuración y se olvidó. Solución: Desactiva el modo de desarrollo en Caching > Configuration una vez completada tu configuración. El modo de desarrollo se desactiva automáticamente después de 3 horas, pero verifícalo de todas formas.
Lista de verificación para la resolución de problemas
Cuando algo sale mal con Cloudflare y PrestaShop, sigue esta lista de verificación:
- Bucles de redirección: Verifica el modo SSL (debe ser Full o Full Strict), comprueba el
.htaccesspara redirecciones HTTPS duplicadas, verifica quePS_SSL_ENABLEDestá establecido en 1 en la base de datos. - Advertencias de contenido mixto: Activa Automatic HTTPS Rewrites en Cloudflare, busca URLs
http://codificadas directamente en tu tema o páginas CMS. - TTFB lento (Time to First Byte): Cloudflare no cachea HTML por defecto. Un TTFB lento es tu servidor de origen siendo lento — optimiza PrestaShop (activa CCC, configura OPcache, revisa consultas de base de datos) en lugar de culpar a Cloudflare.
- CSS/JS no se actualiza: Limpia la caché CCC de PrestaShop (back office > Rendimiento), luego purga la caché de Cloudflare. Verifica que CCC está añadiendo cadenas de versión a las URLs de los archivos.
- Panel de administración lento o roto: Asegúrate de que tu Page Rule excluye la caché y desactiva las funciones de rendimiento para el directorio de administración. Verifica que el WAF de Cloudflare no está bloqueando peticiones AJAX del panel admin.
- Clientes recibiendo desafíos: Baja el Security Level a Medium o Low. Comprueba que el modo Under Attack no está activado (solo debe usarse durante ataques DDoS activos). Revisa los eventos del firewall en Security > Events para ver qué reglas se están activando.
- Llamadas API fallando: Si tu tienda tiene endpoints de API REST o servicios web, asegúrate de que Cloudflare no está desafiando o bloqueando las peticiones API. Crea una regla WAF para permitir peticiones a
/api/*desde rangos de IP conocidos. - Imágenes no se cargan: Comprueba si la Protección de Hotlink está activada y accidentalmente bloqueando tu propio dominio. Verifica que las URLs de imágenes usan HTTPS.
Cloudflare con PrestaShop Multitienda
Si ejecutas PrestaShop multitienda con múltiples dominios, cada dominio debe añadirse a Cloudflare por separado (en el plan gratuito, cada dominio es una zona separada). Asegúrate de que:
- El modo SSL está configurado en Full (Strict) en cada zona
- Las Page Rules están duplicadas para cada dominio
- La restauración de la IP real cubre todos los dominios (mod_remoteip es global, así que una sola configuración gestiona todos los virtual hosts)
Plan de Cloudflare recomendado para PrestaShop
El plan gratuito cubre la mayoría de las necesidades: DNS, CDN, WAF básico y SSL. El plan Pro (aproximadamente 20 USD/mes) añade Mirage, Polish, conjuntos de reglas WAF gestionadas y más Page Rules. Para tiendas de alto tráfico, el plan Business añade reglas WAF personalizadas y funciones de rendimiento adicionales. La mayoría de las tiendas PrestaShop pequeñas y medianas funcionan perfectamente bien con el plan gratuito o Pro.
Resumen
Configurar Cloudflare con PrestaShop correctamente se reduce a unas pocas decisiones críticas: usar SSL Full (Strict), desactivar Rocket Loader, excluir la caché en páginas dinámicas, restaurar las IPs reales de los visitantes y proteger los webhooks de pago de la protección contra bots. Acértalos desde el principio y Cloudflare se convierte en un poderoso aliado para el rendimiento y la seguridad de tu tienda. Falla en ellos y pasarás horas depurando bucles de redirección, checkouts rotos y pedidos fantasma. Tómate el tiempo de configurarlo correctamente una vez, y tu tienda PrestaShop se beneficiará de tiempos de carga más rápidos a nivel mundial, menor carga del servidor y una protección robusta contra ataques.
¿Le resultó útil esta respuesta?
¿Aún tiene preguntas?
Can't find what you're looking for? Send us your question and we'll get back to you quickly.