Napraw bledy SSL subdomeny www na Fly.io z Cloudflare (Blad 525)

Fred· AI Engineer & Developer Educator7 min read

Wdrozyles aplikacje na Fly.io i domena glowna dziala dobrze, ale www.twojastrona.com wyrzuca blad SSL handshake? Nie jestes sam. Ten blad 525 wystepuje bo Fly.io wymaga oddzielnych certyfikatow SSL dla kazdej nazwy hosta - i wiekszosc przewodnikow wdrazania calkowicie pomija ten krok.

Oto naprawa, przetestowana i zweryfikowana na produkcyjnym wdrozeniu.

Problem

Wdrozyles na Fly.io, dodales wlasna domene i wszystko wyglada dobrze. Potem probusjesz wejsc na www.twojastrona.com i dostajesz:

Error 525: SSL handshake failed

Tymczasem twojastrona.com (bez www) dziala dobrze. O co chodzi?

Dlaczego to sie dzieje

Fly.io uzywa Let's Encrypt do przydzielania certyfikatow SSL, ale jest haczyk: dodanie certyfikatu dla example.com NIE pokrywa automatycznie www.example.com.

Sa traktowane jako calkowicie oddzielne nazwy hostow. Musisz jawnie dodac certyfikat dla subdomeny www.

Rozwiazanie (5 krokow)

Krok 1: Zainstaluj Fly.io CLI

Jesli jeszcze tego nie zrobiles, zainstaluj flyctl:

# Zainstaluj flyctl
curl -L https://fly.io/install.sh | sh

# Dodaj do PATH
export FLYCTL_INSTALL="$HOME/.fly"
export PATH="$FLYCTL_INSTALL/bin:$PATH"

# Zrob to trwaym (dodaj do ~/.bashrc lub ~/.zshrc)
echo 'export FLYCTL_INSTALL="$HOME/.fly"' >> ~/.bashrc
echo 'export PATH="$FLYCTL_INSTALL/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

# Zweryfikuj ze dziala
flyctl version

Krok 2: Sprawdz swoje aktualne certyfikaty

Najpierw zobacz jakie certyfikaty juz masz:

flyctl certs list -a NAZWA_TWOJEJ_APP

Prawdopodobnie zobaczysz cos takiego:

Host Name                 Added                Status
example.com              1 month ago          Ready
api.example.com          1 month ago          Ready

Zauwazyłes co brakuje? Subdomena www.

Krok 3: Dodaj certyfikat www (To naprawia problem)

Oto krytyczne polecenie ktore rozwiazuje problem:

flyctl certs add www.example.com -a NAZWA_TWOJEJ_APP

Fly.io automatycznie przydzieli certyfikat SSL Let's Encrypt dla twojej subdomeny www. Zobaczysz wyjscie takie jak:

You are creating a certificate for www.example.com
We are using Let's Encrypt for this certificate.

Your certificate for www.example.com is being issued.
You can validate your ownership of www.example.com by:

1: Adding an AAAA record to your DNS service which reads:
    AAAA @ 2a09:8280:1::X:XXXX

Nie martw sie o walidacje DNS - jesli twoja domena glowna juz dziala, subdomena www zwaliduje sie automatycznie.

Krok 4: Zweryfikuj ze certyfikat jest gotowy

Poczekaj 1-2 minuty, potem sprawdz status certyfikatu:

flyctl certs show www.example.com -a NAZWA_TWOJEJ_APP

Szukaj "Status: Ready". Jesli mowi "Awaiting certificates", poczekaj jeszcze minute i sprawdz ponownie.

Gdy gotowe, twoja lista certyfikatow powinna pokazywac:

flyctl certs list -a NAZWA_TWOJEJ_APP
Host Name                 Added                Status
example.com              1 month ago          Ready
www.example.com          13 seconds ago       Ready

Idealnie.

Krok 5: Skonfiguruj tryb SSL/TLS Cloudflare

Ten krok jest krytyczny jesli uzywasz Cloudflare do DNS (a powinienes).

  1. Zaloguj sie do dashboardu Cloudflare
  2. Wybierz swoja domene
  3. Wejdz w SSL/TLSOverview
  4. Ustaw tryb szyfrowania na "Full" (nie "Flexible" ani "Full (strict)")

