15%

Zaoszczędź 15% na wszystkich usługach hostingowych

Sprawdź swoje umiejętności i zdobądź Rabat na dowolny plan hostingowy

Użyj kodu:

Skills
Rozpocznij
30.10.2024

Jak skonfigurować certyfikat SSL w Nginx: Kompletny przewodnik krok po kroku

Zabezpieczenie witryny certyfikatem SSL/TLS nie jest już opcjonalne — to podstawowy wymóg dla zaufania użytkowników, ochrony danych i pozycji w wyszukiwarkach. Google jawnie używa HTTPS jako sygnału rankingowego od 2014 roku, a nowoczesne przeglądarki aktywnie ostrzegają odwiedzających, gdy witryna nie ma szyfrowania. Jeśli używasz Nginx jako serwera WWW, ten przewodnik przeprowadzi Cię przez wszystko, co musisz wiedzieć, aby zainstalować, skonfigurować i zautomatyzować zarządzanie certyfikatami SSL za pomocą Certbot i Let’s Encrypt.

Niezależnie od tego, czy zarządzasz środowiskiem VPS Hosting, serwerem dedykowanym czy planem hostingu współdzielonego, prawidłowo skonfigurowany SSL jest niezbędny dla każdej produkcyjnej witryny.

Czym jest certyfikat SSL i dlaczego Nginx go potrzebuje?

Certyfikat SSL (Secure Sockets Layer) — dziś dokładniej określany jako certyfikat TLS (Transport Layer Security) — ustanawia szyfrowane połączenie między serwerem WWW a przeglądarką odwiedzającego. To szyfrowanie zapewnia, że wrażliwe dane, takie jak dane logowania, informacje o płatnościach i dane osobowe, nie mogą zostać przechwycone przez złośliwe osoby trzecie.

W przypadku Nginx konfiguracja SSL obejmuje:

  • Pliki certyfikatu: Publiczny łańcuch certyfikatów wydany przez Urząd Certyfikacji (CA)
  • Klucz prywatny: Kryptograficznie wygenerowany klucz przechowywany bezpiecznie na serwerze
  • Dyrektywy bloku serwera: Instrukcje konfiguracyjne Nginx wiążące certyfikat z domeną

Bez SSL Twoja witryna jest serwowana przez HTTP, co oznacza, że cały ruch jest przesyłany jako zwykły tekst. Przy prawidłowo skonfigurowanym SSL Twoja witryna używa HTTPS — szyfrowanego, uwierzytelnionego i zaufanego przez przeglądarki i wyszukiwarki.

> Wskazówka: Jeśli oceniasz opcje hostingu, AlexHost oferuje certyfikaty SSL dla domen wszystkich typów, w tym certyfikaty Domain Validation (DV), Organization Validation (OV) i Extended Validation (EV).

Wymagania wstępne przed rozpoczęciem

Przed przystąpieniem do kroków konfiguracji upewnij się, że spełnione są następujące warunki:

  • Działający serwer WWW Nginx na systemie opartym na Linux (zalecany Ubuntu 20.04/22.04 lub Debian)
  • Dostęp root lub sudo do serwera
  • Zarejestrowana nazwa domeny wskazująca na adres IP serwera za pomocą rekordów DNS A — możesz ją zarejestrować przez Rejestrację domen
  • Otwarte porty zapory: Porty TCP 80 (HTTP) i 443 (HTTPS) muszą być dostępne
  • Użytkownik inny niż root z uprawnieniami sudo (najlepsza praktyka dla bezpieczeństwa serwera)

Możesz sprawdzić, czy Nginx działa, używając:

sudo systemctl status nginx

I potwierdzić, że domena rozwiązuje się poprawnie, używając:

dig yourdomain.com +short

Krok 1: Zainstaluj Certbot na serwerze

Certbot to oficjalny, open-source’owy klient dla Let’s Encrypt — bezpłatnego, zautomatyzowanego i powszechnie zaufanego Urzędu Certyfikacji. Obsługuje cały proces wydawania certyfikatów, w tym weryfikację domeny i aktualizacje konfiguracji Nginx.

