Jak prawidłowo skonfigurować Cloudflare z PrestaShop

390 wyświetleń

Dlaczego warto używać Cloudflare z PrestaShop?

Cloudflare znajduje się między Twoimi odwiedzającymi a serwerem PrestaShop, działając jako reverse proxy zapewniający ochronę przed DDoS, Web Application Firewall (WAF), globalny CDN dla zasobów statycznych oraz terminację SSL/TLS. Prawidłowo skonfigurowany Cloudflare może dramatycznie poprawić czasy ładowania stron Twojego sklepu, zmniejszyć przepustowość serwera i blokować złośliwy ruch, zanim w ogóle dotrze do Twojego hostingu. Jednak źle skonfigurowany Cloudflare jest jedną z najczęstszych przyczyn pętli przekierowań, uszkodzonego procesu składania zamówienia, nieprawidłowych adresów IP klientów i katastrof z buforowaniem w PrestaShop. Ten przewodnik przeprowadzi Cię przez każdy krok prawidłowej konfiguracji.

Krok 1: Konfiguracja DNS

Po dodaniu domeny do Cloudflare musisz skonfigurować rekordy DNS. Najważniejszą decyzją jest to, które rekordy powinny być proxowane (pomarańczowa chmurka) a które działać jako DNS-only (szara chmurka).

Rekordy proxowane (pomarańczowa chmurka):

  • Twój główny rekord A lub AAAA wskazujący na IP serwera (np. example.com i www.example.com)
  • Wszelkie rekordy CNAME dla subdomen obsługujących treści webowe

Rekordy DNS-only (szara chmurka):

  • Rekordy MX (poczta) — te nigdy nie mogą być proxowane
  • Rekordy używane do FTP, SSH lub innych usług nie-HTTP
  • Rekordy wskazujące na serwery pocztowe (np. mail.example.com)

Ważne: Jeśli używasz subdomeny dla panelu administracyjnego PrestaShop (np. admin.example.com), możesz ją proxować, ale pamiętaj o regułach buforowania omówionych później. Nigdy nie twórz rekordu DNS, który niepotrzebnie ujawnia prawdziwy adres IP Twojego serwera — gdy Twoja główna domena jest proxowana, atakujący znający prawdziwe IP mogą całkowicie ominąć Cloudflare. Rozważ zmianę IP serwera po włączeniu Cloudflare, jeśli wcześniej było publicznie znane.

Krok 2: Konfiguracja SSL/TLS — używaj Full (Strict)

To jest absolutnie najważniejsze ustawienie. Przejdź do SSL/TLS > Overview w panelu Cloudflare.

Zawsze używaj trybu Full (Strict). Oto co robi każdy tryb i dlaczego pozostałe są niewłaściwe dla PrestaShop:

  • Off: Brak szyfrowania. Nigdy nie używaj tego dla sklepu e-commerce.
  • Flexible: Szyfruje ruch między odwiedzającym a Cloudflare, ale wysyła niezaszyfrowane HTTP do Twojego serwera. To powoduje nieskończone pętle przekierowań w PrestaShop, ponieważ serwer widzi HTTP, ustawia force_ssl = 1, przekierowuje na HTTPS, Cloudflare dostarcza go przez HTTPS, ale następne żądanie trafia na serwer ponownie jako HTTP. To jest najczęstszy błąd Cloudflare z PrestaShop.
  • Full: Szyfruje end-to-end, ale nie weryfikuje certyfikatu SSL Twojego serwera. Akceptowalne, ale nie zalecane.
  • Full (Strict): Szyfruje end-to-end i weryfikuje certyfikat serwera źródłowego. To jest prawidłowe ustawienie. Jeśli nie masz płatnego certyfikatu SSL, użyj darmowego Cloudflare Origin Certificate (ważnego przez 15 lat) zainstalowanego na Twoim serwerze.

