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
Sekcja
Bezpieczeństwo Linux

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łnić nowoczesne wymagania bezpieczeństwa przeglądarek. Let’s Encrypt sprawia, że jest to osiągalne za darmo, oferując zaufane, automatycznie odnawiane certyfikaty SSL, które bezproblemowo współpracują 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 Nginx.

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

Dlaczego SSL jest ważny dla Nginx w 2025

Zanim przejdziemy do poleceń, warto zrozumieć, co 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ł HTTPS jako czynnik rankingowy. Witryny bez SSL są aktywnie kariane w wynikach wyszukiwania.
  • Wskaźniki zaufania przeglądarki: Chrome, Firefox i Edge wyświetlają ostrzeżenia „Niezabezpieczone” dla witryn HTTP, niszcząc zaufanie użytkowników i zwiększając wskaźnik odrzuceń.
  • Bezpłatne i zautomatyzowane: Let's Encrypt wydaje certyfikaty bez żadnych kosztów, a Certbot obsługuje odnawianie automatycznie — eliminując ręczne obciążenie płatnych certyfikatów.
  • PCI DSS i zgodność: Każda witryna 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 Rejestracja Domeny z natychmiastowym zarządzaniem DNS.

Wymagania wstępne

Upewnij się, że poniższe warunki są spełnione przed przystąpieniem:

WymaganieSzczegóły
System operacyjnyUbuntu 18.04, 20.04 lub 22.04 LTS
Serwer WWWNginx zainstalowany i aktywnie obsługujący Twoją witrynę
Nazwa domenyZarejestrowana domena z rekordem A wskazującym na publiczny IP 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

Sprawdź, czy Nginx jest uruchomiony

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

sudo systemctl status nginx

W danych wyjściowych powinieneś zobaczyć active (running). 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łączone, zezwól na ruch HTTP i HTTPS:

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

Dane wyjściowe powinny pokazywać Nginx Full jako ALLOW dla IPv4 i IPv6.

Krok 1 — Instalacja Certbot i wtyczki Nginx

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

Aktualizuj indeks pakietów

Zawsze aktualizuj listy pakietów przed instalacją nowego oprogramowania:

sudo apt update
sudo apt upgrade -y

Zainstaluj Certbot z wtyczką Nginx

sudo apt install certbot python3-certbot-nginx -y

Weryfikuj instalację

certbot --version

Oczekiwane wyjście (wersja może się różnić):

certbot 2.x.x

> Uwaga dla użytkowników Ubuntu 18.04: Jeśli domyślna wersja APT Certbot jest przestarzała, 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 — Konfigurowanie bloku serwera Nginx

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

Utwórz blok serwera

Zamień yourdomain.com na rzeczywistą nazwę domeny w całym 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/

Testuj konfigurację Nginx

Zawsze sprawdzaj konfigurację Nginx przed przeładowaniem:

sudo nginx -t

Oczekiwane wyjście:

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

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

Uruchomienie Certbot z wtyczką Nginx

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

