Konfiguracja Przekierowań za Pomocą Nginx na VPS: Kompletny Przewodnik Konfiguracji
Przekierowania są fundamentalnym składnikiem każdej dobrze zarządzanej infrastruktury internetowej. Niezależnie od tego, czy przeprojektujesz swoją witrynę, migrujesz do nowej domeny, czy tymczasowo kierujesz ruch podczas konserwacji, prawidłowo skonfigurowane przekierowania chronią Twoje rankingi SEO, zachowują wartość linków i zapewniają, że odwiedzający zawsze lądują na właściwej stronie. Nginx — jeden z najpotężniejszych i najszerzej używanych serwerów internetowych na świecie — sprawia, że implementacja przekierowań jest zarówno elastyczna, jak i wydajna.
Ten kompleksowy przewodnik przeprowadzi Cię przez wszystko, co musisz wiedzieć o konfiguracji przekierowań HTTP przy użyciu Nginx w środowisku VPS Hosting, od zrozumienia typów przekierowań po testowanie i weryfikację konfiguracji w środowisku produkcyjnym.
1. Zrozumienie przekierowań HTTP
Zanim dotkniesz pojedynczego pliku konfiguracyjnego, ważne jest zrozumienie, co przekierowania faktycznie robią i dlaczego wybór prawidłowego typu ma znaczenie — szczególnie dla SEO.
Przekierowanie HTTP to odpowiedź serwera, która instruuje klienta (zwykle przeglądarkę internetową lub crawler) aby przejść do innego adresu URL niż ten pierwotnie żądany. Serwer komunikuje tę instrukcję za pomocą kodu stanu HTTP 3xx, a konkretny kod, który wybierzesz, ma znaczące implikacje zarówno dla doświadczenia użytkownika, jak i zachowania wyszukiwarek.
Najczęstsze typy przekierowań
| Typ przekierowania | Kod stanu | Przypadek użycia | Przekazuje wartość linku? |
|---|---|---|---|
| Przekierowanie permanentne | 301 | Zasób został przeniesiony na stałe | ✅ Tak |
| Przekierowanie tymczasowe | 302 | Zasób tymczasowo niedostępny | ❌ Nie |
| Przekierowanie tymczasowe (metoda bezpieczna) | 307 | Tymczasowe przeniesienie, zachowuje metodę HTTP | ❌ Nie |
| Przekierowanie permanentne (metoda bezpieczna) | 308 | Permanentne przeniesienie, zachowuje metodę HTTP | ✅ Tak |
#### Przekierowanie permanentne 301
Przekierowanie 301 jest najważniejszym typem przekierowania dla SEO. Sygnalizuje wyszukiwarkom, że zasób został przeniesiony na stałe na nowy adres URL, przenosząc zgromadzoną wartość linku oryginalnej strony (zwaną również „link juice”) do miejsca docelowego. Użyj tego, gdy na stałe zmieniasz nazwy adresów URL, konsolidujesz zduplikowaną zawartość lub migrujesz do nowej domeny.
#### Przekierowanie tymczasowe 302
Przekierowanie 302 mówi przeglądarkom i crawlerom, że przeniesienie jest tymczasowe i oryginalny adres URL zostanie ostatecznie przywrócony. Ponieważ wyszukiwarki interpretują to jako przejściowe, nie przenoszą wartości linku na docelowy adres URL. Użyj tego do testowania A/B, tymczasowych stron konserwacji lub krótkoterminowych przekierowań promocyjnych.
#### Przekierowanie tymczasowe 307
Przekierowanie 307 zachowuje się podobnie do 302, ale z jedną krytyczną różnicą: wyraźnie zachowuje oryginalną metodę żądania HTTP. Jeśli klient wysyła żądanie POST na adres URL, który zwraca 307, klient musi powtórzyć żądanie POST na nowy adres URL zamiast domyślnie przechodzić na GET. Jest to ważne dla punktów końcowych API i przesyłania formularzy.
#### Przekierowanie permanentne 308
Przekierowanie 308 jest permanentnym odpowiednikiem 307 — sygnalizuje permanentne przeniesienie, jednocześnie zachowując metodę żądania HTTP. Jest mniej powszechnie używane niż 301, ale cenne w środowiskach intensywnie korzystających z API.
2. Wymagania wstępne: dostęp do VPS przez SSH
Aby skonfigurować przekierowania Nginx, potrzebujesz dostępu do wiersza poleceń na serwerze. Jeśli uruchamiasz środowisko VPS Hosting oparte na Linuksie, oznacza to połączenie przez SSH.
Krok 1: Otwórz terminal i połącz się
Na Linuksie lub macOS otwórz terminal. Na Windows użyj klienta takiego jak PuTTY lub wbudowanego Windows Terminal z obsługą OpenSSH.
ssh username@your_server_ipZastąp username swoim rzeczywistym użytkownikiem systemowym (np. root lub użytkownikiem z uprawnieniami sudo) i your_server_ip publicznym adresem IP Twojego VPS.
Przykład:
ssh admin@203.0.113.45Po połączeniu potwierdź, że Nginx jest zainstalowany i uruchomiony:
sudo systemctl status nginxPowinieneś zobaczyć dane wyjściowe wskazujące, że usługa jest active (running). Jeśli Nginx nie jest jeszcze zainstalowany, możesz go zainstalować za pomocą:
# On Ubuntu/Debian
sudo apt update && sudo apt install nginx -y
# On CentOS/RHEL/AlmaLinux
sudo dnf install nginx -y3. Lokalizowanie i zrozumienie plików konfiguracyjnych Nginx
Nginx używa hierarchicznej struktury konfiguracji. Zrozumienie, gdzie znajdują się pliki, jest niezbędne przed wprowadzeniem jakichkolwiek zmian.
Domyślne ścieżki konfiguracji
| Ścieżka | Cel |
|---|---|
/etc/nginx/nginx.conf | Główny plik konfiguracyjny Nginx |
/etc/nginx/sites-available/ | Dostępne konfiguracje hostów wirtualnych |
/etc/nginx/sites-enabled/ | Aktywne konfiguracje połączone symbolami |
/etc/nginx/conf.d/ | Dodatkowe pliki konfiguracyjne (styl CentOS/RHEL) |
W systemach Ubuntu/Debian zalecanym podejściem jest utworzenie poszczególnych plików konfiguracyjnych w /etc/nginx/sites-available/ a następnie ich włączenie poprzez utworzenie linków symbolicznych w /etc/nginx/sites-enabled/.
W systemach CentOS/RHEL/AlmaLinux konfiguracje zwykle znajdują się w /etc/nginx/conf.d/.
Otwieranie pliku konfiguracyjnego
Aby edytować konfigurację dla określonej domeny:
sudo nano /etc/nginx/sites-available/example.comJeśli plik jeszcze nie istnieje, to polecenie go utworzy. Możesz również użyć vim lub dowolnego innego preferowanego edytora tekstu.
4. Konfigurowanie przekierowań w Nginx
Nginx obsługuje przekierowania głównie za pomocą dwóch dyrektyw: return i rewrite. Dyrektywa return jest prostsza, szybsza i zalecana dla większości scenariuszy przekierowań. Dyrektywa rewrite oferuje większą moc dla złożonych przekierowań opartych na wzorcach.
Metoda 1: Użycie dyrektywy return (zalecane)
Dyrektywa return zatrzymuje przetwarzanie i natychmiast zwraca określony kod stanu HTTP i adres URL do klienta. Jest to najefektywniejsze podejście do prostych przekierowań.
#### Konfiguracja przekierowania permanentnego 301 (pojedynczy adres URL)
server {
listen 80;
server_name example.com www.example.com;
location /old-page {
return 301 https://example.com/new-page;
}
}W tej konfiguracji każde żądanie do http://example.com/old-page zostanie na stałe przekierowane do https://example.com/new-page. Wyszukiwarki zaktualizują swoje indeksy, aby odzwierciedlić nowy adres URL i przesłać wartość linku odpowiednio.
#### Konfiguracja przekierowania tymczasowego 302
server {
listen 80;
server_name example.com;
# Temporary redirect during maintenance
location /promo-page {
return 302 https://example.com/temporary-landing;
}
}Ta konfiguracja tymczasowo przekierowuje odwiedzających z /promo-page do /temporary-landing bez wpływu na sygnały SEO oryginalnego adresu URL.
#### Przekierowanie całej domeny (bez www na www)
Bardzo powszechnym przypadkiem użycia jest wymuszenie domeny kanonicznej — na przykład przekierowanie całego ruchu http://example.com do https://www.example.com:
server {
listen 80;
server_name example.com;
return 301 https://www.example.com$request_uri;
}
server {
listen 443 ssl;
server_name www.example.com;
# SSL configuration here
# ...
}Zmienna $request_uri zachowuje oryginalną ścieżkę i ciąg zapytania, więc http://example.com/blog/post-1?ref=newsletter prawidłowo przekierowuje do https://www.example.com/blog/post-1?ref=newsletter.
#### Przekierowanie HTTP na HTTPS (wymuszenie SSL)
Wymuszenie HTTPS jest najlepszą praktyką bezpieczeństwa i potwierdzonym sygnałem rankingowym Google. Po zainstalowaniu certyfikatu SSL na serwerze skonfiguruj przekierowanie w następujący sposób:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
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;
# Your site configuration continues here
root /var/www/example.com/html;
index index.html index.php;
}Ta konfiguracja przechwytuje cały ruch HTTP na porcie 80 i wydaje przekierowanie 301 do równoważnika HTTPS, zapewniając, że wszyscy odwiedzający i crawlery używają bezpiecznej wersji Twojej witryny.
#### Przekierowanie całej starej domeny do nowej domeny
Podczas migracji witryny do zupełnie nowej domeny użyj następującego wzorca:
server {
listen 80;
listen 443 ssl;
server_name old-domain.com www.old-domain.com;
ssl_certificate /etc/letsencrypt/live/old-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/old-domain.com/privkey.pem;
return 301 https://new-domain.com$request_uri;
}To zachowuje pełną ścieżkę adresu URL podczas migracji domeny, co jest krytyczne dla utrzymania Twoich rankingów SEO. Jeśli chcesz zarejestrować nową domenę dla swojego projektu, AlexHost oferuje niedrogie usługi rejestracji domen.
Metoda 2: Użycie dyrektywy rewrite (przekierowania oparte na wzorcach)
Dyrektywa rewrite używa wyrażeń regularnych do dopasowania i transformacji adresów URL. Jest bardziej potężna, ale również bardziej zasobochłonna niż return. Użyj jej, gdy musisz przekierować wiele wzorców adresów URL za pomocą jednej reguły.
#### Podstawowa składnia rewrite
rewrite regex replacement [flag];Flagi:
last— Zatrzymuje przetwarzanie bieżących dyrektywrewritei rozpoczyna nowe wyszukiwanie lokalizacjibreak— Zatrzymuje przetwarzanie dyrektyw rewrite w bieżącym blokuredirect— Zwraca tymczasowe przekierowanie 302permanent— Zwraca permanentne przekierowanie 301
#### Przekierowanie adresów URL ze wzorcem
Załóżmy, że przeprojektujesz swój blog i musisz przekierować wszystkie adresy URL z /blog/YYYY/MM/post-slug do /articles/post-slug:
server {
listen 80;
server_name example.com;
rewrite ^/blog/[0-9]{4}/[0-9]{2}/(.*)$ /articles/$1 permanent;
}Ta pojedyncza reguła obsługuje całą restrukturyzację adresów URL bloga, przechwytując slug posta i wstawiając go do nowego wzorca adresu URL.
#### Przekierowanie wielu określonych adresów URL
Dla małej liczby określonych zmian adresów URL, użycie wielu dyrektyw return w oddzielnych blokach location jest czystsze i bardziej wydajne:
server {
listen 80;
server_name example.com;
location = /about-us {
return 301 /about;
}
location = /services/web-design {
return 301 /services/web-development;
}
location = /contact-form {
return 301 /contact;
}
}Modyfikator = w location wykonuje dokładne dopasowanie, które jest najszybszym typem dopasowania w Nginx.
Metoda 3: Przekierowanie na podstawie ciągów zapytań
Nginx nie dopasowuje natywnie ciągów zapytań w blokach location, ale możesz użyć zmiennej $arg_ lub dyrektyw if do przekierowań opartych na ciągach zapytań:
server {
listen 80;
server_name example.com;
location /page {
if ($arg_id = "123") {
return 301 /new-page-123;
}
if ($arg_id = "456") {
return 301 /new-page-456;
}
}
}> Uwaga: Chociaż dyrektywy if działają w prostych przypadkach, mogą powodować nieoczekiwane zachowanie w złożonych konfiguracjach. Społeczność Nginx często odnosi się do tego jako do problemu „if is evil”. Używaj ostrożnie i dokładnie testuj.
5. Zaawansowane scenariusze przekierowań
Przekierowanie podkatalogu do innej domeny
server {
listen 80;
server_name example.com;
location /shop/ {
return 301 https://shop.example.com$request_uri;
}
}Usuwanie ukośników końcowych
Niespójne ukośniki końcowe mogą powodować problemy z duplikowaniem zawartości. Aby kanonicalizować adresy URL poprzez usunięcie ukośników końcowych:
server {
listen 80;
server_name example.com;
rewrite ^/(.*)/$ /$1 permanent;
}Dodawanie ukośników końcowych do adresów URL katalogów
Odwrotnie, jeśli Twój CMS lub aplikacja wymaga ukośników końcowych:
server {
listen 80;
server_name example.com;
location ~ ^(/[^.]*[^/])$ {
return 301 $1/;
}
}Przekierowania oparte na lokalizacji geograficznej przy użyciu GeoIP
W przypadku witryn obsługujących wiele regionów możesz przekierować użytkowników na podstawie ich lokalizacji geograficznej, używając ngx_http_geoip_module:
geoip_country /usr/share/GeoIP/GeoIP.dat;
server {
listen 80;
server_name example.com;
if ($geoip_country_code = "DE") {
return 302 https://de.example.com$request_uri;
}
if ($geoip_country_code = "FR") {
return 302 https://fr.example.com$request_uri;
}
}6. Testowanie konfiguracji Nginx
Nigdy nie stosuj zmian na serwerze produkcyjnym bez wcześniejszego testowania. Błąd składni w konfiguracji Nginx może wyłączyć całą Twoją witrynę.
Krok 1: Weryfikacja składni konfiguracji
sudo nginx -tOczekiwane dane wyjściowe dla prawidłowej konfiguracji:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successfulJeśli zobaczysz błędy, Nginx zgłosi konkretny plik i numer linii, w którym problem został wykryty, ułatwiając debugowanie.
Krok 2: Przeładuj Nginx, aby zastosować zmiany
Po pomyślnym przejściu testu konfiguracji, przeładuj Nginx łagodnie (bez przerywania aktywnych połączeń):
sudo systemctl reload nginxAlternatywnie, w przypadku pełnego ponownego uruchomienia (które krótko przerywa aktywne połączenia):
sudo systemctl restart nginxW przypadku większości zmian przekierowań, reload jest wystarczający i preferowany.
7. Weryfikacja prawidłowego działania przekierowań
Po zastosowaniu konfiguracji, zweryfikuj, że przekierowania zachowują się dokładnie tak, jak zamierzono, zanim uznacie zadanie za ukończone.
Metoda 1: Testowanie w przeglądarce
Otwórz przeglądarkę i przejdź do starego adresu URL. Obserwuj, czy jesteś prawidłowo przekierowany do nowego miejsca docelowego. Aby uzyskać więcej szczegółów, otwórz Narzędzia programisty (F12), przejdź do karty Sieć i przeładuj stronę. Zobaczysz pełny łańcuch przekierowań, w tym kody stanu zwrócone na każdym etapie.
Metoda 2: Użycie curl z wiersza poleceń
Polecenie curl jest najniezawodniejszym sposobem testowania przekierowań bez ingerencji buforowania przeglądarki:
curl -I http://example.com/old-pageFlaga -I pobiera tylko nagłówki odpowiedzi HTTP. Poszukaj nagłówka Location i kodu stanu w odpowiedzi:
HTTP/1.1 301 Moved Permanently
Server: nginx/1.24.0
Date: Mon, 01 Jan 2024 12:00:00 GMT
Content-Type: text/html
Location: https://example.com/new-page
Connection: keep-aliveAby automatycznie śledzić cały łańcuch przekierowań:
curl -IL http://example.com/old-pageFlaga -L instruuje curl aby śledzić przekierowania, a w połączeniu z -I, pokazuje nagłówki na każdym etapie łańcucha.
Metoda 3: Narzędzia do sprawdzania przekierowań online
Kilka bezpłatnych narzędzi online może wizualizować Twoje łańcuchy przekierowań i identyfikować problemy, takie jak pętle przekierowań lub nadmierna liczba przeskoków:
- Redirect Checker (redirect-checker.org)
- httpstatus.io
- Screaming Frog SEO Spider (aplikacja desktopowa, bezpłatna do 500 adresów URL)
Sprawdzanie pętli przekierowań
Pętla przekierowania występuje, gdy adres URL A przekierowuje do adresu URL B, który przekierowuje z powrotem do adresu URL A (lub przez dłuższy łańcuch, który ostatecznie wraca do pętli). Powoduje to, że przeglądarki wyświetlają błąd, taki jak *„ERR_TOO_MANY_REDIRECTS”*.
Aby wykryć pętle za pomocą curl:
curl -IL --max-redirs 10 http://example.com/old-pageJeśli curl osiągnie maksymalny limit przekierowań, masz pętlę. Dokładnie przejrzyj konfigurację, aby upewnić się, że nie istnieją żadne ścieżki przekierowań kołowych.
8. Typowe błędy przekierowań i jak ich unikać
Błąd 1: Użycie 302 zamiast 301
To jest najczęstszy błąd SEO z przekierowaniami. Jeśli zmiana adresu URL jest permanentna, zawsze używaj 301. Przypadkowe użycie 302 oznacza, że wyszukiwarki nie przeniosą wartości linku i będą nadal indeksować stary adres URL.
Błąd 2: Łańcuchy przekierowań
Unikaj niepotrzebnego łańcuchowania przekierowań (np. A → B → C → D). Każdy dodatkowy przeskok dodaje opóźnienie i zmniejsza wartość SEO przesyłaną przez łańcuch. Regularnie audytuj swoje przekierowania i aktualizuj je, aby wskazywały bezpośrednio na ostateczne miejsce docelowe.
Błąd 3: Nieprezerowywanie ciągów zapytań
Podczas przekierowywania całych domen lub katalogów, zawsze dołącz $request_uri lub $query_string do celu przekierowania, aby uniknąć usunięcia ważnych parametrów adresu URL.
Nieprawidłowe:
return 301 https://new-domain.com;Prawidłowe:
return 301 https://new-domain.com$request_uri;Błąd 4: Zapomnienie obsługi zarówno HTTP, jak i HTTPS
Jeśli Twoja witryna obsługuje zarówno HTTP, jak i HTTPS, upewnij się, że reguły przekierowań uwzględniają oba protokoły, w przeciwnym razie możesz skończyć z niespójnym zachowaniem.
Błąd 5: Nieprzetestowanie po zmianach
Zawsze uruchom sudo nginx -t przed przeładowaniem i zawsze zweryfikuj przekierowania za pomocą curl po zastosowaniu zmian. Kilka sekund testowania może zapobiec godzinom rozwiązywania problemów.
