🔒 Jak skonfigurować serwer Nginx z SSL na Ubuntu 20.04

Zabezpieczenie witryny internetowej certyfikatem SSL to obecnie standard, a nie luksus. Nginx jako jeden z najpopularniejszych serwerów WWW doskonale obsługuje szyfrowanie HTTPS. Ten przewodnik przeprowadzi Cię przez cały proces instalacji Nginx, konfiguracji certyfikatów SSL oraz optymalizacji bezpiecznych połączeń na serwerze Ubuntu 20.04, zapewniając Twojej witrynie ochronę i poprawiając jej wiarygodność w oczach użytkowników i wyszukiwarek.

⚡ Ekspresowe Podsumowanie:

  1. Nginx to wydajny i lekki serwer WWW, idealny dla witryn o dużym natężeniu ruchu.
  2. Certyfikat SSL zapewnia szyfrowanie komunikacji między serwerem a użytkownikiem.
  3. Let's Encrypt oferuje darmowe certyfikaty SSL z automatycznym odnawianiem.
  4. Przekierowanie HTTP na HTTPS jest niezbędne, aby wszyscy użytkownicy korzystali z bezpiecznego połączenia.

🗺️ Spis Treści - Twoja Mapa Drogowa


📋 Przygotowanie środowiska

Zanim przystąpimy do instalacji i konfiguracji Nginx, musimy odpowiednio przygotować system. Upewnijmy się, że nasz serwer jest zaktualizowany i posiada wszystkie niezbędne pakiety.

Aktualizacja systemu

Zawsze dobrą praktyką jest rozpoczęcie od aktualizacji listy pakietów i samego systemu:

sudo apt update
sudo apt upgrade -y

Instalacja niezbędnych narzędzi

Zainstalujmy kilka przydatnych narzędzi, które będą pomocne w dalszej konfiguracji:

sudo apt install -y curl wget gnupg2 software-properties-common

Konfiguracja zapory sieciowej

Jeśli na serwerze jest aktywna zapora UFW, musimy upewnić się, że ruch HTTP (port 80) i HTTPS (port 443) jest dozwolony:

sudo ufw allow 'Nginx Full'
sudo ufw status

Uwaga: Jeśli zapora nie jest włączona, możesz ją aktywować poleceniem sudo ufw enable. Upewnij się jednak, że port SSH (domyślnie 22) jest otwarty, aby nie utracić dostępu do serwera.

🚀 Instalacja i podstawowa konfiguracja Nginx

Nginx jest dostępny w standardowych repozytoriach Ubuntu, ale możemy również zainstalować najnowszą wersję z oficjalnego repozytorium Nginx.

Instalacja Nginx z oficjalnego repozytorium

# Dodanie klucza GPG
curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo apt-key add -

# Dodanie repozytorium Nginx
echo "deb https://nginx.org/packages/ubuntu/ focal nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
echo "deb-src https://nginx.org/packages/ubuntu/ focal nginx" | sudo tee -a /etc/apt/sources.list.d/nginx.list

# Aktualizacja listy pakietów i instalacja Nginx
sudo apt update
sudo apt install -y nginx

Sprawdzenie instalacji

Po instalacji Nginx powinien uruchomić się automatycznie. Sprawdźmy jego status:

sudo systemctl status nginx

Jeśli Nginx działa prawidłowo, w odpowiedzi powinien pojawić się status "active (running)".

Konfiguracja Nginx do automatycznego uruchamiania

Aby Nginx uruchamiał się automatycznie po restarcie serwera, wykonaj:

sudo systemctl enable nginx

Testowanie instalacji Nginx

Teraz możemy sprawdzić, czy Nginx działa poprawnie, otwierając przeglądarkę i wpisując adres IP serwera. Powinniśmy zobaczyć stronę powitalną Nginx.

Możemy również sprawdzić to za pomocą narzędzia curl:

curl -I http://localhost

