Come configurare Cloudflare con PrestaShop correttamente

385 visualizzazioni

Perché usare Cloudflare con PrestaShop?

Cloudflare si posiziona tra i tuoi visitatori e il tuo server PrestaShop, agendo come reverse proxy che fornisce protezione DDoS, un Web Application Firewall (WAF), una CDN globale per le risorse statiche e la terminazione SSL/TLS. Quando configurato correttamente, Cloudflare può migliorare notevolmente i tempi di caricamento delle pagine del tuo negozio, ridurre la larghezza di banda del server e bloccare il traffico malevolo prima che raggiunga il tuo hosting. Tuttavia, una configurazione errata di Cloudflare è una delle cause più comuni di loop di redirect, checkout malfunzionanti, IP dei clienti errati e disastri di caching in PrestaShop. Questa guida ti accompagna attraverso ogni passaggio di una configurazione corretta.

Passaggio 1: Configurazione DNS

Dopo aver aggiunto il tuo dominio a Cloudflare, devi configurare i tuoi record DNS. La decisione più importante è quali record devono essere proxied (nuvola arancione) rispetto a quelli solo DNS (nuvola grigia).

Record proxied (nuvola arancione):

  • Il tuo record A o AAAA principale che punta all'IP del tuo server (es. esempio.com e www.esempio.com)
  • Qualsiasi CNAME per sottodomini che servono contenuti web

Record solo DNS (nuvola grigia):

  • Record MX (posta) — questi non devono mai essere proxied
  • Record utilizzati per FTP, SSH o altri servizi non HTTP
  • Record che puntano a server di posta (es. mail.esempio.com)

Importante: Se utilizzi un sottodominio per il back office del tuo PrestaShop (es. admin.esempio.com), puoi proxarlo, ma fai attenzione alle regole di caching discusse più avanti. Non creare mai un record DNS che esponga inutilmente il tuo vero IP del server — una volta che il dominio principale è proxied, gli aggressori che conoscono l'IP reale possono bypassare completamente Cloudflare. Considera di cambiare l'IP del tuo server dopo aver abilitato Cloudflare se era precedentemente pubblico.

Passaggio 2: Configurazione SSL/TLS — Usa Full (Strict)

Questa è la singola impostazione più critica. Vai su SSL/TLS > Panoramica nella tua dashboard Cloudflare.

Usa sempre la modalità Full (Strict). Ecco cosa fa ogni modalità e perché le altre sono sbagliate per PrestaShop:

  • Off: Nessuna crittografia. Non usare mai questa modalità per un negozio e-commerce.
  • Flexible: Crittografa il traffico tra il visitatore e Cloudflare, ma invia HTTP non crittografato al tuo server. Questo causa loop di redirect infiniti in PrestaShop perché il server vede HTTP, imposta force_ssl = 1, reindirizza a HTTPS, Cloudflare lo consegna tramite HTTPS, ma la richiesta successiva arriva al server di nuovo come HTTP. Questo è l'errore numero uno con Cloudflare e PrestaShop.
  • Full: Crittografa end-to-end ma non valida il certificato SSL del tuo server. Accettabile ma non raccomandato.
  • Full (Strict): Crittografa end-to-end e valida il tuo certificato di origine. Questa è la modalità corretta. Se non hai un certificato SSL a pagamento, usa un certificato Cloudflare Origin gratuito (valido 15 anni) installato sul tuo server.

Per installare un certificato Cloudflare Origin: vai su SSL/TLS > Origin Server > Create Certificate. Scarica il certificato e la chiave privata, installali nel tuo web server (Apache o Nginx) e riavvia il servizio. Questo certificato è valido solo per il traffico che passa attraverso Cloudflare — risulterà non valido se vi si accede direttamente.

Sotto SSL/TLS > Edge Certificates, abilita:

  • Always Use HTTPS:
  • Automatic HTTPS Rewrites: Sì (corregge i contenuti misti riscrivendo gli URL HTTP in HTTPS)
  • Minimum TLS Version: TLS 1.2

Passaggio 3: Configurazione del caching

Il comportamento di caching predefinito di Cloudflare funziona bene per le risorse statiche ma può causare gravi problemi se mette in cache le pagine dinamiche di PrestaShop. Vai su Caching > Configuration.

