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
01.11.2024

Jak zabezpieczyć Nginx za pomocą Let’s Encrypt SSL na Ubuntu (Kompletny przewodnik 2025)

HTTPS nie jest już opcjonalne. W 2025 roku każda strona internetowa potrzebuje szyfrowania SSL/TLS — nie tylko aby chronić dane użytkowników, ale także aby konkurować w Google Search i spełniać nowoczesne wymagania bezpieczeństwa przeglądarek. Let’s Encrypt czyni to osiągalne za darmo, oferując zaufane, automatycznie odnawiające się certyfikaty SSL, które bezproblemowo działają z Nginx na Ubuntu.

Ten kompleksowy przewodnik przeprowadzi Cię przez każdy krok: instalacja Certbot, uzyskanie certyfikatu SSL Let’s Encrypt, weryfikacja konfiguracji i automatyzacja odnowień — wszystko na serwerze Ubuntu 18.04, 20.04 lub 22.04 z uruchomionym Nginx.

Niezależnie od tego, czy zarządzasz środowiskiem VPS Hosting, czy dedykowanym serwerem internetowym, ten samouczek zapewni Ci gotową do produkcji konfigurację HTTPS w mniej niż 15 minut.

Spis treści

  1. Dlaczego SSL ma znaczenie dla Nginx w 2025
  2. Wymagania wstępne
  3. Krok 1 — Instalacja Certbot i wtyczki Nginx
  4. Krok 2 — Konfiguracja bloku serwera Nginx
  5. Krok 3 — Uzyskanie certyfikatu SSL Let’s Encrypt
  6. Krok 4 — Weryfikacja instalacji SSL
  7. Krok 5 — Konfiguracja automatycznego odnowienia certyfikatu
  8. Rozwiązywanie typowych problemów
  9. Podsumowanie