Powinniśmy otrzymać odpowiedź z kodem statusu 200 OK:

HTTP/1.1 200 OK
Server: nginx/1.18.0
Date: Tue, 29 Apr 2025 12:00:00 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 29 Apr 2025 11:00:00 GMT
Connection: keep-alive
ETag: "6443ca09-264"
Accept-Ranges: bytes

✨ Pro Tip: Aby sprawdzić adres IP swojego serwera, użyj polecenia ip addr show lub curl ifconfig.me (dla adresu publicznego).

🛠️ Konfiguracja bloków serwerowych

Bloki serwerowe w Nginx są podobne do wirtualnych hostów w Apache. Pozwalają na obsługę wielu domen na jednym serwerze. Skonfigurujmy podstawowy blok serwerowy dla naszej domeny.

Tworzenie katalogu na pliki witryny

Najpierw utworzymy katalog, w którym będziemy przechowywać pliki naszej witryny:

sudo mkdir -p /var/www/przyklad.pl/html

Przypisanie odpowiednich uprawnień

Zmieńmy właściciela katalogu na użytkownika Nginx (zazwyczaj www-data) i nadajmy odpowiednie uprawnienia:

sudo chown -R www-data:www-data /var/www/przyklad.pl
sudo chmod -R 755 /var/www/przyklad.pl

Tworzenie przykładowej strony

Utwórzmy prostą stronę HTML, aby przetestować naszą konfigurację:

echo '<!DOCTYPE html>
<html>
<head>
    <title>Witaj na przyklad.pl!</title>
    <meta charset="UTF-8">
    <style>
        body {
            font-family: Arial, sans-serif;
            line-height: 1.6;
            margin: 40px auto;
            max-width: 650px;
            padding: 0 10px;
        }
        h1 {
            color: #333;
        }
    </style>
</head>
<body>
    <h1>Sukces! Twój serwer Nginx działa poprawnie.</h1>
    <p>Ta strona jest obsługiwana przez Nginx na Ubuntu 20.04.</p>
</body>
</html>' | sudo tee /var/www/przyklad.pl/html/index.html

Tworzenie pliku konfiguracyjnego bloku serwerowego

Teraz utworzymy plik konfiguracyjny dla naszego bloku serwerowego:

sudo nano /etc/nginx/conf.d/przyklad.pl.conf

I dodajmy następującą zawartość (zastąp przyklad.pl swoją rzeczywistą domeną):

server {
    listen 80;
    listen [::]:80;

    server_name przyklad.pl www.przyklad.pl;
    root /var/www/przyklad.pl/html;
    index index.html index.htm index.nginx-debian.html;

    location / {
        try_files $uri $uri/ =404;
    }

    # Dodatkowa konfiguracja dla plików statycznych
    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        expires 30d;
        add_header Cache-Control "public, no-transform";
    }

    # Konfiguracja dla logów
    access_log /var/log/nginx/przyklad.pl.access.log;
    error_log /var/log/nginx/przyklad.pl.error.log;
}

Testowanie konfiguracji i restart Nginx

Sprawdźmy, czy nasza konfiguracja jest poprawna:

sudo nginx -t

Jeśli test przeszedł pomyślnie, zrestartujmy Nginx, aby zastosować zmiany:

sudo systemctl restart nginx

🔐 Instalacja certyfikatu SSL z Let's Encrypt

Let's Encrypt to darmowy, automatyczny i otwarty urząd certyfikacji (CA), który umożliwia łatwe zabezpieczenie witryn za pomocą HTTPS.

Instalacja Certbot

Certbot to narzędzie, które automatyzuje proces uzyskiwania i odnawiania certyfikatów od Let's Encrypt. Zainstalujmy Certbot razem z pluginem dla Nginx:

sudo apt install -y certbot python3-certbot-nginx

Uzyskanie certyfikatu SSL

