Ten przewodnik pokazuje, jak zainstalować Nginx, skonfigurować stronę i uzyskać darmowy certyfikat SSL z Certbot, aby zabezpieczyć witrynę przez HTTPS.
📋 Wymagania wstępne
- Serwer VPS z dostępem root lub sudo
- Domena wskazująca na IP serwera (np.
mysite.com) - Porty 80 (HTTP) i 443 (HTTPS) otwarte w zaporze
Uwaga: Jeśli nie masz jeszcze domeny, możesz testować po IP, ale Certbot wymaga domeny do wystawienia certyfikatów SSL.
💡 Rekomendacja infrastruktury
Nginx i Certbot świetnie działają na naszych VPS NVMe, które zapewniają wyjątkową wydajność dysku przy serwowaniu stron. Dyski NVMe skracają czas odpowiedzi dla odwiedzających.
🚀 Krok 1: Instalacja Nginx
Aktualizacja pakietów
Bashsudo apt update
Instalacja Nginx
Bashsudo apt install nginx -y
Weryfikacja instalacji
Bash# Sprawdź, czy Nginx jest zainstalowany nginx -v # Sprawdź, czy Nginx działa sudo systemctl status nginx
Jeśli wszystko jest w porządku, powinieneś zobaczyć active (running).
Zezwolenie na Nginx w zaporze (UFW)
Bash# Zezwól na HTTP (port 80) sudo ufw allow 'Nginx HTTP' # Zezwól na HTTPS (port 443) sudo ufw allow 'Nginx HTTPS' # Sprawdź reguły sudo ufw status
Test Nginx
Otwórz przeglądarkę i wejdź na:
http://adres-ip-serweralubhttp://twoja-domena.com
Powinieneś zobaczyć domyślną stronę Nginx potwierdzającą działanie instalacji.
📝 Krok 2: Konfiguracja strony
Utworzenie katalogu dla witryny
Bash# Utwórz katalog (zamień mysite.com na swoją domenę) sudo mkdir -p /var/www/mysite.com # Ustaw uprawnienia sudo chown -R $USER:$USER /var/www/mysite.com sudo chmod -R 755 /var/www/mysite.com
Prosta strona HTML
Bash# Utwórz stronę index nano /var/www/mysite.com/index.html
Wklej tę prostą treść:
HTML1<!DOCTYPE html> 2<html lang="pl"> 3<head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <title>Moja strona</title> 7</head> 8<body> 9 <h1>Witaj na mojej stronie!</h1> 10 <p>Twoja strona działa poprawnie z Nginx.</p> 11</body> 12</html>
Zapisz: Ctrl + X, potem Y, potem Enter.
Konfiguracja Nginx
Bash# Utwórz plik konfiguracyjny sudo nano /etc/nginx/sites-available/mysite.com
Dodaj tę konfigurację:
Nginx1server { 2 listen 80; 3 listen [::]:80; 4 5 server_name mysite.com www.mysite.com; 6 7 root /var/www/mysite.com; 8 index index.html; 9 10 location / { 11 try_files $uri $uri/ =404; 12 } 13}
Ważne: Zamień
mysite.comna swoją rzeczywistą domenę we wszystkich miejscach.
Zapisz plik.
Włączenie witryny
Bash# Utwórz dow symboliczny, aby włączyć witrynę sudo ln -s /etc/nginx/sites-available/mysite.com /etc/nginx/sites-enabled/ # Test konfiguracji Nginx sudo nginx -t
Jeśli widzisz syntax is ok i test is successful, możesz kontynuować.
Usunięcie domyślnej witryny (opcjonalnie)
Bash# Usuń domyślną witrynę sudo rm /etc/nginx/sites-enabled/default # Przeładuj Nginx sudo systemctl reload nginx
Test strony
Otwórz przeglądarkę i wejdź na http://twoja-domena.com. Powinieneś zobaczyć swoją stronę HTML.
🔒 Krok 3: Instalacja Certbot i uzyskanie certyfikatu SSL
Certbot automatycznie uzyskuje darmowe certyfikaty SSL od Let's Encrypt.
Instalacja Certbot
Bash# Certbot i wtyczka Nginx sudo apt install certbot python3-certbot-nginx -y
Uzyskanie certyfikatu SSL
Bash# Certyfikat dla domeny sudo certbot --nginx -d mysite.com -d www.mysite.com
Ważne: Zamień
mysite.comna swoją rzeczywistą domenę.
Certbot zada kilka pytań:
- E-mail: Podaj adres (powiadomienia o odnowieniu)
- Regulamin: Zaakceptuj (
A— Agree) - Udostępnianie e-maila:
YlubNwedług preferencji - Przekierowanie HTTP → HTTPS: Wybierz
2(zalecane automatyczne przekierowanie)
Weryfikacja certyfikatu
Bash# Sprawdź utworzone certyfikaty sudo certbot certificates
Powinieneś zobaczyć certyfikat z datami ważności.
Test strony HTTPS
Otwórz przeglądarkę i wejdź na https://twoja-domena.com.
Powinieneś zobaczyć:
- Zieloną kłódkę 🔒 w pasku adresu
- Stronę ładowaną przez HTTPS
Gratulacje — witryna jest zabezpieczona SSL.
🔄 Krok 4: Automatyczne odnawianie certyfikatu
Certyfikaty Let's Encrypt wygasają po 90 dniach. Certbot może je odnawiać automatycznie.
Test automatycznego odnowienia
Bash# Symulacja odnowienia sudo certbot renew --dry-run
Jeśli widzisz The dry run was successful, automatyczne odnowienie działa.
Usługa odnowień
Certbot tworzy timer systemd. Sprawdź:
Bash# Status timera sudo systemctl status certbot.timer # Jeśli timer nieaktywny — włącz sudo systemctl enable certbot.timer sudo systemctl start certbot.timer
Certyfikat zostanie odnowiony przed wygaśnięciem.
📁 Struktura plików
Ważne lokalizacje:
/var/www/mysite.com/ # Pliki witryny
/etc/nginx/ # Konfiguracja Nginx
/etc/nginx/sites-available/ # Dostępne witryny
/etc/nginx/sites-enabled/ # Aktywne witryny
/etc/letsencrypt/ # Certyfikaty SSL
✅ Końcowa weryfikacja
Nginx
Bash# Status usługi sudo systemctl status nginx # Test konfiguracji sudo nginx -t
SSL
Bash# Lista certyfikatów sudo certbot certificates # Data wygaśnięcia sudo certbot certificates | grep "Expiry"
Test witryny
- Wejdź na
https://twoja-domena.com - Sprawdź zieloną kłódkę w przeglądarce
- Kliknij kłódkę, aby zobaczyć szczegóły certyfikatu
🛠️ Przydatne polecenia
Zarządzanie Nginx
Bash# Start Nginx sudo systemctl start nginx # Stop Nginx sudo systemctl stop nginx # Restart Nginx sudo systemctl restart nginx # Przeładowanie Nginx (bez przerwy) sudo systemctl reload nginx # Test konfiguracji sudo nginx -t
Certyfikaty SSL
Bash# Ręczne odnowienie wszystkich certyfikatów sudo certbot renew # Odnowienie konkretnego certyfikatu sudo certbot renew --cert-name mysite.com # Lista certyfikatów sudo certbot certificates # Usunięcie certyfikatu sudo certbot delete --cert-name mysite.com
Logi
Bash# Logi Nginx sudo tail -f /var/log/nginx/error.log sudo tail -f /var/log/nginx/access.log # Logi Certbot sudo tail -f /var/log/letsencrypt/letsencrypt.log
🆘 Rozwiązywanie problemów
Nginx nie startuje
Bash# Błędy konfiguracji sudo nginx -t # Logi błędów sudo journalctl -u nginx -n 50
Certyfikat SSL się nie instaluje
Problem: Certbot nie może zweryfikować domeny.
Rozwiązania:
-
Sprawdź, czy domena wskazuje na IP serwera:
Bashdig mysite.com -
Sprawdź porty 80 i 443:
Bashsudo ufw status -
Sprawdź, czy Nginx nasłuchuje na porcie 80:
Bashsudo netstat -tlnp | grep nginx -
Upewnij się, że w konfiguracji Nginx jest poprawny
server_name
Strona nie ładuje się przez HTTPS
-
Sprawdź certyfikat:
Bashsudo certbot certificates -
Sprawdź konfigurację Nginx:
Bashsudo nginx -t sudo cat /etc/nginx/sites-enabled/mysite.com -
Upewnij się, że zapora zezwala na port 443:
Bashsudo ufw allow 443/tcp
Błąd 502 Bad Gateway
Oznacza to, że Nginx nie może połączyć się z aplikacją.
Bash# Logi Nginx sudo tail -f /var/log/nginx/error.log # Czy aplikacja działa sudo systemctl status your-application
📚 Dodatkowe zasoby
❓ Najczęstsze pytania
P: Czy muszę płacić za certyfikat SSL?
O: Nie. Certbot korzysta z Let's Encrypt — darmowe certyfikaty.
P: Czy certyfikat wygasa?
O: Tak, po 90 dniach, ale Certbot odnawia go automatycznie.
P: Czy mogę mieć wiele stron na jednym serwerze?
O: Tak. Dla każdej witryny utwórz plik w /etc/nginx/sites-available/.
P: Jak dodać subdomenę?
O: Nowa konfiguracja Nginx i certyfikat: sudo certbot --nginx -d subdomain.mysite.com.
P: Co jeśli zapomniałem odnowić certyfikat?
O: Certbot odnawia go automatycznie. Możesz też uruchomić ręcznie: sudo certbot renew.
Twoja strona jest teraz zabezpieczona przez HTTPS. 🚀🔒