Aby zainstalować Cloudflare Origin Certificate: przejdź do SSL/TLS > Origin Server > Create Certificate. Pobierz certyfikat i klucz prywatny, zainstaluj je na swoim serwerze webowym (Apache lub Nginx) i uruchom ponownie usługę. Ten certyfikat jest ważny tylko dla ruchu przechodzącego przez Cloudflare — będzie wyświetlany jako nieważny przy bezpośrednim dostępie.

W sekcji SSL/TLS > Edge Certificates włącz:

  • Always Use HTTPS: Tak
  • Automatic HTTPS Rewrites: Tak (naprawia mieszaną treść przez przepisywanie URL-ów HTTP na HTTPS)
  • Minimum TLS Version: TLS 1.2

Krok 3: Konfiguracja buforowania

Domyślne zachowanie buforowania Cloudflare działa dobrze dla zasobów statycznych, ale może powodować poważne problemy, jeśli buforuje dynamiczne strony PrestaShop. Przejdź do Caching > Configuration.

Zalecane ustawienia:

  • Caching Level: Standard
  • Browser Cache TTL: Respect Existing Headers (pozwól PrestaShop kontrolować buforowanie przeglądarki przez ustawienia CCC)
  • Always Online: Wyłącz to dla sklepów e-commerce — pokazywanie nieaktualnych stron produktów ze złymi cenami lub produktami niedostępnymi jest gorsze niż pokazanie strony błędu

Co Cloudflare buforuje domyślnie: Tylko pliki statyczne z rozszerzeniami takimi jak .js, .css, .png, .jpg, .gif, .svg, .woff2, .ico. NIE buforuje domyślnie stron HTML, co jest prawidłowe dla PrestaShop. Nie włączaj „Cache Everything" bez odpowiednich reguł obejścia, bo Twoi klienci będą widzieć koszyki, sesje i dane osobowe innych osób.

Krok 4: Page Rules i Cache Rules

Page Rules (lub nowsze Cache Rules) pozwalają dostosować zachowanie Cloudflare dla konkretnych wzorców URL. Dla PrestaShop potrzebujesz reguł chroniących panel administracyjny i proces składania zamówienia przed buforowaniem, jednocześnie optymalizując dostarczanie treści statycznych.

Reguła 1: Ominięcie cache dla panelu administracyjnego