Teraz możemy uzyskać certyfikat SSL za pomocą Certbot. Narzędzie automatycznie zmodyfikuje konfigurację Nginx:

sudo certbot --nginx -d przyklad.pl -d www.przyklad.pl

Podczas procesu zostaniemy poproszeni o podanie adresu e-mail (do powiadomień o wygaśnięciu certyfikatu), zaakceptowanie warunków usługi oraz wybór, czy chcemy przekierowywać ruch HTTP na HTTPS.

Uwaga: Aby certyfikat został pomyślnie wygenerowany, domena musi być poprawnie skonfigurowana w DNS i wskazywać na adres IP serwera.

Weryfikacja automatycznego odnawiania

Certyfikaty Let's Encrypt są ważne przez 90 dni, ale Certbot automatycznie dodaje zadanie cron, które odnawia certyfikat, gdy zbliża się termin jego wygaśnięcia. Możemy przetestować proces odnowienia za pomocą:

sudo certbot renew --dry-run

Jeśli test przebiegnie pomyślnie, oznacza to, że automatyczne odnawianie jest skonfigurowane poprawnie.

🛡️ Optymalizacja konfiguracji SSL w Nginx

Domyślna konfiguracja SSL generowana przez Certbot jest dobra, ale możemy ją dodatkowo zoptymalizować pod kątem bezpieczeństwa i wydajności.

Edycja konfiguracji Nginx dla lepszego zabezpieczenia SSL

Otwórzmy plik konfiguracyjny naszej domeny:

sudo nano /etc/nginx/conf.d/przyklad.pl.conf

Teraz zastąpimy sekcję SSL wygenerowaną przez Certbot następującą konfiguracją:

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name przyklad.pl www.przyklad.pl;

    root /var/www/przyklad.pl/html;
    index index.html index.htm index.nginx-debian.html;

    # Ścieżki do certyfikatów SSL
    ssl_certificate /etc/letsencrypt/live/przyklad.pl/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/przyklad.pl/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/przyklad.pl/chain.pem;

    # Ustawienia protokołów i szyfrów
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;

    # Opcje wydajnościowe
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:10m;
    ssl_session_tickets off;

    # Diffie-Hellman parametry
    ssl_dhparam /etc/ssl/certs/dhparam.pem;

    # OCSP Stapling
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;

    # Nagłówki bezpieczeństwa
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";

    location / {
        try_files $uri $uri/ =404;
    }

    # Dodatkowa konfiguracja dla plików statycznych
    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        expires 30d;
        add_header Cache-Control "public, no-transform";
    }

    # Konfiguracja dla logów
    access_log /var/log/nginx/przyklad.pl.access.log;
    error_log /var/log/nginx/przyklad.pl.error.log;
}

# Przekierowanie z HTTP na HTTPS
server {
    listen 80;
    listen [::]:80;

    server_name przyklad.pl www.przyklad.pl;

    return 301 https://$host$request_uri;
}

Generowanie parametrów Diffie-Hellman

Dla zwiększenia bezpieczeństwa, wygenerujmy silne parametry Diffie-Hellman:

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Uwaga: Generowanie 2048-bitowych parametrów DH może zająć kilka minut. Dla jeszcze lepszego bezpieczeństwa możesz użyć 4096 bitów, ale wtedy proces może potrwać znacznie dłużej.

Testowanie i restart Nginx

Sprawdźmy, czy nasza konfiguracja jest poprawna:

sudo nginx -t

Jeśli test przeszedł pomyślnie, zrestartujmy Nginx:

sudo systemctl restart nginx

📊 Testowanie konfiguracji SSL

Po zakończeniu konfiguracji, warto zweryfikować jej poprawność i bezpieczeństwo za pomocą specjalistycznych narzędzi.

Testowanie za pomocą SSL Labs

Jednym z najlepszych narzędzi do testowania konfiguracji SSL jest SSL Server Test od Qualys SSL Labs. Możemy uruchomić test, wpisując naszą domenę na stronie:

https://www.ssllabs.com/ssltest/

Dobrze skonfigurowany serwer powinien otrzymać ocenę A+ lub przynajmniej A.

Testowanie za pomocą Mozilla Observatory

Mozilla Observatory to kolejne przydatne narzędzie, które sprawdza nie tylko SSL, ale również inne aspekty bezpieczeństwa witryny:

https://observatory.mozilla.org/

🔧 Konfiguracja Nginx dla popularnych aplikacji webowych

Rozszerzymy naszą konfigurację dla popularnych aplikacji webowych.

Konfiguracja dla WordPress

Jeśli chcesz hostować WordPress na swoim serwerze Nginx, oto przykładowa konfiguracja, którą możesz dodać do pliku bloku serwerowego:

location / {
    try_files $uri $uri/ /index.php?$args;
}

location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

# Ukryj pliki .htaccess i .htpasswd
location ~ /\.ht {
    deny all;
}

# Ochrona plików WordPress
location ~* wp-config.php {
    deny all;
}

location ~* wp-admin/includes {
    deny all;
}

location ~* wp-includes/theme-compat/ {
    deny all;
}

Konfiguracja dla aplikacji PHP

Dla aplikacji PHP, które nie są WordPressem, podstawowa konfiguracja może wyglądać tak:

location / {
    try_files $uri $uri/ /index.php?$query_string;
}

location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

✨ Pro Tip: Pamiętaj, aby zainstalować PHP-FPM na serwerze, jeśli zamierzasz hostować aplikacje PHP: sudo apt install php7.4-fpm

Konfiguracja dla aplikacji Node.js

Jeśli hostujemy aplikację Node.js, możemy skonfigurować Nginx jako serwer proxy:

location / {
    proxy_pass http://localhost:3000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
}

🚥 Optymalizacja wydajności Nginx

Odpowiednia konfiguracja Nginx może znacząco poprawić wydajność serwera. Oto kilka kluczowych optymalizacji.

Włączenie buforowania

Buforowanie statycznych plików może znacznie przyspieszyć ładowanie strony. Dodajmy to do naszej konfiguracji:

# Dodaj do sekcji http w pliku /etc/nginx/nginx.conf
http {
    # ... inne ustawienia

    # Konfiguracja buforowania
    open_file_cache max=1000 inactive=20s;
    open_file_cache_valid 30s;
    open_file_cache_min_uses 2;
    open_file_cache_errors on;
}

Gzip kompresja

Kompresja Gzip może drastycznie zmniejszyć rozmiar transferowanych danych:

# Dodaj do sekcji http w pliku /etc/nginx/nginx.conf
http {
    # ... inne ustawienia

    # Konfiguracja kompresji Gzip
    gzip on;
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_types text/plain text/css text/xml application/json application/javascript application/xml+rss application/atom+xml image/svg+xml;
}

Limity i timeouty

Odpowiednie limity i timeouty mogą chronić serwer przed przeciążeniem:

# Dodaj do sekcji http w pliku /etc/nginx/nginx.conf
http {
    # ... inne ustawienia

    # Limity i timeouty
    client_body_timeout 12;
    client_header_timeout 12;
    keepalive_timeout 15;
    send_timeout 10;

    # Limity rozmiaru
    client_max_body_size 10m;
}

Worker processes i connections

Optymalizacja liczby procesów roboczych i połączeń może poprawić wydajność:

# Edytuj na początku pliku /etc/nginx/nginx.conf
worker_processes auto;  # Automatycznie używa liczby rdzeni CPU
worker_rlimit_nofile 65535;

events {
    worker_connections 1024;  # Zwiększ tę wartość dla serwerów o dużym natężeniu ruchu
    multi_accept on;
    use epoll;
}

❓ FAQ - Odpowiedzi na Twoje Pytania