Zaktualizuj indeks pakietów

Zawsze zacznij od odświeżenia list pakietów, aby upewnić się, że instalujesz najnowsze dostępne wersje:

sudo apt update && sudo apt upgrade -y

Zainstaluj Certbot i wtyczkę Nginx

Wtyczka python3-certbot-nginx umożliwia Certbot bezpośrednie odczytywanie i modyfikowanie plików konfiguracyjnych Nginx, automatyzując większość procesu konfiguracji:

sudo apt install certbot python3-certbot-nginx -y

Zweryfikuj instalację

Potwierdź pomyślną instalację Certbot, sprawdzając jego wersję:

certbot --version

Powinieneś zobaczyć dane wyjściowe podobne do certbot 2.x.x.

Krok 2: Zezwól na ruch HTTPS przez zaporę

Jeśli używasz UFW (Uncomplicated Firewall), musisz jawnie zezwolić na ruch HTTPS przed kontynuowaniem:

sudo ufw allow 'Nginx Full'
sudo ufw delete allow 'Nginx HTTP'
sudo ufw status

Profil Nginx Full zezwala zarówno na HTTP (port 80), jak i HTTPS (port 443). Usunięcie samodzielnej reguły HTTP zapewnia, że po skonfigurowaniu SSL nie pozostawiasz niepotrzebnych otwartych portów bez celu.

Krok 3: Uzyskaj certyfikat SSL od Let’s Encrypt

Po zainstalowaniu Certbot i skonfigurowaniu zapory możesz teraz zażądać certyfikatu. Flaga --nginx mówi Certbot, aby użył wtyczki Nginx, która automatycznie obsługuje weryfikację wyzwania ACME i aktualizuje konfigurację serwera.

sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com

Co dzieje się podczas tego procesu?

  1. Weryfikacja własności domeny: Certbot tymczasowo modyfikuje konfigurację Nginx, aby serwować plik wyzwania, udowadniając Let’s Encrypt, że kontrolujesz domenę
  2. Wydanie certyfikatu: Let’s Encrypt wydaje podpisany certyfikat ważny przez 90 dni
  3. Automatyczna konfiguracja Nginx: Certbot aktualizuje blok serwera Nginx, aby używał nowych plików certyfikatu

Interaktywne monity

Podczas procesu Certbot zapyta o:

  • Adres e-mail do pilnych powiadomień o odnowieniu i bezpieczeństwie
  • Akceptację Warunków korzystania z usługi
  • Czy przekierować HTTP na HTTPS — zawsze wybieraj opcję 2 (Przekierowanie), aby wymusić HTTPS w całej witrynie

Twoje certyfikaty będą przechowywane w:

/etc/letsencrypt/live/yourdomain.com/

Kluczowe pliki to:

PlikPrzeznaczenie
fullchain.pemTwój certyfikat + łańcuch pośredni
privkey.pemTwój klucz prywatny (zachowaj go w tajemnicy)
cert.pemTylko certyfikat Twojej domeny
chain.pemTylko certyfikaty pośrednie

Krok 4: Ręczna konfiguracja Nginx dla SSL (zaawansowane)

Chociaż Certbot automatyzuje większość konfiguracji, zrozumienie ręcznej konfiguracji daje pełną kontrolę nad implementacją SSL — niezbędną do dostrajania wydajności, wzmacniania bezpieczeństwa i niestandardowych wdrożeń.

Otwórz plik konfiguracyjny bloku serwera Nginx

sudo nano /etc/nginx/sites-available/yourdomain.com

Jeśli używasz domyślnego pliku konfiguracyjnego:

sudo nano /etc/nginx/sites-available/default

Kompletna konfiguracja bloku serwera SSL

Zastąp lub zaktualizuj konfigurację następującym wzmocnionym przykładem:

# Redirect all HTTP traffic to HTTPS
server {
    listen 80;
    listen [::]:80;
    server_name yourdomain.com www.yourdomain.com;
    return 301 https://$host$request_uri;
}