Utwórz regułę pasującą do example.com/admin* (zamień „admin" na swoją rzeczywistą nazwę katalogu panelu administracyjnego):

  • Cache Level: Bypass
  • Disable Performance: Tak (wyłącza Rocket Loader, Mirage i inne optymalizacje, które mogą psuć JS panelu administracyjnego)
  • Security Level: High

Reguła 2: Ominięcie cache dla kasy i koszyka

Utwórz regułę pasującą do example.com/order* i kolejną dla example.com/cart* (lub użyj example.com/*order* jeśli używasz przyjaznych URL-ów):

  • Cache Level: Bypass
  • Disable Performance: Tak

Jeśli Twój PrestaShop używa URL-ów kasy generowanych przez moduły (np. z modułów express checkout), dodaj reguły również dla tych ścieżek.

Reguła 3: Ominięcie cache dla konta klienta

Dopasuj example.com/my-account* lub example.com/identity* i wszelkie inne strony klienta wymagające uwierzytelnienia:

  • Cache Level: Bypass

Reguła 4: Agresywne buforowanie zasobów statycznych

Dopasuj example.com/themes/* i example.com/js/* i example.com/modules/*/views/css/*:

  • Cache Level: Cache Everything
  • Edge Cache TTL: 1 miesiąc
  • Browser Cache TTL: 1 tydzień

Uwaga dotycząca nowszego systemu Rules: Cloudflare migruje z Page Rules na oddzielne Cache Rules, Configuration Rules i Transform Rules. Logika jest taka sama — utwórz Cache Rule z niestandardowym wyrażeniem filtrującym jak (http.request.uri.path contains \"/admin\") i ustaw akcję na bypass cache.

Krok 5: Rocket Loader — wyłącz go

Rocket Loader to funkcja Cloudflare, która odracza ładowanie całego JavaScript na Twoich stronach. Przejdź do Speed > Optimization > Content Optimization i wyłącz Rocket Loader.

Choć brzmi korzystnie, Rocket Loader powoduje poważne problemy z PrestaShop:

  • Zepsute przyciski dodawania do koszyka: PrestaShop polega na inline'owych blokach JavaScript i handlerach jQuery ready, które muszą wykonywać się w kolejności. Rocket Loader odracza je i zmienia kolejność.
  • Awarie modułów płatności: Bramki płatności jak PayPal, Stripe i Mollie wstrzykują własny JavaScript, z którym Rocket Loader interferuje, powodując awarie kasy i utracone zamówienia.
  • Uszkodzenie panelu administracyjnego: Panel administracyjny intensywnie wykorzystuje inline'owy JavaScript do walidacji formularzy, wywołań AJAX i stron konfiguracji modułów. Rocket Loader psuje to wszystko.
  • Moduły zgody na cookies i RODO: Polegają na blokowaniu pewnych zasobów do momentu udzielenia zgody. Rocket Loader podważa to, przepisując sposób ładowania wszystkich zewnętrznych zasobów.

Nawet jeśli ustawisz Page Rule wyłączający funkcje wydajnościowe na /admin*, front office i tak się zepsuje. Najbezpieczniejszym podejściem jest wyłączenie Rocket Loadera globalnie.

Krok 6: Przywracanie prawdziwego IP

Gdy Cloudflare proxuje ruch, Twój serwer widzi adresy IP Cloudflare zamiast prawdziwych IP odwiedzających. To psuje PrestaShop na kilka sposobów: rekordy zamówień pokazują IP Cloudflare, wykrywanie oszustw zawodzi, geolokalizacja jest błędna, ograniczanie szybkości nie działa, a dane analityczne są bezużyteczne.

Apache (mod_remoteip)

Zainstaluj i włącz moduł:

sudo a2enmod remoteip\nsudo systemctl restart apache2

Dodaj do konfiguracji Apache (virtual host lub globalnie):

RemoteIPHeader CF-Connecting-IP\nRemoteIPTrustedProxy 173.245.48.0/20\nRemoteIPTrustedProxy 103.21.244.0/22\nRemoteIPTrustedProxy 103.22.200.0/22\nRemoteIPTrustedProxy 103.31.4.0/22\nRemoteIPTrustedProxy 141.101.64.0/18\nRemoteIPTrustedProxy 108.162.192.0/18\nRemoteIPTrustedProxy 190.93.240.0/20\nRemoteIPTrustedProxy 188.114.96.0/20\nRemoteIPTrustedProxy 197.234.240.0/22\nRemoteIPTrustedProxy 198.41.128.0/17\nRemoteIPTrustedProxy 162.158.0.0/15\nRemoteIPTrustedProxy 104.16.0.0/13\nRemoteIPTrustedProxy 104.24.0.0/14\nRemoteIPTrustedProxy 172.64.0.0/13\nRemoteIPTrustedProxy 131.0.72.0/22

Cloudflare publikuje swoje zakresy IP na cloudflare.com/ips — sprawdzaj okresowo i aktualizuj konfigurację, jeśli się zmienią.

Nginx

Użyj modułu ngx_http_realip_module (zazwyczaj domyślnie skompilowany):

set_real_ip_from 173.245.48.0/20;\nset_real_ip_from 103.21.244.0/22;\n# ... dodaj wszystkie zakresy Cloudflare ...\nreal_ip_header CF-Connecting-IP;

Konfiguracja PrestaShop

Nawet z mod_remoteip niektóre moduły PrestaShop odczytują IP z $_SERVER['HTTP_CF_CONNECTING_IP'] lub $_SERVER['HTTP_X_FORWARDED_FOR']. Jeśli po skonfigurowaniu mod_remoteip nadal widzisz adresy IP Cloudflare w zamówieniach, sprawdź plik config/defines.inc.php PrestaShop pod kątem nadpisań związanych z IP lub dodaj następujący kod (nie zawsze konieczny, jeśli mod_remoteip działa):

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

Krok 7: Reguły WAF (Web Application Firewall)

WAF Cloudflare chroni Twój sklep przed SQL injection, XSS i innymi atakami. Na darmowym planie otrzymujesz podstawową ochronę. Na planie Pro i wyższych otrzymujesz zarządzane zestawy reguł.

Zalecane ustawienia WAF

  • Security Level: Medium (pod Security > Settings). „High" może wywoływać wyzwania dla legalnych klientów w sieciach mobilnych lub na VPN-ach.
  • Challenge Passage: 30 minut (jak długo odwiedzający pozostaje zweryfikowany po rozwiązaniu wyzwania)
  • Bot Fight Mode: Włączaj z ostrożnością — może blokować callbacki bramek płatności (IPN) od PayPal, Stripe itp. Jeśli go włączysz, dodaj wyjątki WAF dla znanych ścieżek webhooków, takich jak /module/paypal/notify.

Niestandardowe reguły WAF dla PrestaShop

Utwórz te reguły firewalla pod Security > WAF > Custom Rules:

Blokowanie bezpośredniego dostępu do wrażliwych plików:

Wyrażenie: (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/\")

Akcja: Block

Ograniczenie częstotliwości prób logowania:

Użyj Rate Limiting Rules, aby ograniczyć żądania do URL logowania administratora (np. /adminXYZ/index.php) do 5 żądań na minutę na IP. To zapobiega atakom brute force na panel administracyjny.

Whitelisting adresów IP dostawców płatności:

Jeśli używasz Bot Fight Mode, utwórz regułę Allow dla adresów IP webhooków Twojego dostawcy płatności, aby ich callbacki server-to-server nigdy nie były weryfikowane.

Krok 8: Ustawienia wydajności

Przejdź do Speed > Optimization i skonfiguruj:

  • Auto Minify: Włącz dla JavaScript, CSS i HTML. CCC PrestaShop (Combine, Compress, Cache) wykonuje własną minifikację, więc może dojść do podwójnej minifikacji, ale jest to zazwyczaj nieszkodliwe. Jeśli zauważysz problemy z renderowaniem, wyłącz minifikację CSS Cloudflare i polegaj na CCC PrestaShop.
  • Brotli: Włącz — lepsza kompresja niż gzip, obsługiwana przez wszystkie nowoczesne przeglądarki
  • Early Hints: Włącz — informuje przeglądarki o wstępnym ładowaniu krytycznych zasobów przed pełnym dostarczeniem HTML
  • HTTP/2: Włączony domyślnie na wszystkich planach Cloudflare
  • HTTP/3 (QUIC): Włącz dla lepszej wydajności w sieciach mobilnych

Mirage (plan Pro): Jeśli dostępne, włącz. Mirage stosuje lazy loading obrazów i serwuje odpowiednio dopasowane obrazy w zależności od urządzenia odwiedzającego. Dobrze współpracuje z obrazami produktów PrestaShop.

Polish (plan Pro): Włącz z kompresją „Lossy" dla obrazów produktów lub „Lossless", jeśli jakość obrazu jest krytyczna (np. druki artystyczne). Polish kompresuje obrazy w locie na krawędzi sieci bez modyfikowania oryginałów.

Krok 9: Czyszczenie cache Cloudflare

Gdy aktualizujesz wygląd sklepu, dodajesz nowe produkty lub zmieniasz pliki CSS/JS, musisz wyczyścić cache Cloudflare, aby odwiedzający widzieli najnowszą wersję.

Metody czyszczenia:

  • Purge Everything: Dashboard > Caching > Configuration > Purge Everything. Używaj oszczędnie — wymusza ponowne pobranie wszystkich zasobów z Twojego serwera.
  • Purge by URL: Czyść konkretne pliki, np. example.com/themes/your-theme/assets/css/theme.css
  • Purge by Tag / Prefix: Dostępne na planach Enterprise
  • Czyszczenie przez API: Użyj API Cloudflare do automatyzacji czyszczenia cache po wdrożeniach. Możesz to zintegrować z workflow wdrażania modułów PrestaShop.

System CCC PrestaShop dołącza ciągi wersji do plików CSS i JS (np. theme.css?v=12345), co naturalnie unieważnia cache Cloudflare, gdy pliki się zmieniają. Jeśli prawidłowo korzystasz z CCC, rzadko potrzebujesz ręcznego czyszczenia cache dla zasobów statycznych.

Najczęstsze błędy i jak ich unikać

Błąd 1: SSL ustawiony na Flexible

Objawy: Nieskończona pętla przekierowań, ERR_TOO_MANY_REDIRECTS, biała strona. Rozwiązanie: Zmień tryb SSL na Full (Strict) i zainstaluj certyfikat origin na swoim serwerze.

Błąd 2: Buforowanie dynamicznych stron

Objawy: Klient A widzi koszyk lub dane konta Klienta B, wyświetlane są złe ceny, zalogowani użytkownicy widzą treść dla niezalogowanych. Rozwiązanie: Nigdy nie używaj „Cache Everything" jako globalnego ustawienia. Buforuj tylko ścieżki zasobów statycznych. Zawsze omijaj cache dla /order, /cart, /my-account i panelu administracyjnego.

Błąd 3: Włączony Rocket Loader

Objawy: Dodawanie do koszyka nie działa, formularze płatności się nie ładują, moduły w panelu administracyjnym generują błędy JavaScript, galerie na stronach produktów są zepsute. Rozwiązanie: Wyłącz Rocket Loader globalnie.

Błąd 4: Brak przywracania prawdziwych IP

Objawy: Wszystkie zamówienia pokazują ten sam adres IP (IP Cloudflare), moduły geolokalizacji pokazują złe kraje, ograniczanie szybkości banuje Cloudflare zamiast atakujących. Rozwiązanie: Skonfiguruj mod_remoteip lub ngx_http_realip_module, jak opisano powyżej.

Błąd 5: Bot Fight Mode blokujący webhooki

Objawy: Potwierdzenia płatności nigdy nie dochodzą, zamówienia pozostają w statusie „Oczekiwanie na płatność", logi IPN/webhook pokazują odpowiedzi 403 lub challenge. Rozwiązanie: Utwórz reguły wyjątków WAF dla URL-ów webhooków dostawców płatności i zakresów IP.

Błąd 6: Problemy z e-mailem po konfiguracji

Objawy: E-maile przestają działać, walidacja SPF/DKIM zawodzi. Przyczyna: Rekordy DNS związane z e-mailem (MX, SPF TXT, DKIM) zostały przypadkowo ustawione jako proxowane (pomarańczowa chmurka). Rozwiązanie: Wszystkie rekordy DNS dotyczące e-maila muszą być DNS-only (szara chmurka). Proxowanie działa tylko dla ruchu HTTP/HTTPS.

Błąd 7: Development Mode pozostawiony włączony

Objawy: Cache nigdy nie działa, wysokie obciążenie serwera źródłowego. Przyczyna: Development Mode został włączony podczas konfiguracji i zapomniany. Rozwiązanie: Wyłącz Development Mode w Caching > Configuration po zakończeniu konfiguracji. Development Mode automatycznie wyłącza się po 3 godzinach, ale i tak sprawdź.

Lista kontrolna rozwiązywania problemów

Gdy coś pójdzie nie tak z Cloudflare i PrestaShop, przejdź przez tę listę kontrolną:

  1. Pętle przekierowań: Sprawdź tryb SSL (musi być Full lub Full Strict), sprawdź .htaccess pod kątem zduplikowanych przekierowań HTTPS, zweryfikuj, że PS_SSL_ENABLED w PrestaShop jest ustawione na 1 w bazie danych.
  2. Ostrzeżenia o mieszanej treści: Włącz Automatic HTTPS Rewrites w Cloudflare, sprawdź twardo zakodowane URL-e http:// w szablonie lub stronach CMS.
  3. Wolny TTFB (Time to First Byte): Cloudflare domyślnie nie buforuje HTML. Wolny TTFB to wolny serwer źródłowy — optymalizuj PrestaShop (włącz CCC, skonfiguruj OPcache, sprawdź zapytania bazodanowe) zamiast winić Cloudflare.
  4. CSS/JS się nie aktualizuje: Wyczyść cache CCC PrestaShop (panel administracyjny > Wydajność), następnie wyczyść cache Cloudflare. Sprawdź, czy CCC dołącza ciągi wersji do URL-ów plików.
  5. Panel administracyjny wolny lub zepsuty: Upewnij się, że Twoja Page Rule omija cache i wyłącza funkcje wydajnościowe dla katalogu administratora. Sprawdź, czy WAF Cloudflare nie blokuje żądań AJAX panelu administracyjnego.
  6. Klienci otrzymują wyzwania: Obniż Security Level do Medium lub Low. Sprawdź, czy Under Attack Mode nie jest włączony (powinien być używany tylko podczas aktywnych ataków DDoS). Przejrzyj zdarzenia firewalla w Security > Events, aby zobaczyć, jakie reguły się uruchamiają.
  7. Wywołania API zawodzą: Jeśli Twój sklep ma endpointy REST API lub web services, upewnij się, że Cloudflare nie weryfikuje ani nie blokuje żądań API. Utwórz regułę WAF zezwalającą na żądania do /api/* ze znanych zakresów IP.
  8. Obrazy się nie ładują: Sprawdź, czy Hotlink Protection jest włączone i przypadkowo nie blokuje Twojej własnej domeny. Zweryfikuj, że URL-e obrazów używają HTTPS.

Cloudflare z PrestaShop Multistore

Jeśli prowadzisz PrestaShop multistore z wieloma domenami, każda domena musi być dodana do Cloudflare osobno (na darmowym planie każda domena to oddzielna strefa). Upewnij się, że:

  • Tryb SSL jest ustawiony na Full (Strict) na każdej strefie
  • Page Rules są zduplikowane dla każdej domeny
  • Przywracanie prawdziwego IP obejmuje wszystkie domeny (mod_remoteip jest globalny, więc jedna konfiguracja obsługuje wszystkie virtual hosty)

Zalecany plan Cloudflare dla PrestaShop

Darmowy plan pokrywa większość potrzeb: DNS, CDN, podstawowy WAF i SSL. Plan Pro (około 20 USD/miesiąc) dodaje Mirage, Polish, zarządzane zestawy reguł WAF i więcej Page Rules. Dla sklepów o dużym ruchu, plan Business dodaje niestandardowe reguły WAF i dodatkowe funkcje wydajnościowe. Większość małych i średnich sklepów PrestaShop działa doskonale na darmowym planie lub planie Pro.

Podsumowanie

Prawidłowa konfiguracja Cloudflare z PrestaShop sprowadza się do kilku kluczowych decyzji: używaj SSL Full (Strict), wyłącz Rocket Loader, omijaj cache na dynamicznych stronach, przywracaj prawdziwe IP odwiedzających i chroń webhooki płatności przed ochroną przed botami. Ustaw to prawidłowo od początku, a Cloudflare stanie się potężnym sojusznikiem wydajności i bezpieczeństwa Twojego sklepu. Ustaw to źle, a spędzisz godziny na debugowaniu pętli przekierowań, zepsutych kas i widmowych zamówień. Poświęć czas na jednokrotną prawidłową konfigurację, a Twój sklep PrestaShop skorzysta z szybszych czasów ładowania na całym świecie, zmniejszonego obciążenia serwera i solidnej ochrony przed atakami.

Czy ta odpowiedź była pomocna?

Masz jeszcze pytania?

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

Loading...
Back to top