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
- Dlaczego SSL ma znaczenie dla Nginx w 2025
- Wymagania wstępne
- Krok 1 — Instalacja Certbot i wtyczki Nginx
- Krok 2 — Konfiguracja bloku serwera Nginx
- Krok 3 — Uzyskanie certyfikatu SSL Let’s Encrypt
- Krok 4 — Weryfikacja instalacji SSL
- Krok 5 — Konfiguracja automatycznego odnowienia certyfikatu
- Rozwiązywanie typowych problemów
- 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:
| Wymaganie | Szczegóły |
|---|---|
| System operacyjny | Ubuntu 18.04, 20.04 lub 22.04 LTS |
| Serwer internetowy | Nginx zainstalowany i aktywnie obsługujący Twoją stronę |
| Nazwa domeny | Zarejestrowana domena z rekordem A wskazującym na publiczny IP Twojego serwera |
| Dostęp do serwera | Dostęp SSH z użytkownikiem posiadającym sudo uprawnienia |
| Zapora sieciowa | Porty 80 (HTTP) i 443 (HTTPS) otwarte w UFW lub iptables |
| Dostęp root | Nie 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 nginxPowinieneś 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 nginxOtwó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 statusWynik 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 -yZainstaluj Certbot z wtyczką Nginx
sudo apt install certbot python3-certbot-nginx -yWeryfikacja instalacji
certbot --versionOczekiwany 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.comDodaj 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 -tOczekiwany wynik:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successfulPrzeładuj Nginx
sudo systemctl reload nginxKrok 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.comWyjaś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/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 certificatesWynik:
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.pemMetoda 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 -issuerOczekiwany 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=R11Krok 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.timerOczekiwany 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.serviceJeś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-runPomyś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/certbotPowinieneś 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 renewUruchamia 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.shDodaj następującą zawartość:
#!/bin/bash
systemctl reload nginxUczyń to wykonalnym:
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.shRozwią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 nginxBłą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 +shortWynik 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.comPo 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 nginxCertyfikat 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ąż.