Dlaczego "Full"?

  • Flexible: Cloudflare uzywa HTTPS do odwiedzajacych, ale HTTP do Fly.io (niebezpieczne, powoduje problemy)
  • Full: Cloudflare uzywa HTTPS zarowno do odwiedzajacych jak i Fly.io (prawidlowo)
  • Full (strict): Wymaga zaufanego urzedu certyfikacji, ale Fly.io zarzadza wlasnymi certyfikatami (powoduje bledy)

Skonfiguruj rekordy DNS (Cloudflare)

Upewnij sie ze rekordy DNS sa prawidlowo skonfigurowane:

Domena glowna (example.com):

  • Typ: A lub AAAA
  • Nazwa: @ (lub zostaw puste)
  • Zawartosc: Adres IP twojego Fly.io (z flyctl ips list)
  • Status proxy: Proxied (pomaranczowa chmurka wlaczona)

Subdomena www (www.example.com):

  • Typ: CNAME
  • Nazwa: www
  • Cel: example.com (wskazuje na domene glowna)
  • Status proxy: Proxied (pomaranczowa chmurka wlaczona)

Pomaranczowa chmurka (Proxied) jest wazna - kieruje ruch przez CDN Cloudflare i wlacza SSL.

Przetestuj wszystko

Zweryfikuj ze obie domeny dzialaja:

# Testuj domene glowna
curl -I https://example.com

# Testuj subdomene www
curl -I https://www.example.com

Obie powinny zwrocic HTTP/2 200 (lub HTTP/1.1 200). Jesli dostajesz bledy, zobacz sekcje rozwiazywania problemow ponizej.

Typowe bledy i naprawy

Blad 525: SSL Handshake Failed

Objawy: subdomena www wyrzuca blad 525, domena glowna dziala dobrze

Przyczyny:

  1. Brakujacy certyfikat www na Fly.io
  2. Tryb SSL/TLS Cloudflare ustawiony na "Flexible" lub "Full (strict)"

Naprawa:

# Dodaj certyfikat www
flyctl certs add www.example.com -a NAZWA_TWOJEJ_APP

# Poczekaj 2 minuty na wydanie certyfikatu
sleep 120

# Zweryfikuj ze jest gotowy
flyctl certs show www.example.com -a NAZWA_TWOJEJ_APP

Rowniez zweryfikuj ze tryb SSL/TLS Cloudflare jest ustawiony na "Full".

Subdomena www zwraca Connection Timeout

Objawy: subdomena www w ogole sie nie laduje, brak strony bledu

Przyczyny:

  1. Brakujacy lub nieprawidlowy rekord DNS CNAME
  2. DNS nie jest proxy przez Cloudflare
  3. Propagacja DNS niekompletna

Naprawa:

  1. Sprawdz ustawienia DNS Cloudflare dla rekordu CNAME www
  2. Upewnij sie ze pomaranczowa chmurka (Proxied) jest wlaczona
  3. Poczekaj 5-15 minut na propagacje DNS
  4. Wyczysc cache przegladarki lub testuj w trybie incognito

Certyfikat pokazuje "Awaiting Certificates" przez wiecej niz 5 minut

Objawy: flyctl certs show ciagle mowi "Awaiting certificates"

Przyczyny:

  1. Rekordy DNS nie wskazuja prawidlowo na Fly.io
  2. Proxy Cloudflare ingeruje w walidacje certyfikatu

Naprawa:

# Zweryfikuj ze rekordy DNS sa prawidlowe
dig www.example.com

# Sprawdz czy DNS rozwiazuje sie do Fly.io
nslookup www.example.com

# Jesli zablokowany, usun i ponownie dodaj certyfikat
flyctl certs delete www.example.com -a NAZWA_TWOJEJ_APP
flyctl certs add www.example.com -a NAZWA_TWOJEJ_APP

Dlaczego oddzielne certyfikaty maja znaczenie

W tradycyjnym hostingu wspoldzielonym, certyfikat SSL typu wildcard (*.example.com) pokrywa wszystkie subdomeny. Ale Fly.io przydziela certyfikaty indywidualnie przez Let's Encrypt.

To daje ci wieksza kontrole ale wymaga jawnej konfiguracji dla kazdej subdomeny:

  • example.com → potrzebuje wlasnego certyfikatu
  • www.example.com → potrzebuje wlasnego certyfikatu
  • api.example.com → potrzebuje wlasnego certyfikatu
  • blog.example.com → potrzebuje wlasnego certyfikatu

Rozumiesz idee.

