Jak przekierować HTTP na HTTPS w systemie Linux za pomocą Nginx (Kompletny przewodnik)
Zabezpieczenie witryny za pomocą HTTPS nie jest już opcjonalne — jest to fundamentalne wymaganie ochrony danych użytkowników, utrzymania zaufania i osiągnięcia silnych rankingów SEO. Wyszukiwarki takie jak Google aktywnie karają nieszyfrowane witryny HTTP, podczas gdy nowoczesne przeglądarki oznaczają je jako „Niezabezpieczone”. Przekierowanie całego ruchu HTTP na HTTPS zapewnia, że każdy odwiedzający automatycznie trafia do zaszyfrowanej wersji witryny bez żadnej ręcznej interwencji.
Ten kompleksowy przewodnik przeprowadzi Cię przez cały proces: zrozumienie różnicy między HTTP i HTTPS, instalacja bezpłatnego certyfikatu SSL za pośrednictwem Let’s Encrypt, konfiguracja trwałego przekierowania 301 w Nginx i weryfikacja, że wszystko działa prawidłowo na serwerze Linux.
1. HTTP vs. HTTPS: Jaka jest różnica?
Przed przystąpieniem do konfiguracji ważne jest zrozumienie, dlaczego to przekierowanie ma znaczenie.
HTTP (Hypertext Transfer Protocol)
HTTP to podstawowy protokół używany do przesyłania danych między przeglądarką internetową a serwerem. Jednak przesyła wszystkie dane w zwykłym tekście, co oznacza, że każde informacje — dane logowania, szczegóły płatności, dane osobowe — mogą zostać przechwycone przez atakujących za pomocą ataku man-in-the-middle (MITM). HTTP nie oferuje szyfrowania, uwierzytelniania ani gwarancji integralności danych.
HTTPS (HTTP Secure)
HTTPS to bezpieczne rozszerzenie HTTP. Opakowuje standardowy protokół HTTP wewnątrz szyfrowania SSL/TLS, tworząc zaszyfrowany tunel między klientem a serwerem. Zapewnia to:
- Poufność — Dane nie mogą być odczytane przez strony trzecie podczas przesyłania.
- Integralność — Dane nie mogą być zmieniane podczas transmisji.
- Uwierzytelnianie — Użytkownicy mogą zweryfikować, że komunikują się z legalnym serwerem.
- Przewaga SEO — Google używa HTTPS jako sygnału rankingowego, dając bezpiecznym witrynom wymierną przewagę.
- Zaufanie przeglądarki — Chrome, Firefox i Edge wyświetlają ikonę kłódki dla witryn HTTPS oraz ostrzeżenie „Niezabezpieczone” dla witryn HTTP.
Podsumowanie: uruchamianie witryny bez HTTPS w dzisiejszym środowisku stanowi poważne zagrożenie bezpieczeństwa i biznesu.
2. Wymagania wstępne
Przed wykonaniem tego przewodnika upewnij się, że masz następujące elementy:
- Serwer Linux (Ubuntu 20.04/22.04, Debian 11/12 lub podobny) z uruchomionym Nginx
- Zarejestrowaną nazwę domeny wskazującą na adres IP serwera
- Dostęp root lub
sudodo serwera - Podstawową znajomość wiersza poleceń Linux
Jeśli szukasz niezawodnego środowiska serwera do hostowania witryny, VPS Hosting od AlexHost oferuje w pełni zarządzane i niezarządzane plany Linux VPS zoptymalizowane dla aplikacji internetowych, z magazynem SSD i siecią o wysokiej dostępności.
Będziesz również potrzebować ważnego certyfikatu SSL. Ten przewodnik używa bezpłatnego certyfikatu Let’s Encrypt z urzędu certyfikacji za pośrednictwem Certbot. Jeśli potrzebujesz certyfikatu z rozszerzoną walidacją (EV) lub walidacją organizacji (OV) do użytku biznesowego, rozważ zapoznanie się z Certyfikatami SSL od AlexHost.
3. Krok 1: Zainstaluj certyfikat SSL za pomocą Let’s Encrypt
Let’s Encrypt to bezpłatny, zautomatyzowany i otwarty urząd certyfikacji. Certbot to oficjalny klient, który automatyzuje proces uzyskiwania i odnawiania certyfikatów SSL/TLS z Let’s Encrypt i konfigurowania serwera internetowego.
Zainstaluj Certbot i wtyczkę Nginx
Zaktualizuj indeks pakietów i zainstaluj Certbot wraz z wtyczką Nginx:
sudo apt update
sudo apt install certbot python3-certbot-nginx -yUzyskaj i zainstaluj certyfikat SSL
Uruchom Certbot z flagą --nginx aby automatycznie uzyskać certyfikat i skonfigurować Nginx do jego użycia:
sudo certbot --nginx -d example.com -d www.example.comZastąp example.com swoją rzeczywistą nazwą domeny. Certbot będzie:
- Weryfikować własność domeny poprzez wyzwanie ACME
- Uzyskać podpisany certyfikat z Let’s Encrypt
- Automatycznie modyfikować konfigurację Nginx aby włączyć HTTPS na porcie 443
- Opcjonalnie skonfigurować automatyczne przekierowanie HTTP na HTTPS (możesz pominąć ten krok w Certbot i skonfigurować go ręcznie jak pokazano poniżej dla pełnej kontroli)
Włącz automatyczne odnawianie certyfikatu
Certyfikaty Let’s Encrypt wygasają co 90 dni. Certbot instaluje timer systemd lub zadanie cron do automatycznego obsługiwania odnowień. Sprawdź, czy jest aktywny:
sudo systemctl status certbot.timerMożesz również wykonać testowe odnawianie:
sudo certbot renew --dry-run4. Krok 2: Konfiguracja Nginx do przekierowania HTTP na HTTPS
Po zainstalowaniu certyfikatu SSL musisz teraz skonfigurować Nginx do permanentnego przekierowania całego ruchu HTTP (port 80) na HTTPS (port 443). Odbywa się to za pomocą przekierowania 301 Moved Permanently, które jest prawidłowym typem przekierowania dla SEO — przekazuje wartość linku do wersji HTTPS Twoich stron.
Otwórz konfigurację bloku serwera Nginx
Konfiguracje witryn Nginx są zwykle przechowywane w /etc/nginx/sites-available/. Otwórz plik konfiguracyjny dla Twojej domeny:
sudo nano /etc/nginx/sites-available/example.comKonfiguracja bloku przekierowania HTTP na HTTPS
Plik konfiguracyjny będzie zawierać jeden lub więcej bloków server. Zlokalizuj blok nasłuchujący na porcie 80 (HTTP) i zastąp lub zaktualizuj go następującą regułą przekierowania:
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
# Permanently redirect all HTTP requests to HTTPS
return 301 https://$host$request_uri;
}Twój blok serwera HTTPS (port 443), który Certbot prawdopodobnie skonfigurował automatycznie, powinien wyglądać podobnie do tego:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
root /var/www/example.com/html;
index index.html index.php;
location / {
try_files $uri $uri/ =404;
}
}> Dlaczego używać return 301 zamiast rewrite?
> Dyrektywa return 301 jest szybsza i bardziej wydajna niż reguła rewrite. Natychmiast zwraca odpowiedź przekierowania bez konieczności przetwarzania przez Nginx dodatkowych bloków lokalizacji, zmniejszając obciążenie serwera i poprawiając czas odpowiedzi.
Zrozumienie dyrektywy przekierowania
| Komponent | Wyjaśnienie |
|---|---|
listen 80 | Nginx nasłuchuje połączeń przychodzących na porcie HTTP 80 |
listen [::]:80 | Włącza obsługę IPv6 na porcie 80 |
server_name | Definiuje nazwy domen, do których stosuje się ten blok |
return 301 | Wydaje permanentne przekierowanie (najlepsze dla SEO) |
https://$host | Zachowuje oryginalną nazwę hosta w przekierowaniu |
$request_uri | Zachowuje pełną oryginalną ścieżkę URI i ciąg zapytania |
5. Krok 3: Przetestuj konfigurację Nginx
Nigdy nie przeładowuj ani nie restartuj Nginx bez wcześniejszego przetestowania konfiguracji. Błąd składni w pliku konfiguracyjnym spowoduje, że Nginx nie uruchomi się, co spowoduje przejście witryny do trybu offline.
Uruchom wbudowany test konfiguracji Nginx:
sudo nginx -tPomyślny test daje następujące wyjście:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successfulJeśli widzisz jakiekolwiek błędy, uważnie przejrzyj wyjście. Nginx wskaże plik i numer linii, gdzie problem został wykryty. Typowe problemy to:
- Brakujące średniki na końcu dyrektyw
- Niezamknięte nawiasy klamrowe
{} - Nieprawidłowe ścieżki plików dla certyfikatów SSL
- Zduplikowane wpisy
server_name
Napraw wszelkie zgłoszone błędy przed kontynuowaniem.
6. Krok 4: Przeładuj Nginx, aby zastosować zmiany
Po pomyślnym przejściu testu konfiguracji przeładuj Nginx, aby zastosować zmiany. Użycie reload zamiast restart jest preferowane, ponieważ stosuje nową konfigurację bezpiecznie bez przerywania aktywnych połączeń:
sudo systemctl reload nginxAby potwierdzić, że Nginx działa prawidłowo po przeładowaniu:
sudo systemctl status nginxW danych wyjściowych powinieneś zobaczyć active (running).
7. Krok 5: Weryfikacja działania przekierowania
Po przeładowaniu Nginx nadszedł czas, aby potwierdzić, że przekierowanie działa prawidłowo.
Metoda 1: Test w przeglądarce
- Otwórz przeglądarkę internetową.
- Przejdź do
http://example.com(używając HTTP, nie HTTPS). - Obserwuj, że przeglądarka automatycznie przekierowuje Cię do
https://example.com. - Potwierdź, że w pasku adresu pojawia się ikona kłódki, wskazująca na ważne połączenie SSL.
Metoda 2: Test z wiersza poleceń za pomocą curl
Użyj curl z flagą -I aby pobrać tylko nagłówki odpowiedzi HTTP bez pobierania treści strony:
curl -I http://example.comPrawidłowo skonfigurowane przekierowanie daje następującą odpowiedź:
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Mon, 01 Jan 2025 12:00:00 GMT
Content-Type: text/html
Location: https://example.com/
Connection: keep-aliveKluczowe wskaźniki do weryfikacji:
- Kod statusu
301 Moved Permanently— Potwierdza, że trwałe przekierowanie jest aktywne. Location: https://example.com/— Potwierdza, że ruch jest przekierowywany do wersji HTTPS.
Metoda 3: Narzędzie do sprawdzania przekierowań online
Możesz również użyć bezpłatnych narzędzi online, takich jak redirect-checker.org lub httpstatus.io, aby śledzić pełny łańcuch przekierowań i potwierdzić, że nie ma pętli przekierowań ani niepotrzebnych przeskoków.
8. Typowe problemy i rozwiązywanie problemów
Pętla przekierowania
Symptom: Przeglądarka wyświetla błąd “Zbyt wiele przekierowań”.
Cause: Blok serwera HTTPS również wyzwala przekierowanie z powrotem do HTTP, tworząc nieskończoną pętlę.
Fix: Upewnij się, że dyrektywa return 301 istnieje tylko w bloku serwera HTTP (port 80), a nie w bloku HTTPS (port 443).
Ostrzeżenia o mieszanej zawartości
Symptom: Ikona kłódki pokazuje ostrzeżenie nawet po działającym przekierowaniu.
Cause: Twoje strony HTML nadal odwołują się do zasobów HTTP (obrazy, skrypty, arkusze stylów) przy użyciu adresów URL http://.
Fix: Zaktualizuj wszystkie wewnętrzne adresy URL zasobów, aby używały https:// lub adresów URL niezależnych od protokołu (//). Użyj wtyczki takiej jak Really Simple SSL dla witryn WordPress.
Certyfikat SSL nie znaleziony
Symptom: Nginx nie uruchamia się z błędem dotyczącym brakujących plików certyfikatu.
Cause: Ścieżki określone w ssl_certificate i ssl_certificate_key nie odpowiadają rzeczywistym lokalizacjom plików certyfikatu.
Fix: Zweryfikuj ścieżki certyfikatu za pomocą:
sudo ls /etc/letsencrypt/live/example.com/Odnowienie Certbot nie powiodło się
Symptom: Automatyczne odnowienie nie powiodło się z błędem połączenia.
Cause: Port 80 może być zablokowany przez zaporę sieciową, uniemożliwiając ukończenie wyzwania HTTP-01 Let’s Encrypt.
Fix: Upewnij się, że port 80 jest otwarty w zaporze sieciowej:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload9. Podsumowanie
Przekierowanie HTTP na HTTPS na serwerze Linux przy użyciu Nginx to proste, ale krytycznie ważne zadanie konfiguracyjne. Wdrażając permanentne przekierowanie 301, zapewniasz, że każdy odwiedzający — niezależnie od tego, jak uzyskuje dostęp do Twojej witryny — jest automatycznie obsługiwany przez zaszyfrowaną, bezpieczną wersję. To chroni wrażliwe dane użytkownika, buduje zaufanie odwiedzających, spełnia nowoczesne wymagania bezpieczeństwa przeglądarek i zapewnia mierzalną korzyść SEO.
Podsumowanie kluczowych kroków omówionych w tym przewodniku:
- Zainstaluj Certbot i uzyskaj bezpłatny certyfikat SSL od Let’s Encrypt.
- Skonfiguruj blok serwera HTTP Nginx z
return 301przekierowaniem na HTTPS. - Przetestuj konfigurację za pomocą
sudo nginx -tprzed zastosowaniem zmian. - Przeładuj Nginx za pomocą
sudo systemctl reload nginx. - Zweryfikuj przekierowanie używając przeglądarki,
curllub internetowego narzędzia do sprawdzania przekierowań. - Monitoruj odnowienie certyfikatu, aby upewnić się, że Twój certyfikat SSL nigdy nie wygaśnie.
Aby uzyskać najlepsze wyniki, uruchom serwer internetowy Nginx na wysokowydajnej, niezawodnej platformie hostingowej. AlexHost oferuje Hosting VPS z pełnym dostępem root, magazynem SSD NVMe i elastycznymi dystrybucjami Linux — idealny do hostowania witryn opartych na Nginx. Jeśli potrzebujesz wstępnie skonfigurowanego środowiska panelu sterowania, zapoznaj się z VPS z cPanel lub przeglądaj wszystkie dostępne Panele sterowania VPS, aby znaleźć odpowiedni interfejs zarządzania dla Twojego przepływu pracy. W przypadku aplikacji o dużym ruchu lub intensywnym wykorzystaniu zasobów, Serwery dedykowane zapewniają maksymalną wydajność i izolację, jakich wymaga Twoja infrastruktura.
Regularnie sprawdzaj ważność certyfikatu SSL, aktualizuj Nginx i okresowo przeglądaj konfigurację bezpieczeństwa serwera, aby utrzymać solidną i godną zaufania obecność w sieci.
na wszystkich usługach hostingowych