Impostazioni consigliate:

  • Caching Level: Standard
  • Browser Cache TTL: Respect Existing Headers (lascia che PrestaShop controlli il caching del browser tramite le sue impostazioni CCC)
  • Always Online: Disabilita questa opzione per i negozi e-commerce — mostrare pagine prodotto obsolete con prezzi errati o articoli esauriti è peggio che mostrare una pagina di errore

Cosa mette in cache Cloudflare per impostazione predefinita: Solo estensioni di file statici come .js, .css, .png, .jpg, .gif, .svg, .woff2, .ico. NON mette in cache le pagine HTML per impostazione predefinita, il che è corretto per PrestaShop. Non abilitare "Cache Everything" senza regole di bypass appropriate, altrimenti i tuoi clienti vedranno i carrelli, le sessioni e i dati personali di altre persone.

Passaggio 4: Page Rules e Cache Rules

Le Page Rules (o le più recenti Cache Rules) ti consentono di personalizzare il comportamento di Cloudflare per specifici pattern URL. Per PrestaShop, hai bisogno di regole che proteggano il pannello admin e il checkout dal caching ottimizzando al contempo la distribuzione dei contenuti statici.

Regola 1: Bypass cache per il pannello admin

Crea una regola che corrisponda a esempio.com/admin* (sostituisci "admin" con il nome effettivo della directory del tuo back office):

  • Cache Level: Bypass
  • Disable Performance: Sì (disabilita Rocket Loader, Mirage e altre ottimizzazioni che possono rompere il JS dell'admin)
  • Security Level: High

Regola 2: Bypass cache per checkout e carrello

Crea una regola che corrisponda a esempio.com/order* e un'altra per esempio.com/cart* (oppure usa esempio.com/*order* se utilizzi URL amichevoli):

  • Cache Level: Bypass
  • Disable Performance:

Se il tuo PrestaShop utilizza URL di checkout generati da moduli (come quelli dei moduli express checkout), aggiungi regole anche per quei percorsi.

Regola 3: Bypass cache per l'account cliente

Corrisponde a esempio.com/my-account* o esempio.com/identity* e qualsiasi altra pagina autenticata rivolta al cliente:

  • Cache Level: Bypass

Regola 4: Cache aggressiva per le risorse statiche

Corrisponde a esempio.com/themes/* e esempio.com/js/* e esempio.com/modules/*/views/css/*:

  • Cache Level: Cache Everything
  • Edge Cache TTL: 1 mese
  • Browser Cache TTL: 1 settimana

Nota sul nuovo sistema di Rules: Cloudflare sta migrando dalle Page Rules a Cache Rules, Configuration Rules e Transform Rules separate. La logica è la stessa — crea una Cache Rule con un'espressione di filtro personalizzata come (http.request.uri.path contains "/admin") e imposta l'azione su bypass cache.

Passaggio 5: Rocket Loader — Disabilitalo

Rocket Loader è la funzionalità di Cloudflare che differisce il caricamento di tutto il JavaScript sulle tue pagine. Vai su Speed > Optimization > Content Optimization e disabilita Rocket Loader.

Sebbene sembri vantaggioso, Rocket Loader causa gravi problemi con PrestaShop:

  • Pulsanti aggiungi al carrello non funzionanti: PrestaShop si basa su blocchi JavaScript inline e gestori jQuery ready che devono essere eseguiti in ordine. Rocket Loader li differisce e li riordina.
  • Guasti ai moduli di pagamento: I gateway di pagamento come PayPal, Stripe e Mollie iniettano il proprio JavaScript con cui Rocket Loader interferisce, causando errori al checkout e ordini persi.
  • Rottura del pannello admin: Il back office utilizza JavaScript inline estensivo per la validazione dei form, le chiamate AJAX e le pagine di configurazione dei moduli. Rocket Loader rompe tutto questo.
  • Moduli di cookie consent e GDPR: Questi si basano sul blocco di determinate risorse fino a quando non viene dato il consenso. Rocket Loader mina questo meccanismo riscrivendo il modo in cui tutte le risorse esterne vengono caricate.

Anche se imposti una Page Rule per disabilitare le funzionalità di prestazione su /admin*, il front office si romperà comunque. L'approccio più sicuro è disabilitare Rocket Loader globalmente.

Passaggio 6: Ripristino dell'IP reale

Quando Cloudflare proxa il traffico, il tuo server vede gli indirizzi IP di Cloudflare invece degli IP reali dei tuoi visitatori. Questo compromette PrestaShop in diversi modi: i record degli ordini mostrano IP di Cloudflare, il rilevamento delle frodi non funziona, la geolocalizzazione è errata, il rate limiting non funziona e i dati di analytics sono inutili.

Apache (mod_remoteip)

Installa e abilita il modulo:

sudo a2enmod remoteip
sudo systemctl restart apache2

Aggiungi alla tua configurazione Apache (virtual host o globale):

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/22

Cloudflare pubblica i propri intervalli IP su cloudflare.com/ips — controlla periodicamente e aggiorna la tua configurazione se cambiano.

Nginx

Usa il ngx_http_realip_module (generalmente compilato per impostazione predefinita):

set_real_ip_from 173.245.48.0/20;
set_real_ip_from 103.21.244.0/22;
# ... aggiungi tutti gli intervalli Cloudflare ...
real_ip_header CF-Connecting-IP;

Configurazione PrestaShop

Anche con mod_remoteip, alcuni moduli PrestaShop leggono l'IP da $_SERVER['HTTP_CF_CONNECTING_IP'] o $_SERVER['HTTP_X_FORWARDED_FOR']. Se continui a vedere gli IP di Cloudflare negli ordini dopo aver configurato mod_remoteip, controlla il config/defines.inc.php del tuo PrestaShop per eventuali override relativi agli IP o aggiungi il seguente codice (non sempre necessario se mod_remoteip funziona correttamente):

if (isset($_SERVER['HTTP_CF_CONNECTING_IP'])) {
    $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_CF_CONNECTING_IP'];
}

Passaggio 7: Regole WAF (Web Application Firewall)

Il WAF di Cloudflare protegge il tuo negozio da SQL injection, XSS e altri attacchi. Con il piano gratuito, ottieni una protezione di base. Con il piano Pro e superiori, ottieni i ruleset gestiti.

Impostazioni WAF consigliate

  • Security Level: Medium (sotto Security > Settings). "High" potrebbe attivare verifiche per clienti legittimi su reti mobili o VPN.
  • Challenge Passage: 30 minuti (per quanto tempo un visitatore resta verificato dopo aver risolto una verifica)
  • Bot Fight Mode: Abilita con cautela — può bloccare i callback dei gateway di pagamento (IPN) da PayPal, Stripe, ecc. Se lo abiliti, aggiungi eccezioni WAF per i percorsi webhook noti come /module/paypal/notify.

Regole WAF personalizzate per PrestaShop

Crea queste regole firewall sotto Security > WAF > Custom Rules:

Blocca l'accesso diretto a file sensibili:

Espressione: (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/")

Azione: Blocca

Rate limiting per i tentativi di login:

Usa le Rate Limiting Rules per limitare le richieste al tuo URL di login admin (es. /adminXYZ/index.php) a 5 richieste al minuto per IP. Questo previene gli attacchi brute force al back office.

Whitelist degli IP dei provider di pagamento:

Se usi Bot Fight Mode, crea una regola Allow per gli IP webhook del tuo provider di pagamento in modo che i loro callback server-to-server non vengano mai sottoposti a verifica.

Passaggio 8: Impostazioni delle prestazioni

Vai su Speed > Optimization e configura:

  • Auto Minify: Abilita per JavaScript, CSS e HTML. Il CCC (Combine, Compress, Cache) di PrestaShop esegue la propria minificazione, quindi potrebbe esserci una doppia minificazione, ma questo è generalmente innocuo. Se noti problemi di rendering, disabilita la minificazione CSS di Cloudflare e affidati al CCC di PrestaShop.
  • Brotli: Abilita — compressione migliore di gzip, supportata da tutti i browser moderni
  • Early Hints: Abilita — comunica ai browser di precaricare risorse critiche prima che l'HTML sia completamente consegnato
  • HTTP/2: Abilitato per impostazione predefinita su tutti i piani Cloudflare
  • HTTP/3 (QUIC): Abilita per migliori prestazioni su reti mobili

Mirage (piano Pro): Se disponibile, abilitalo. Mirage esegue il lazy-load delle immagini e serve immagini di dimensioni appropriate in base al dispositivo del visitatore. Funziona bene con le immagini prodotto di PrestaShop.

Polish (piano Pro): Abilita con compressione "Lossy" per le immagini prodotto, o "Lossless" se la qualità dell'immagine è critica (es. stampe artistiche). Polish comprime le immagini al volo sull'edge senza modificare gli originali.

Passaggio 9: Svuotare la cache di Cloudflare

Quando aggiorni il design del tuo negozio, aggiungi nuovi prodotti o modifichi file CSS/JS, devi svuotare la cache di Cloudflare affinché i visitatori vedano l'ultima versione.

Metodi per lo svuotamento:

  • Purge Everything: Dashboard > Caching > Configuration > Purge Everything. Usa con parsimonia — forza il ri-scaricamento di tutte le risorse dal tuo server.
  • Purge per URL: Svuota file specifici come esempio.com/themes/il-tuo-tema/assets/css/theme.css
  • Purge per Tag / Prefisso: Disponibile nei piani Enterprise
  • Purge via API: Usa l'API di Cloudflare per automatizzare lo svuotamento della cache dopo i deploy. Puoi integrarlo nel tuo flusso di deploy dei moduli PrestaShop.

Il sistema CCC di PrestaShop aggiunge stringhe di versione ai file CSS e JS (es. theme.css?v=12345), il che naturalmente invalida la cache di Cloudflare quando i file cambiano. Se ti affidi correttamente al CCC, raramente hai bisogno di svuotamenti manuali della cache per le risorse statiche.

Errori comuni e come evitarli

Errore 1: SSL impostato su Flexible

Sintomi: Loop di redirect infinito, ERR_TOO_MANY_REDIRECTS, pagina bianca. Soluzione: Cambia la modalità SSL a Full (Strict) e installa un certificato di origine sul tuo server.

Errore 2: Caching delle pagine dinamiche

Sintomi: Il cliente A vede il carrello o i dettagli dell'account del cliente B, prezzi errati visualizzati, gli utenti loggati vedono contenuti da utente sloggato. Soluzione: Non usare mai "Cache Everything" come impostazione globale. Metti in cache solo i percorsi delle risorse statiche. Esegui sempre il bypass della cache per /order, /cart, /my-account e il pannello admin.

Errore 3: Rocket Loader abilitato

Sintomi: L'aggiungi al carrello non funziona, i form di pagamento non si caricano, i moduli del back office generano errori JavaScript, le gallerie della pagina prodotto non funzionano. Soluzione: Disabilita Rocket Loader globalmente.

Errore 4: Mancato ripristino degli IP reali

Sintomi: Tutti gli ordini mostrano lo stesso indirizzo IP (un IP di Cloudflare), i moduli di geolocalizzazione mostrano paesi errati, il rate limiting blocca Cloudflare invece degli aggressori. Soluzione: Configura mod_remoteip o ngx_http_realip_module come descritto sopra.

Errore 5: Bot Fight Mode che blocca i webhook

Sintomi: Le conferme di pagamento non arrivano mai, gli ordini restano in stato "In attesa di pagamento", i log IPN/webhook mostrano risposte 403 o verifiche. Soluzione: Crea regole di eccezione WAF per gli URL webhook e gli intervalli IP dei provider di pagamento.

Errore 6: Problemi email dopo la configurazione

Sintomi: Le email smettono di funzionare, la validazione SPF/DKIM fallisce. Causa: I record DNS relativi alla posta (MX, SPF TXT, DKIM) sono stati accidentalmente impostati come proxied (nuvola arancione). Soluzione: Tutti i record DNS email devono essere solo DNS (nuvola grigia). Il proxying funziona solo per il traffico HTTP/HTTPS.

Errore 7: Development Mode lasciato attivo

Sintomi: La cache non funziona mai, carico elevato sul server di origine. Causa: La Development Mode è stata abilitata durante la configurazione e dimenticata. Soluzione: Disabilita la Development Mode in Caching > Configuration una volta completata la configurazione. La Development Mode si disabilita automaticamente dopo 3 ore, ma controlla comunque.

Checklist di risoluzione dei problemi

Quando qualcosa va storto con Cloudflare e PrestaShop, segui questa checklist:

  1. Loop di redirect: Controlla la modalità SSL (deve essere Full o Full Strict), controlla il .htaccess per redirect HTTPS duplicati, verifica che PS_SSL_ENABLED di PrestaShop sia impostato a 1 nel database.
  2. Avvisi di contenuti misti: Abilita Automatic HTTPS Rewrites in Cloudflare, controlla URL http:// hardcoded nel tuo tema o nelle pagine CMS.
  3. TTFB lento (Time to First Byte): Cloudflare non mette in cache l'HTML per impostazione predefinita. Un TTFB lento significa che il tuo server di origine è lento — ottimizza PrestaShop (abilita CCC, configura OPcache, controlla le query al database) piuttosto che dare la colpa a Cloudflare.
  4. CSS/JS non si aggiornano: Svuota la cache CCC di PrestaShop (back office > Prestazioni), poi svuota la cache di Cloudflare. Controlla che il CCC stia aggiungendo stringhe di versione agli URL dei file.
  5. Pannello admin lento o non funzionante: Assicurati che la tua Page Rule esegua il bypass della cache e disabiliti le funzionalità di prestazione per la directory admin. Controlla che il WAF di Cloudflare non stia bloccando le richieste AJAX dell'admin.
  6. Clienti sottoposti a verifiche: Abbassa il Security Level a Medium o Low. Controlla che l'Under Attack Mode non sia abilitato (dovrebbe essere usato solo durante attacchi DDoS attivi). Rivedi gli eventi firewall in Security > Events per vedere quali regole vengono attivate.
  7. Chiamate API che falliscono: Se il tuo negozio ha endpoint API REST o web service, assicurati che Cloudflare non stia verificando o bloccando le richieste API. Crea una regola WAF per consentire le richieste a /api/* da intervalli IP noti.
  8. Immagini che non si caricano: Controlla se la Hotlink Protection è abilitata e sta accidentalmente bloccando il tuo stesso dominio. Verifica che gli URL delle immagini utilizzino HTTPS.

Cloudflare con PrestaShop Multistore

Se gestisci PrestaShop multistore con più domini, ogni dominio deve essere aggiunto a Cloudflare separatamente (nel piano gratuito, ogni dominio è una zona separata). Assicurati che:

  • La modalità SSL sia impostata su Full (Strict) su ogni zona
  • Le Page Rules siano duplicate per ogni dominio
  • Il ripristino dell'IP reale copra tutti i domini (mod_remoteip è globale, quindi una sola configurazione gestisce tutti i virtual host)

Piano Cloudflare consigliato per PrestaShop

Il piano gratuito copre la maggior parte delle esigenze: DNS, CDN, WAF di base e SSL. Il piano Pro (circa 20 USD/mese) aggiunge Mirage, Polish, ruleset WAF gestiti e più Page Rules. Per negozi ad alto traffico, il piano Business aggiunge regole WAF personalizzate e funzionalità di prestazione aggiuntive. La maggior parte dei negozi PrestaShop di piccole e medie dimensioni funziona perfettamente con il piano gratuito o Pro.

Riepilogo

Configurare correttamente Cloudflare con PrestaShop si riduce a poche decisioni critiche: usa SSL Full (Strict), disabilita Rocket Loader, esegui il bypass della cache sulle pagine dinamiche, ripristina gli IP reali dei visitatori e proteggi i webhook di pagamento dalla protezione bot. Fai queste cose giuste fin dall'inizio e Cloudflare diventa un potente alleato per le prestazioni e la sicurezza del tuo negozio. Sbaglia e passerai ore a fare debug di loop di redirect, checkout non funzionanti e ordini fantasma. Prenditi il tempo per configurarlo correttamente una volta sola e il tuo negozio PrestaShop beneficerà di tempi di caricamento più rapidi a livello globale, carico del server ridotto e protezione robusta contro gli attacchi.

Questa risposta ti è stata utile?

Hai ancora domande?

Can't find what you're looking for? Send us your question and we'll get back to you quickly.

Loading...
Back to top