Darmowy plan Cloudflare obejmuje DNS, proxy, globalną sieć serwerów brzegowych, podstawową ochronę DDoS, SSL/TLS i Cache Rules. Może nie zastąpi poprawnie skonfigurowanego serwera, ale jako front dla samodzielnie hostowanego Next.js sprawdza się bardzo dobrze.
Konfiguracja Cloudflare dla Next.js krok po kroku
1. DNS w Cloudflare i przeniesienie domeny
Zmień nameservery domeny na te podane w dashboardzie Cloudflare. Po propagacji, zwykle w ciągu 2-24 godzin, Cloudflare zacznie zarządzać DNS-em.
Dodaj rekordy:
(pomarańczowa chmurka) oznacza, że ruch przechodzi przez Cloudflare i korzysta z CDN, ochrony DDoS oraz cache. DNS only (szara chmurka) tylko rozwiązuje DNS, bez proxy, cache i ochrony na serwerach brzegowych.
2. SSL Full (Strict) dla Next.js za Cloudflare
Ustawienia zmienisz w panelu Cloudflare, przechodząc kolejno przez zakładki wskazane strzałkami. Rozpocznij od Dashboard → SSL/TLS → Overview:
- Flexible. SSL działa między użytkownikiem a Cloudflare, ale do Twojego serwera ruch idzie po HTTP. Unikaj tego trybu przy logowaniu, płatnościach i danych użytkownika.
- Full. Ruch jest szyfrowany na całej trasie, ale Cloudflare zaakceptuje też certyfikat wystawiony samodzielnie na serwerze.
- . W tym wariancie, który jest najlepszy, ruch jest szyfrowany na całej trasie, a Cloudflare sprawdza certyfikat serwera źródłowego. Wymaga ważnego certyfikatu na serwerze, np. Let's Encrypt albo Cloudflare Origin CA.
3. Cache Rules dla statycznych plików Next.js
Next.js generuje statyczne pliki w /_next/static/ z hashem zawartości w nazwie. Po zmianie pliku zmienia się też jego adres, więc Cloudflare może przechowywać takie zasoby w cache przez długi czas.
Dashboard → Caching → Cache Rules → Create Rule:
Przy /_next/image dobierz czas cache do źródła obrazów. Jeśli obrazy z CMS-a albo zewnętrznego CDN-u mogą zmieniać się pod tym samym adresem, zbyt długi cache w przeglądarce utrudni szybką podmianę. W takim przypadku lepiej wersjonować adresy obrazów albo ustawić krótszy czas cache.
Nie ustawiaj długiego czasu cache na wszystkie pliki z /public tylko dlatego, że mają rozszerzenie .svg, .png albo .ico. /_next/static/ jest bezpieczne, z racji tego, że Next.js dodaje hash do nazw plików. Publiczne zasoby, takie jak favicon.ico, logo.svg czy baner bez wersji w adresie, mogą zmienić się pod tym samym URL-em. Wtedy potrzebujesz krótszego czasu cache, wersjonowanej nazwy pliku albo czyszczenia cache po wdrożeniu.
4. Wyłączenie cache dla dynamicznych stron
SSR, Server Actions i API nie powinny trafiać do cache Cloudflare bez bardzo przemyślanej konfiguracji. Zacznij od omijania cache dla dynamicznych ścieżek, a cache dla HTML dodawaj dopiero tam, gdzie rozumiesz konsekwencje dla personalizacji, cookies i rewalidacji.
W Next.js łatwo przeoczyć, że strony statyczne i ISR zwracają nagłówek Cache-Control z dyrektywą s-maxage, którą CDN może respektować. Ma to sens tylko wtedy, gdy dokładnie wiesz, kiedy różni użytkownicy mogą zobaczyć tę samą wersję HTML-a, a kiedy trzeba ją rozdzielić po cookies, wariantach RSC i rewalidacji. revalidatePath() oraz revalidateTag() odświeżą cache po stronie Next.js, natomiast Cloudflare nadal może trzymać własną kopię HTML do końca ustawionego czasu cache. To jest powodem, by domyślnie zostawić HTML poza dodatkową regułą cache Cloudflare, a jeśli zdecydujesz się go cachować, zsynchronizuj czas cache z rewalidacją Next.js i wpinaj czyszczenie cache CDN w webhook albo proces CI/CD po zmianie treści.
5. Konfiguracja nginx z Cloudflare
Proxy Cloudflare zmienia IP requestu. Bez dodatkowej konfiguracji nginx widzi adres Cloudflare, a nie użytkownika. Napraw to tak:
Zamiast wklejać zakresy IP na sztywno, wygeneruj je skryptem, który pobiera aktualną listę z oficjalnego źródła Cloudflare:
Co nadal zostaje po Twojej stronie?
Cloudflare rozwiązuje warstwę wejściową: DNS, TLS, cache na serwerach brzegowych i część ochrony przed ruchem automatycznym. Nie zastępuje jednak platformy wdrożeniowej, dlatego przy samodzielnie hostowanym Next.js nadal odpowiadasz za:
- proces wdrożenia i wycofania błędnej wersji
- kontrolę zdrowia aplikacji oraz restart po awarii
- aktualizacje systemu, Node.js, nginx i zależności
- backupy, logi aplikacji i monitoring błędów
strategię dla
.next/cache, jeśli uruchamiasz więcej niż jedną instancjęprzechowywanie uploadów i plików użytkowników poza lokalnym dyskiem VPS-a
To wszystko zostaje po Twojej stronie niezależnie od Cloudflare.
Ochrona DDoS i Bot Management w Cloudflare
Darmowy plan Cloudflare automatycznie chroni przed DDoS. Warto jednak przejrzeć kilka dodatkowych ustawień:
Security Settings w Cloudflare
- Security Level: Medium (ogranicza ruch z podejrzanych IP)
- Challenge Passage: 30 minutes (jak długo CAPTCHA jest ważne)
- Browser Integrity Check: On
Rate Limiting na darmowym planie Cloudflare
W panelu Cloudflare ta funkcja nazywa się Rate Limiting, ale w praktyce chodzi po prostu o ograniczanie liczby żądań z jednego źródła w krótkim czasie. Jest to bardzo przydatne przy API, formularzach i endpointach logowania.
Dashboard → Security → WAF → Rate Limiting Rules:
Bot Fight Mode dla ochrony aplikacji
Dashboard → Security → Bots → Bot Fight Mode: On
Bot Fight Mode pomaga przy prostym ruchu botów, choć nie daje większej kontroli. Przy API, aplikacji mobilnej albo nietypowych integracjach może błędnie wymagać dodatkowej weryfikacji i dlatego lepiej sprawdzają się konkretne reguły WAF i limitowania ruchu.
Optymalizacje wydajności Cloudflare dla Next.js
Minifikacja: dlaczego już jej nie włączasz
Jeśli szukasz w panelu opcji Auto Minify to jej tam nie znajdziesz, ponieważ Cloudflare wycofał ją 5 sierpnia 2024. Stało się to z prostego powodu: nowoczesne narzędzia budują już zminifikowane pliki, a zysk z dodatkowej minifikacji na serwerach brzegowych był prawie żaden, poniżej 0,1% w sieci Cloudflare. Next.js minifikuje JS i CSS w buildzie, więc nic nie tracisz.
Early Hints w Cloudflare
Dashboard → Speed → Optimization → Protocol Optimization:
- Early Hints: On
Cloudflare wysyła 103 Early Hints z preload linkami, zanim serwer zwróci odpowiedź. Dzięki temu przeglądarka może wcześniej zacząć pobierać CSS i JS.
HTTP/3 (QUIC) w Cloudflare
Dashboard → Network:
- HTTP/3 (with QUIC): On
To zwykle przyspiesza zestawianie połączeń, szczególnie na urządzeniach mobilnych i mniej stabilnych sieciach.
Monitoring samodzielnie hostowanego Next.js za Cloudflare
Dashboard → Analytics & Logs nie zastąpi Sentry, logów aplikacji ani monitoringu VPS-a, ale daje szybki obraz tego, co dzieje się przed Twoim serwerem. W samodzielnym hostingu warto zaglądać tam po każdym wdrożeniu, większej zmianie cache i nietypowym skoku ruchu.
- Web Traffic pokazuje liczbę żądań, transfer, kody odpowiedzi HTTP i kraje, z których przychodzi ruch. Nagły wzrost błędów
5xxzwykle oznacza problem po stronie VPS-a albo nginx. Wzrost4xxmoże wskazywać na boty, błędne linki, źle ustawione przekierowania albo zbyt agresywne reguły bezpieczeństwa. - Security Events pokazuje, co Cloudflare zablokował, przepuścił po dodatkowym sprawdzeniu albo ograniczył regułą limitowania ruchu. To dobre miejsce, żeby sprawdzić, czy Bot Fight Mode albo WAF nie utrudnia życia prawdziwym użytkownikom, integracjom i webhookom.
- Cache pokazuje, jaka część odpowiedzi została obsłużona z cache Cloudflare. Dla stron mocno statycznych wysoki udział trafień w cache (często powyżej 80%) jest dobrym sygnałem. Naturalnie, w wypadku aplikacji z logowaniem, panelem klienta i personalizacją ten wynik będzie niższy. Ważniejsze jest wtedy to, czy
/_next/static/, obrazy i publiczne pliki są serwowane z cache, a HTML i API nie trafiają tam przypadkiem.
Po wdrożeniu sprawdź błędy 5xx, udział odpowiedzi z cache i zdarzenia bezpieczeństwa. Jeśli liczba błędów rośnie, musisz najpierw sprawdzić serwer źródłowy, czyli VPS, nginx i proces Next.js. Z kolei, jeśli cache nagle spada, zweryfikuj reguły Cloudflare oraz nagłówki Cache-Control. Jeśli pojawia się dużo blokad bezpieczeństwa, przejrzyj konkretne ścieżki i adresy IP, zanim zdecydujesz się na globalne zaostrzenie reguł.