Wyjaśnienie flag:

    --nginx — Nakazuje Certbot użyć wtyczki Nginx do automatycznej konfiguracji
    -d yourdomain.com — Określa domenę główną
    -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 poziom bezpieczeństwa.
    Pomyślne wyjście
    Jeśli wszystko jest skonfigurowane prawidłowo, 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 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
    Po zakończeniu pracy Certbota sprawdź, czy certyfikat SSL jest prawidłowo zainstalowany i funkcjonuje.
    Metoda 1: Sprawdzenie w przeglądarce
    Otwórz przeglądarkę internetową i przejdź do https://yourdomain.com. Poszukaj:
    
    Ikony kłódki na pasku adresu — potwierdza aktywne, zaufane połączenie SSL
    Brak ostrzeżeń bezpieczeństwa — certyfikat jest ważny i zaufany przez 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ę (powinno być widoczne „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 naprawienia.

    Metoda 3: Weryfikacja z linii poleceń

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

    sudo certbot certificates

    Dane wyjściowe:

    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

    Sprawdź łańcuch certyfikatów i datę wygaśnięcia za pomocą OpenSSL:

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

    Oczekiwane dane wyjściowe:

    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 odnawiania certyfikatów

    Certyfikaty Let's Encrypt wygasają po 90 dniach. Ten krótki okres ważności jest celowy — ogranicza ekspozycję w przypadku kompromitacji klucza prywatnego. Certbot obsługuje odnawianie automatycznie, ale powinieneś sprawdzić, czy automatyzacja działa prawidłowo.

    Jak działa odnawianie 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 odnawia je automatycznie.

    Weryfikacja timera Systemd

    sudo systemctl status certbot.timer

    Oczekiwane wyjście:

    ● 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 odnawianie jest już skonfigurowane.

    Testowanie procesu odnawiania (Dry Run)

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

    sudo certbot renew --dry-run

    Pomyślne wyjście:

    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 dry run powiedzie się, twoje certyfikaty będą odnawiać się automatycznie 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

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

    Ręczne odnawianie (jeśli potrzebne)

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

    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 certyfikatu:

    > “`bash

    > sudo systemctl reload nginx

    > “`

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

    Konfiguracja haków odnawiania

    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 wykonywalne:

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

    Rozwiązywanie typowych problemów

    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 się nie powiedzie.

    Rozwiązanie: Tymczasowo zatrzymaj Nginx, uzyskaj certyfikat w trybie standalone, 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 propagują się jeszcze do serwerów walidacyjnych 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 konfigurację Nginx. Jeśli wynikowa konfiguracja ma błędy składni, Nginx się nie załaduje.

    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 ostrzegające o wygaśnięciu pomimo zainstalowanego Certbota, 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 Nginx SSL

    Domyślna konfiguracja Let’s Encrypt + Certbot jest bezpieczna, ale możesz ją dodatkowo wzmocnić, aby uzyskać wynik A+ w SSL Labs.

    Włącz HTTP/2

    Edytuj blok serwera, aby włączyć HTTP/2 w celu poprawy wydajności:

    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    Dodaj HSTS (HTTP Strict Transport Security)

    HSTS instruuje przeglądarki, aby zawsze używały HTTPS dla Twojej domeny, nawet jeśli użytkownik wpisze http://:

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

    Wyłącz słabe protokoły i szyfry

    Dodaj te dyrektywy do Twojego nginx.conf lub bloku serwera:

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

    Po wprowadzeniu zmian zawsze testuj i przeładuj:

    sudo nginx -t && sudo systemctl reload nginx

    Wybór odpowiedniego hostingu dla konfiguracji Nginx + SSL

    Wydajność i niezawodność serwera Nginx zabezpieczonego SSL zależy w dużej mierze od infrastruktury bazowej. Oto jak opcje hostingu AlexHost dostosowują się do różnych przypadków użycia:

    • Hosting VPS — Idealny dla większości stron internetowych i aplikacji. Pełny dostęp root pozwala na konfigurację Nginx i Certbot dokładnie tak, jak opisano w tym przewodniku. Plany VPS AlexHost działają na Ubuntu 18.04, 20.04 i 22.04 LTS.
    • Serwery dedykowane — Najlepsze dla stron internetowych o dużym ruchu wymagających maksymalnej wydajności, dedykowanych zasobów i pełnej kontroli sprzętu. Uruchamiaj wiele hostów wirtualnych Nginx, każdy z własnym certyfikatem Let’s Encrypt.
    • VPS z cPanel — Jeśli wolisz graficzny interfejs do zarządzania certyfikatami SSL wraz z hostingiem internetowym, cPanel integruje się z Let’s Encrypt i obsługuje wydawanie certyfikatów za pośrednictwem funkcji AutoSSL.
    • Certyfikaty SSL — W środowiskach korporacyjnych, sklepach e-commerce lub aplikacjach wymagających certyfikatów z rozszerzoną walidacją (EV) lub walidacją organizacji (OV), AlexHost oferuje premium certyfikaty SSL z gwarancją pokrycia i dedykowanym wsparciem.

    Podsumowanie

    Zabezpieczenie Nginx za pomocą certyfikatu SSL Let's Encrypt na Ubuntu to jeden z najważniejszych kroków, które możesz podjąć, aby chronić swoich użytkowników, poprawiać ranking w wyszukiwarkach i budować zaufanie z publicznością. Cały proces — od instalacji Certbota do włączenia automatycznych odnowień — zajmuje mniej niż 15 minut i nic nie kosztuje.

    Podsumowanie tego, co osiągnąłeś w tym przewodniku:

    1. ✅ Zainstalowałeś Certbot i wtyczkę Nginx
    2. ✅ Skonfigurowałeś prawidłowy blok serwera Nginx dla swojej domeny
    3. ✅ Uzyskałeś zaufany certyfikat SSL Let's Encrypt
    4. ✅ Zweryfikowałeś certyfikat za pomocą narzędzi przeglądarki, SSL Labs i OpenSSL
    5. ✅ Potwierdziłeś automatyczne odnowienie za pośrednictwem timera systemd i testowania dry-run
    6. ✅ Zastosowałeś zaawansowane wzmacnianie dla oceny bezpieczeństwa A+

    Teraz, gdy Twój serwer Nginx jest zabezpieczony, rozważ zbadanie dodatkowych warstw ochrony: Web Application Firewall (WAF), fail2ban do ochrony przed atakami brute-force i regularne audyty bezpieczeństwa. Jeśli zarządzasz wieloma domenami lub aplikacjami, Panele Kontrolne VPS AlexHost zapewniają usprawniony interfejs do zarządzania certyfikatami SSL, hostami wirtualnymi i konfiguracjami serwera bez poświęcania elastyczności środowiska Linux.

    Twoi użytkownicy zasługują na bezpieczne połączenie. Teraz je mają.