Dlaczego SSL ma znaczenie dla Nginx w 2025 {#why-ssl-matters}

Przed przystąpieniem do poleceń warto zrozumieć, co dokładnie zyskujesz, zabezpieczając Nginx za pomocą Let’s Encrypt:

  • Szyfrowanie danych: HTTPS szyfruje cały ruch między Twoim serwerem a odwiedzającymi, zapobiegając atakom man-in-the-middle i podsłuchiwaniu.
  • Sygnały rankingowe SEO: Google potwierdziło HTTPS jako czynnik rankingowy. Strony bez SSL są aktywnie kariane w wynikach wyszukiwania.
  • Wskaźniki zaufania przeglądarki: Chrome, Firefox i Edge wyświetlają ostrzeżenia „Niezabezpieczone” dla stron HTTP, niszcząc zaufanie użytkowników i zwiększając wskaźnik odrzuceń.
  • Bezpłatne i zautomatyzowane: Let’s Encrypt wydaje certyfikaty bez kosztów, a Certbot automatycznie obsługuje odnowienia — eliminując ręczne obciążenie płatnych certyfikatów.
  • PCI DSS i zgodność: Każda strona obsługująca płatności lub dane osobowe jest prawnie zobowiązana do używania szyfrowanych połączeń.

Jeśli Twoja domena jest już zarejestrowana i wskazuje na Twój serwer, możesz zacząć. Jeśli nadal potrzebujesz domeny, AlexHost oferuje niedrogie Domain Registration z natychmiastowym zarządzaniem DNS.

Wymagania wstępne {#prerequisites}

Upewnij się, że spełnione są następujące warunki przed przystąpieniem:

WymaganieSzczegóły
System operacyjnyUbuntu 18.04, 20.04 lub 22.04 LTS
Serwer internetowyNginx zainstalowany i aktywnie obsługujący Twoją stronę
Nazwa domenyZarejestrowana domena z rekordem A wskazującym na publiczny IP Twojego serwera
Dostęp do serweraDostęp SSH z użytkownikiem posiadającym sudo uprawnienia
Zapora sieciowaPorty 80 (HTTP) i 443 (HTTPS) otwarte w UFW lub iptables
Dostęp rootNie jest ściśle wymagany, ale sudo dostęp jest obowiązkowy

Weryfikacja uruchomienia Nginx

Przed zainstalowaniem Certbot potwierdź, że Nginx jest aktywny:

sudo systemctl status nginx

Powinieneś zobaczyć active (running) w wyniku. Jeśli Nginx nie jest zainstalowany, uruchom:

sudo apt update && sudo apt install nginx -y
sudo systemctl enable nginx
sudo systemctl start nginx

Otwórz wymagane porty zapory sieciowej

Jeśli UFW jest włączony, zezwól na ruch HTTP i HTTPS:

sudo ufw allow 'Nginx Full'
sudo ufw reload
sudo ufw status

Wynik powinien pokazywać Nginx Full jako ALLOW dla IPv4 i IPv6.

Krok 1 — Instalacja Certbot i wtyczki Nginx {#installing-certbot}

Certbot to oficjalny klient Let’s Encrypt. Automatyzuje cały cykl życia certyfikatu: wydanie, instalację i odnowienie. Wtyczka python3-certbot-nginx pozwala Certbot czytać Twoją konfigurację Nginx i modyfikować ją automatycznie.

Zaktualizuj indeks pakietów

Zawsze aktualizuj listy pakietów przed zainstalowaniem nowego oprogramowania:

sudo apt update
sudo apt upgrade -y

Zainstaluj Certbot z wtyczką Nginx

sudo apt install certbot python3-certbot-nginx -y

Weryfikacja instalacji

certbot --version

Oczekiwany wynik (wersja może się różnić):

certbot 2.x.x

> Uwaga dla użytkowników Ubuntu 18.04: Jeśli domyślna wersja Certbot z APT jest nieaktualna, zainstaluj za pośrednictwem Snap, aby uzyskać najnowszą wersję:

> “`bash

> sudo snap install –classic certbot

> sudo ln -s /snap/bin/certbot /usr/bin/certbot

> “`

Krok 2 — Konfiguracja bloku serwera Nginx {#configuring-nginx}

Certbot musi wykryć Twoją domenę w konfiguracji Nginx, aby automatycznie ją modyfikować. Jeśli nie utworzyłeś jeszcze bloku serwera dla Twojej domeny, zrób to teraz.

Utwórz blok serwera

Zamień yourdomain.com na rzeczywistą nazwę domeny w całym tym przewodniku:

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

Dodaj następującą podstawową konfigurację:

server {
    listen 80;
    listen [::]:80;

    server_name yourdomain.com www.yourdomain.com;

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

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

Włącz blok serwera

sudo ln -s /etc/nginx/sites-available/yourdomain.com /etc/nginx/sites-enabled/

Przetestuj konfigurację Nginx

Zawsze sprawdzaj konfigurację Nginx przed przeładowaniem:

sudo nginx -t

Oczekiwany wynik:

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

Przeładuj Nginx

sudo systemctl reload nginx

Krok 3 — Uzyskanie certyfikatu SSL Let’s Encrypt {#obtaining-ssl}

Po skonfigurowaniu Nginx i zainstalowaniu Certbot możesz teraz zażądać certyfikatu SSL.

Uruchom Certbot z wtyczką Nginx

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

Wyjaśnienie flag:

    --nginx — Mówi Certbot, aby używał wtyczki Nginx do automatycznej konfiguracji
    -d yourdomain.com — Określa domenę podstawową
    -d www.yourdomain.com — Dodaje poddomenę www do tego samego certyfikatu (Subject Alternative Name)
    
    Wyjaśnienie interaktywnych monitów
    Certbot przeprowadzi Cię przez krótki kreator konfiguracji:
    1. Adres e-mail
    Enter email address (used for urgent renewal and security notices):
    Podaj ważny adres e-mail. Let’s Encrypt używa go do powiadomienia Cię o wygasających certyfikatach i problemach bezpieczeństwa.
    2. Warunki usługi
    Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf
    (A)gree/(C)ancel:
    Wpisz A i naciśnij Enter.
    3. Biuletyn EFF (opcjonalnie)
    Would you be willing to share your email address with the Electronic Frontier Foundation?
    (Y)es/(N)o:
    To jest opcjonalne. Wpisz N, jeśli wolisz się nie subskrybować.
    4. Przekierowanie HTTP na HTTPS
    Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
    1: No redirect
    2: Redirect - Make all requests redirect to secure HTTPS access
    Zawsze wybierz opcję 2. Zapewnia to, że wszyscy odwiedzający są automatycznie uaktualniani do HTTPS, eliminując problemy z mieszaną zawartością i poprawiając postawę bezpieczeństwa.
    Pomyślny wynik
    Jeśli wszystko jest prawidłowo skonfigurowane, zobaczysz:
    Successfully received certificate.
    Certificate is saved at: /etc/letsencrypt/live/yourdomain.com/fullchain.pem
    Key is saved at:         /etc/letsencrypt/live/yourdomain.com/privkey.pem
    This certificate expires on YYYY-MM-DD.
    These files will be updated when the certificate renews.
    
    Deploying certificate
    Successfully deployed certificate for yourdomain.com to /etc/nginx/sites-available/yourdomain.com
    Successfully deployed certificate for www.yourdomain.com to /etc/nginx/sites-available/yourdomain.com
    Congratulations! You have successfully enabled HTTPS on https://yourdomain.com and https://www.yourdomain.com
    Co Certbot zmienił w Nginx
    Po uruchomieniu Certbot automatycznie dołącza dyrektywy SSL do Twojego bloku serwera. Twoja konfiguracja będzie teraz wyglądać podobnie do tej:
    server {
        server_name yourdomain.com www.yourdomain.com;
    
        root /var/www/yourdomain.com/html;
        index index.html index.htm;
    
        location / {
            try_files $uri $uri/ =404;
        }
    
        listen 443 ssl;
        ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
        include /etc/letsencrypt/options-ssl-nginx.conf;
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
    }
    
    server {
        if ($host = www.yourdomain.com) {
            return 301 https://$host$request_uri;
        }
        if ($host = yourdomain.com) {
            return 301 https://$host$request_uri;
        }
    
        listen 80;
        server_name yourdomain.com www.yourdomain.com;
        return 404;
    }
    Krok 4 — Weryfikacja instalacji SSL {#verifying-ssl}
    Po zakończeniu Certbot sprawdź, czy certyfikat SSL jest prawidłowo zainstalowany i funkcjonuje.
    Metoda 1: Sprawdzenie przeglądarki
    Otwórz przeglądarkę internetową i przejdź do https://yourdomain.com. Szukaj:
    
    Ikony kłódki na pasku adresu — potwierdza aktywne, zaufane połączenie SSL
    Brak ostrzeżeń bezpieczeństwa — certyfikat jest ważny i zaufany przez Twoją przeglądarkę
    HTTPS w adresie URL — żądania HTTP powinny być automatycznie przekierowywane do HTTPS
    
    Kliknij ikonę kłódki i wybierz „Certyfikat”, aby wyświetlić wydawcę (powinien pokazywać „Let’s Encrypt”) i datę wygaśnięcia.
    Metoda 2: Głęboka analiza SSL Labs
    Aby przeprowadzić kompleksowy audyt bezpieczeństwa, użyj Qualys SSL Labs:
    
    Przejdź do https://www.ssllabs.com/ssltest/
  • Wpisz nazwę domeny
  • Kliknij „Submit”
  • Prawidłowo skonfigurowana konfiguracja Let’s Encrypt + Nginx powinna uzyskać ocenę A lub A+. Jeśli uzyskasz niższą ocenę, SSL Labs zidentyfikuje konkretne słabości do naprawy.

    Metoda 3: Weryfikacja z wiersza poleceń

    Sprawdź szczegóły certyfikatu bezpośrednio z terminala:

    sudo certbot certificates

    Wynik:

    Found the following certs:
      Certificate Name: yourdomain.com
        Serial Number: abc123...
        Key Type: RSA
        Domains: yourdomain.com www.yourdomain.com
        Expiry Date: YYYY-MM-DD HH:MM:SS+00:00 (VALID: 89 days)
        Certificate Path: /etc/letsencrypt/live/yourdomain.com/fullchain.pem
        Private Key Path: /etc/letsencrypt/live/yourdomain.com/privkey.pem

    Metoda 4: Polecenie OpenSSL

    Weryfikuj łańcuch certyfikatów i wygaśnięcie za pomocą OpenSSL:

    echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -dates -issuer

    Oczekiwany wynik:

    notBefore=Mon Jan  1 00:00:00 2025 GMT
    notAfter=Tue Apr  1 00:00:00 2025 GMT
    issuer=C=US, O=Let's Encrypt, CN=R11

    Krok 5 — Konfiguracja automatycznego odnowienia certyfikatu {#automatic-renewal}

    Certyfikaty Let’s Encrypt wygasają po 90 dniach. Ten krótki okres ważności jest celowy — ogranicza ekspozycję, jeśli klucz prywatny zostanie skompromitowany. Certbot obsługuje odnowienia automatycznie, ale powinieneś sprawdzić, czy automatyzacja działa prawidłowo.

    Jak działa odnowienie Certbot

    Po zainstalowaniu Certbot za pośrednictwem APT lub Snap automatycznie tworzy timer systemd (lub zadanie cron w starszych systemach), które uruchamia się dwa razy dziennie. Sprawdza, czy jakiekolwiek certyfikaty są w ciągu 30 dni od wygaśnięcia i automatycznie je odnawia.

    Weryfikacja timera Systemd

    sudo systemctl status certbot.timer

    Oczekiwany wynik:

    ● certbot.timer - Run certbot twice daily
         Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)
         Active: active (waiting) since ...
        Trigger: ...
       Triggers: ● certbot.service

    Jeśli timer jest aktywny i włączony, automatyczne odnowienie jest już skonfigurowane.

    Przetestuj proces odnowienia (próba suchą)

    Przed poleganiem na automatycznym odnowieniu, symuluj je, aby potwierdzić, że wszystko działa:

    sudo certbot renew --dry-run

    Pomyślny wynik:

    Simulating renewal of an existing certificate for yourdomain.com and www.yourdomain.com
    
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Congratulations, all simulated renewals succeeded:
      /etc/letsencrypt/live/yourdomain.com/fullchain.pem (success)
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Jeśli próba sucha powiedzie się, Twoje certyfikaty będą automatycznie odnawiane bez żadnej ręcznej interwencji.

    Weryfikacja zadania Cron (systemy starsze)

    W starszych wersjach Ubuntu, które nie używają timerów systemd, sprawdź zadanie cron Certbot:

    sudo cat /etc/cron.d/certbot

    Powinieneś zobaczyć linię podobną do:

    0 */12 * * * root test -x /usr/bin/certbot -a ! -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && certbot -q renew

    Uruchamia Certbot dwa razy dziennie w losowych interwałach, aby uniknąć przeciążenia serwerów Let’s Encrypt.

    Ręczne odnowienie (jeśli jest potrzebne)

    Jeśli kiedykolwiek będziesz musiał ręcznie wymusić odnowienie:

    sudo certbot renew --force-renewal
    sudo systemctl reload nginx

    > Najlepsza praktyka: Po każdym odnowieniu certyfikatu (ręcznym lub automatycznym) przeładuj Nginx, aby upewnić się, że pobiera nowe pliki certyfikatów:

    > “`bash

    > sudo systemctl reload nginx

    > “`

    > Haki odnowienia Certbot obsługują to automatycznie w większości konfiguracji.

    Konfiguruj haki odnowienia

    Aby upewnić się, że Nginx przeładowuje się automatycznie po każdym odnowieniu, dodaj hak wdrażania:

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

    Dodaj następującą zawartość:

    #!/bin/bash
    systemctl reload nginx

    Uczyń to wykonalnym:

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

    Rozwiązywanie typowych problemów {#troubleshooting}

    Błąd: „Could not bind to IPv4/IPv6″

    Certbot używa portu 80 do walidacji domeny. Jeśli inny proces używa portu 80, wyzwanie nie powiedzie się.

    Rozwiązanie: Tymczasowo zatrzymaj Nginx, uzyskaj certyfikat w trybie autonomicznym, a następnie uruchom ponownie:

    sudo systemctl stop nginx
    sudo certbot certonly --standalone -d yourdomain.com -d www.yourdomain.com
    sudo systemctl start nginx

    Błąd: „DNS problem: NXDOMAIN looking up A for yourdomain.com”

    Rekordy DNS Twojej domeny nie są jeszcze propagowane do serwerów walidacji Let’s Encrypt.

    Rozwiązanie: Sprawdź, czy Twój rekord A jest prawidłowo ustawiony:

    dig yourdomain.com A +short

    Wynik powinien zwrócić publiczny adres IP Twojego serwera. Propagacja DNS może trwać do 48 godzin, chociaż zwykle rozwiązuje się w ciągu 1–2 godzin.

    Błąd: „Too many certificates already issued”

    Let’s Encrypt wymusza limit szybkości 5 zduplikowanych certyfikatów na tydzień na domenę.

    Rozwiązanie: Użyj flagi --staging do testowania konfiguracji bez osiągania limitów szybkości:

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

    Po zakończeniu testowania odwołaj certyfikat przejściowy i wydaj produkcyjny.

    Błąd: „Nginx configuration test failed”

    Certbot modyfikuje Twoją konfigurację Nginx. Jeśli wynikowa konfiguracja ma błędy składni, Nginx nie będzie się przeładowywać.

    Rozwiązanie: Ręcznie przetestuj i napraw konfigurację:

    sudo nginx -t
    sudo nano /etc/nginx/sites-available/yourdomain.com
    # Fix any syntax errors, then:
    sudo systemctl reload nginx

    Certyfikat nie odnawia się automatycznie

    Jeśli otrzymujesz e-maile z ostrzeżeniami o wygaśnięciu pomimo zainstalowanego Certbot, sprawdź status timera:

    sudo systemctl status certbot.timer
    sudo journalctl -u certbot.service --since "7 days ago"

    Przejrzyj dzienniki w poszukiwaniu błędów i odpowiednio je rozwiąż.

    Zaawansowane: Wzmacnianie konfiguracji SSL Nginx

    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