Czy certyfikaty Let's Encrypt są wystarczająco bezpieczne dla strony firmowej?
Tak, certyfikaty Let's Encrypt zapewniają taki sam poziom szyfrowania jak płatne certyfikaty. Różnica polega głównie na procesie weryfikacji tożsamości organizacji (Let's Encrypt oferuje certyfikaty DV - Domain Validation, które weryfikują tylko własność domeny).

Jak często trzeba odnawiać certyfikat Let's Encrypt?
Certyfikaty Let's Encrypt są ważne przez 90 dni, ale Certbot automatycznie odnawia je, gdy zbliża się termin ich wygaśnięcia. W praktyce nie musisz się tym zajmować, o ile narzędzie jest poprawnie skonfigurowane.

Czy mogę używać Nginx razem z Apache na tym samym serwerze?
Tak, możesz skonfigurować Nginx jako serwer proxy przed Apache lub uruchomić je na różnych portach. Jest to powszechna praktyka, gdzie Nginx obsługuje statyczne pliki i przekazuje dynamiczne żądania do Apache.

Jak sprawdzić, czy mój certyfikat SSL działa poprawnie?
Najprościej sprawdzić to, odwiedzając swoją stronę przez HTTPS i upewniając się, że przeglądarka pokazuje zamkniętą kłódkę. Bardziej zaawansowane testy można przeprowadzić za pomocą narzędzi takich jak SSL Labs.

Jak zabezpieczyć subdomenę za pomocą tego samego certyfikatu?
Podczas generowania certyfikatu dodaj wszystkie subdomeny jako dodatkowe parametry -d, np. sudo certbot --nginx -d przyklad.pl -d www.przyklad.pl -d blog.przyklad.pl

🏁 Podsumowanie - Twój bezpieczny serwer jest gotowy

Gratulacje! Pomyślnie skonfigurowałeś serwer Nginx z SSL na Ubuntu 20.04. Twoja witryna jest teraz zabezpieczona szyfrowaniem HTTPS, co chroni dane użytkowników i poprawia wiarygodność Twojej strony.

W tym przewodniku poznałeś:

  • Jak zainstalować i skonfigurować Nginx
  • Jak uzyskać i skonfigurować certyfikat SSL za pomocą Let's Encrypt
  • Jak zoptymalizować konfigurację SSL dla lepszego bezpieczeństwa
  • Jak skonfigurować przekierowanie z HTTP na HTTPS
  • Jak poprawić wydajność serwera Nginx

Pamiętaj, że bezpieczeństwo to ciągły proces. Regularnie aktualizuj swoje oprogramowanie, monitoruj logi serwera i przeprowadzaj testy bezpieczeństwa, aby Twoja witryna pozostała bezpieczna.

✅ Twoja Checklista Bezpieczeństwa:

  • 🔍 Regularnie aktualizuj system i oprogramowanie serwera
  • 🔄 Upewnij się, że automatyczne odnawianie certyfikatu działa poprawnie
  • 🔒 Monitoruj logi serwera pod kątem podejrzanej aktywności
  • 🛡️ Okresowo testuj bezpieczeństwo swojej witryny za pomocą narzędzi takich jak SSL Labs
  • 📚 Bądź na bieżąco z najnowszymi praktykami bezpieczeństwa

🚀 Potrzebujesz profesjonalnego hostingu dla swojej strony?

Sprawdź nasze usługi hostingowe z SSL

Bezpieczny i wydajny hosting z darmowym SSL, codziennymi kopiami zapasowymi i profesjonalnym wsparciem technicznym.

Czy ten artykuł był pomocny?

Wróć do listy wpisów

Twoja strona WordPress działa wolno?

Sprawdź nasz hosting WordPress z ultraszybkimi dyskami NVMe i konfiguracją serwera zoptymalizowaną pod kątem wydajności. Doświadcz różnicy już dziś!

Sprawdź ofertę hostingu
30-dniowa gwarancja zwrotu pieniędzy