Najlepsze praktyki dla Fly.io + Cloudflare

  1. Dodaj certyfikaty dla wszystkich subdomen ktore planujesz uzywac zanim pojdziesz na zywo
  2. Uzyj trybu "Full" SSL/TLS Cloudflare dla wdrozen Fly.io
  3. Wlacz proxy Cloudflare (pomaranczowa chmurka) dla CDN i ochrony DDoS
  4. Testuj zarowno www jak i bez www wersje zanim oglszisz strone
  5. Skonfiguruj przekierowania w aplikacji jesli chcesz wymusic jedna wersje nad druga

Uzyteczne polecenia do rozwiazywania problemow

# Lista wszystkich certyfikatow dla aplikacji
flyctl certs list -a NAZWA_TWOJEJ_APP

# Pokaz szczegolowe info dla konkretnego certyfikatu
flyctl certs show www.example.com -a NAZWA_TWOJEJ_APP

# Usun certyfikat (jesli musisz zaczac od nowa)
flyctl certs delete www.example.com -a NAZWA_TWOJEJ_APP

# Sprawdz adresy IP aplikacji
flyctl ips list -a NAZWA_TWOJEJ_APP

# Sprawdz rozwiazywanie DNS
dig example.com
dig www.example.com

# Testuj polaczenie SSL z szczegolowym wyjsciem
curl -vI https://www.example.com

# Sprawdz status aplikacji
flyctl status -a NAZWA_TWOJEJ_APP

# Pokaz logi aplikacji (uzyteczne do debugowania)
flyctl logs -a NAZWA_TWOJEJ_APP

Kompletna lista kontrolna konfiguracji

Uzyj tej listy kontrolnej zeby zweryfikowac ze wszystko jest prawidlowo skonfigurowane:

Certyfikaty Fly.io:

  • Certyfikat domeny glownej istnieje i pokazuje "Ready"
  • Certyfikat subdomeny www istnieje i pokazuje "Ready"
  • Wszystkie inne subdomeny maja dodane certyfikaty

Cloudflare DNS:

  • Rekord A lub AAAA dla domeny glownej wskazujacy na IP Fly.io
  • Rekord CNAME dla subdomeny www wskazujacy na domene glowna
  • Wszystkie rekordy maja wlaczona pomaranczowa chmurke (Proxied)

Cloudflare SSL/TLS:

  • Tryb szyfrowania ustawiony na "Full" (nie Flexible ani Full strict)
  • Edge Certificates pokazuje wazny SSL

Testowanie:

  • https://example.com zwraca 200 OK
  • https://www.example.com zwraca 200 OK
  • Brak ostrzezen SSL w przegladarce
  • Obie domeny pokazuja ikone bezpiecznego zamka

Dlaczego wiekszosc przewodnikow to pomija

Wiekszosc samouczkow wdrazania Fly.io skupia sie na uruchomieniu aplikacji i dodaniu pojedynczej wlasnej domeny. Zakladaja ze bedziesz uzywac tylko example.com lub www.example.com - nie obu.

Ale w rzeczywistosci uzytkownicy wpisuja obie wersje. Wyszukiwarki indeksuja obie. I nie chcesz zeby polowa twojego ruchu trafiala na bledy SSL.

Dodanie certyfikatu www zajmuje 30 sekund ale oszczedza godziny debugowania pozniej.

Podsumowanie

Problem SSL subdomeny www na Fly.io to jeden z tych "gotchas" ktory lapie nawet doswiadczonych programistow. Naprawa jest prosta gdy ja znasz:

  1. Dodaj oddzielny certyfikat dla www: flyctl certs add www.example.com -a NAZWA_TWOJEJ_APP
  2. Ustaw Cloudflare SSL/TLS na tryb "Full"
  3. Poczekaj 1-2 minuty az certyfikat bedzie gotowy
  4. Przetestuj obie domeny

To wszystko. Bez skomplikowanej konfiguracji, bez restartow serwera, bez edytowania plikow konfiguracyjnych. Tylko jedno polecenie ktore wiekszosc przewodnikow wdrazania zapomina wspomniec.

Teraz twoi uzytkownicy moga wchodzic na strone z lub bez www i obie beda dzialac prawidlowo.


Powiazane przewodniki:

Zasoby:

Fred

Fred

AUTHOR

Full-stack developer with 10+ years building production applications. I've been deploying to Cloudflare's edge network since Workers launched in 2017.

Need a developer who gets it?

POC builds, vibe-coded fixes, and real engineering. Let's talk.

Hire Me →