OKWszystkie usługi działają prawidłowo
InfrawireLogo InfrawireDokumentacja

Instalacja Nginx z certyfikatem SSL (Certbot)

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

Bash
sudo apt update

Instalacja Nginx

Bash
sudo apt install nginx -y

Weryfikacja instalacji

Bash
1# 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)

Bash
1# 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-serwera lub
  • http://twoja-domena.com

Powinieneś zobaczyć domyślną stronę Nginx potwierdzającą działanie instalacji.

📝 Krok 2: Konfiguracja strony

Utworzenie katalogu dla witryny

Bash
1# 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ść:

HTML
1<!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ę:

Nginx
1server { 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

Bash
1# 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)

Bash
1# 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ń:

  1. E-mail: Podaj adres (powiadomienia o odnowieniu)
  2. Regulamin: Zaakceptuj (A — Agree)
  3. Udostępnianie e-maila: Y lub N według preferencji
  4. 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
1# 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

Bash
1# Status usługi 2sudo systemctl status nginx 3 4# Test konfiguracji 5sudo nginx -t

SSL

Bash
1# 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

Bash
1# 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

Bash
1# 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

Bash
1# 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

Bash
1# 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:

  1. Sprawdź, czy domena wskazuje na IP serwera:

    Bash
    dig mysite.com
  2. Sprawdź porty 80 i 443:

    Bash
    sudo ufw status
  3. Sprawdź, czy Nginx nasłuchuje na porcie 80:

    Bash
    sudo netstat -tlnp | grep nginx
  4. Upewnij się, że w konfiguracji Nginx jest poprawny server_name

Strona nie ładuje się przez HTTPS

  1. Sprawdź certyfikat:

    Bash
    sudo certbot certificates
  2. Sprawdź konfigurację Nginx:

    Bash
    sudo nginx -t sudo cat /etc/nginx/sites-enabled/mysite.com
  3. Upewnij się, że zapora zezwala na port 443:

    Bash
    sudo ufw allow 443/tcp

Błąd 502 Bad Gateway

Oznacza to, że Nginx nie może połączyć się z aplikacją.

Bash
1# 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. 🚀🔒