15%

Zaoszczędź 15% na wszystkich usługach hostingowych

Sprawdź swoje umiejętności i zdobądź Rabat na dowolny plan hostingowy

Użyj kodu:

Skills
Rozpocznij
01.11.2024

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 przekierowaniaKod stanuPrzypadek użyciaPrzekazuje wartość linku?
Przekierowanie permanentne301Zasób został przeniesiony na stałe✅ Tak
Przekierowanie tymczasowe302Zasób tymczasowo niedostępny❌ Nie
Przekierowanie tymczasowe (metoda bezpieczna)307Tymczasowe przeniesienie, zachowuje metodę HTTP❌ Nie
Przekierowanie permanentne (metoda bezpieczna)308Permanentne 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_ip

Zastą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.45

Po połączeniu potwierdź, że Nginx jest zainstalowany i uruchomiony:

sudo systemctl status nginx

Powinieneś 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 -y

3. 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żkaCel
/etc/nginx/nginx.confGłó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.com

Jeś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 dyrektyw rewrite i rozpoczyna nowe wyszukiwanie lokalizacji
  • break — Zatrzymuje przetwarzanie dyrektyw rewrite w bieżącym bloku
  • redirect — Zwraca tymczasowe przekierowanie 302
  • permanent — 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 -t

Oczekiwane 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 successful

Jeś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 nginx

Alternatywnie, w przypadku pełnego ponownego uruchomienia (które krótko przerywa aktywne połączenia):

sudo systemctl restart nginx

W 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-page

Flaga -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-alive

Aby automatycznie śledzić cały łańcuch przekierowań:

curl -IL http://example.com/old-page

Flaga -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-page

Jeś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.

15%

Zaoszczędź 15% na wszystkich usługach hostingowych

Sprawdź swoje umiejętności i zdobądź Rabat na dowolny plan hostingowy

Użyj kodu:

Skills
Rozpocznij