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:
| Wymaganie | Szczegóły |
|---|---|
| System operacyjny | Ubuntu 18.04, 20.04 lub 22.04 LTS |
| Serwer WWW | Nginx zainstalowany i aktywnie obsługujący Twoją witrynę |
| Nazwa domeny | Zarejestrowana domena z rekordem A wskazującym na publiczny IP 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 |
Sprawdź, czy Nginx jest uruchomiony
Przed zainstalowaniem Certbot potwierdź, że Nginx jest aktywny:
sudo systemctl status nginxW 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 nginxOtwó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 statusDane 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 -yZainstaluj Certbot z wtyczką Nginx
sudo apt install certbot python3-certbot-nginx -yWeryfikuj instalację
certbot --versionOczekiwane 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.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/Testuj konfigurację Nginx
Zawsze sprawdzaj konfigurację Nginx przed przeładowaniem:
sudo nginx -tOczekiwane wyjście:
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
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.comWyjaś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/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 certificatesDane 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.pemMetoda 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 -issuerOczekiwane 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=R11Krok 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.timerOczekiwane 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.serviceJeś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-runPomyś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/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 renewTo 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.shDodaj następującą zawartość:
#!/bin/bash
systemctl reload nginxUczyń to wykonywalne:
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.shRozwią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 nginxBłą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 +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 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 nginxCertyfikat 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 nginxWybó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:
- ✅ Zainstalowałeś Certbot i wtyczkę Nginx
- ✅ Skonfigurowałeś prawidłowy blok serwera Nginx dla swojej domeny
- ✅ Uzyskałeś zaufany certyfikat SSL Let's Encrypt
- ✅ Zweryfikowałeś certyfikat za pomocą narzędzi przeglądarki, SSL Labs i OpenSSL
- ✅ Potwierdziłeś automatyczne odnowienie za pośrednictwem timera systemd i testowania dry-run
- ✅ 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ą.
na wszystkich usługach hostingowych