# HTTPS server block
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name yourdomain.com www.yourdomain.com;

    # SSL Certificate Paths
    ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;

    # Recommended SSL parameters
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;
    ssl_session_tickets off;

    # OCSP Stapling
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /etc/letsencrypt/live/yourdomain.com/chain.pem;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;

    # Security Headers
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header Referrer-Policy "no-referrer-when-downgrade";

    # Document root and index
    root /var/www/yourdomain.com/html;
    index index.html index.htm index.nginx-debian.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

Wyjaśnienie kluczowych dyrektyw konfiguracyjnych

  • ssl_protocols TLSv1.2 TLSv1.3: Wyłącza starsze, podatne protokoły (SSLv3, TLS 1.0, TLS 1.1)
  • ssl_ciphers: Określa silny zestaw szyfrów priorytetyzujący utajnienie przekazywania
  • ssl_stapling on: Włącza zszywanie OCSP, zmniejszając opóźnienie uzgadniania SSL
  • Strict-Transport-Security: Instruuje przeglądarki, aby zawsze używały HTTPS dla Twojej domeny (HSTS)
  • http2: Włącza HTTP/2 dla lepszej wydajności połączeń HTTPS

Krok 5: Przetestuj konfigurację Nginx

Przed ponownym uruchomieniem Nginx zawsze sprawdzaj składnię konfiguracji, aby wychwycić błędy, które mogłyby wyłączyć witrynę:

sudo nginx -t

Pomyślny test zwraca:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Jeśli napotkasz błędy, dokładnie przejrzyj dane wyjściowe — Nginx wskaże plik i numer wiersza, w którym problem istnieje.

Krok 6: Uruchom ponownie Nginx, aby zastosować zmiany

Po pomyślnym przejściu testu konfiguracji przeładuj lub uruchom ponownie Nginx:

# Graceful reload (preferred for production — no downtime)
sudo systemctl reload nginx

# Full restart (use if reload doesn't apply all changes)
sudo systemctl restart nginx

Sprawdź, czy Nginx działa poprawnie po ponownym uruchomieniu:

sudo systemctl status nginx

Krok 7: Skonfiguruj automatyczne odnawianie certyfikatu SSL

Certyfikaty Let’s Encrypt wygasają po 90 dniach. Ten krótki okres ważności jest celowy — ogranicza szkody wynikające z naruszonych certyfikatów i zachęca do automatyzacji. Certbot automatycznie instaluje timer systemd (lub zadanie cron) do obsługi odnowień, ale powinieneś to zweryfikować i przetestować.

Sprawdź istniejący timer odnowienia

sudo systemctl status certbot.timer

Powinieneś zobaczyć, że timer jest aktywny i zaplanowany do uruchomienia dwa razy dziennie.

Przetestuj proces odnowienia

Symuluj odnowienie bez faktycznej modyfikacji certyfikatów:

sudo certbot renew --dry-run

Pomyślne dane wyjściowe będą zawierać:

Congratulations, all simulated renewals succeeded:
  /etc/letsencrypt/live/yourdomain.com/fullchain.pem (success)

Dodaj hook po odnowieniu, aby przeładować Nginx

Certbot nie przeładuje automatycznie Nginx po odnowieniu certyfikatów, chyba że skonfigurujesz hook wdrożenia. Utwórz go za pomocą:

sudo nano /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh

Dodaj następującą zawartość:

#!/bin/bash
systemctl reload nginx

Uczyń go wykonywalnym:

sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh

Zapewnia to, że Nginx ładuje nowe pliki certyfikatu natychmiast po każdym pomyślnym odnowieniu.

Krok 8: Zweryfikuj instalację SSL

Po zakończeniu konfiguracji zweryfikuj konfigurację SSL za pomocą tych metod:

Sprawdzenie w przeglądarce

Przejdź do https://yourdomain.com w przeglądarce. Powinieneś zobaczyć ikonę kłódki na pasku adresu wskazującą bezpieczne połączenie.

Internetowe narzędzia do testowania SSL

