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
💡 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
Bash1# Sprawdź, czy Nginx jest zainstalowany 2nginx -v 3 4# Sprawdź, czy Nginx działa 5sudo systemctl status nginx
Jeśli wszystko jest w porządku, powinieneś zobaczyć active (running).
Zezwolenie na Nginx w zaporze (UFW)
Bash1# Zezwól na HTTP (port 80) 2sudo ufw allow 'Nginx HTTP' 3 4# Zezwól na HTTPS (port 443) 5sudo ufw allow 'Nginx HTTPS' 6 7# Sprawdź reguły 8sudo 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
Bash1# Utwórz katalog (zamień mysite.com na swoją domenę) 2sudo mkdir -p /var/www/mysite.com 3 4# Ustaw uprawnienia 5sudo chown -R $USER:$USER /var/www/mysite.com 6sudo 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}
Zapisz plik.
Włączenie witryny
Bash1# Utwórz dow symboliczny, aby włączyć witrynę 2sudo ln -s /etc/nginx/sites-available/mysite.com /etc/nginx/sites-enabled/ 3 4# Test konfiguracji Nginx 5sudo nginx -t
Jeśli widzisz syntax is ok i test is successful, możesz kontynuować.
Usunięcie domyślnej witryny (opcjonalnie)
Bash1# Usuń domyślną witrynę 2sudo rm /etc/nginx/sites-enabled/default 3 4# Przeładuj Nginx 5sudo 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
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ź:
Bash1# Status timera 2sudo systemctl status certbot.timer 3 4# Jeśli timer nieaktywny — włącz 5sudo systemctl enable certbot.timer 6sudo 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
Bash1# Status usługi 2sudo systemctl status nginx 3 4# Test konfiguracji 5sudo nginx -t
SSL
Bash1# Lista certyfikatów 2sudo certbot certificates 3 4# Data wygaśnięcia 5sudo 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
Bash1# Start Nginx 2sudo systemctl start nginx 3 4# Stop Nginx 5sudo systemctl stop nginx 6 7# Restart Nginx 8sudo systemctl restart nginx 9 10# Przeładowanie Nginx (bez przerwy) 11sudo systemctl reload nginx 12 13# Test konfiguracji 14sudo nginx -t
Certyfikaty SSL
Bash1# Ręczne odnowienie wszystkich certyfikatów 2sudo certbot renew 3 4# Odnowienie konkretnego certyfikatu 5sudo certbot renew --cert-name mysite.com 6 7# Lista certyfikatów 8sudo certbot certificates 9 10# Usunięcie certyfikatu 11sudo certbot delete --cert-name mysite.com
Logi
Bash1# Logi Nginx 2sudo tail -f /var/log/nginx/error.log 3sudo tail -f /var/log/nginx/access.log 4 5# Logi Certbot 6sudo tail -f /var/log/letsencrypt/letsencrypt.log
🆘 Rozwiązywanie problemów
Nginx nie startuje
Bash1# Błędy konfiguracji 2sudo nginx -t 3 4# Logi błędów 5sudo 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ą.
Bash1# Logi Nginx 2sudo tail -f /var/log/nginx/error.log 3 4# Czy aplikacja działa 5sudo 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. 🚀🔒