Użyj tych bezpłatnych narzędzi do audytu jakości konfiguracji SSL:

  • SSL Labs (Qualys): https://www.ssllabs.com/ssltest/ — Zapewnia ocenę literową (dąż do A lub A+)
  • Security Headers: https://securityheaders.com/ — Audytuje nagłówki bezpieczeństwa HTTP
  • HSTS Preload: https://hstspreload.org/ — Sprawdza kwalifikowalność do wstępnego ładowania HSTS

Weryfikacja z wiersza poleceń

# Check certificate details
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com

# Check certificate expiry date
echo | openssl s_client -connect yourdomain.com:443 2>/dev/null | openssl x509 -noout -dates

Rozwiązywanie typowych problemów SSL w Nginx

ProblemPrawdopodobna przyczynaRozwiązanie
ERR_SSL_PROTOCOL_ERRORNginx nie nasłuchuje na porcie 443Sprawdź dyrektywę listen 443 ssl; i reguły zapory
NET::ERR_CERT_AUTHORITY_INVALIDUżywanie cert.pem zamiast fullchain.pemZaktualizuj ssl_certificate, aby używać fullchain.pem
Certyfikat nie odnawia sięTimer Certbot wyłączony lub port 80 zablokowanyUruchom sudo certbot renew --dry-run i sprawdź logi
Ostrzeżenia o mieszanej zawartościZasoby HTTP ładowane na stronie HTTPSZaktualizuj wszystkie wewnętrzne linki i adresy URL zasobów do HTTPS
SSL_ERROR_RX_RECORD_TOO_LONGRuch HTTP trafiający na port HTTPSUpewnij się, że przekierowanie z portu 80 na 443 jest skonfigurowane

Wybór odpowiedniego środowiska hostingowego dla SSL

Wydajność i niezawodność implementacji SSL w dużej mierze zależy od środowiska hostingowego. Oto krótki przegląd:

  • VPS Hosting: Pełny dostęp root daje pełną kontrolę nad konfiguracją Nginx, parametrami SSL i zarządzaniem certyfikatami — idealny do tego przewodnika
  • Serwery dedykowane: Maksymalna wydajność i izolacja dla witryn o dużym ruchu wymagających konfiguracji SSL klasy enterprise
  • Hosting współdzielony: SSL jest zazwyczaj zarządzany przez panel sterowania; ręczna konfiguracja Certbot może być niedostępna
  • VPS z cPanel: Upraszcza zarządzanie SSL przez graficzny interfejs, zachowując kontrolę na poziomie VPS

Dla deweloperów i administratorów systemów potrzebujących pełnej kontroli nad stosem SSL, VPS lub serwer dedykowany jest zalecanym wyborem.

Podsumowanie

Konfiguracja SSL w Nginx to wieloetapowy proces, ale każdy krok służy krytycznemu celowi — od szyfrowania ruchu i weryfikacji własności domeny po wzmacnianie konfiguracji szyfrów i automatyzację odnowień. Postępując zgodnie z tym przewodnikiem, wdrożyłeś:

✅ Bezpłatny, zaufany certyfikat SSL przez Let’s Encrypt i Certbot

✅ Wzmocnioną konfigurację SSL Nginx z nowoczesnymi protokołami TLS

✅ Przekierowanie HTTP na HTTPS dla całego ruchu

✅ Zszywanie OCSP dla lepszej wydajności uzgadniania

✅ HSTS i nagłówki bezpieczeństwa dla obrony w głąb

✅ Automatyczne odnawianie certyfikatów z hookami przeładowania Nginx

Prawidłowo skonfigurowany certyfikat SSL nie tylko chroni użytkowników — buduje zaufanie, poprawia pozycje SEO i jest podstawowym wymogiem dla każdej profesjonalnej obecności w sieci. Jeśli szukasz niezawodnej infrastruktury do hostowania serwera Nginx zabezpieczonego SSL, zapoznaj się z planami VPS Hosting AlexHost, zaprojektowanymi specjalnie dla deweloperów i firm, które poważnie traktują bezpieczeństwo.

15%

Zaoszczędź 15% na wszystkich usługach hostingowych

Sprawdź swoje umiejętności i zdobądź Rabat na dowolny plan hostingowy

Użyj kodu:

Skills
Rozpocznij