Налаштування перенаправлень за допомогою Nginx на VPS: Повний посібник конфігурації
Перенаправлення є фундаментальним компонентом будь-якої добре керованої веб-інфраструктури. Незалежно від того, чи ви реструктуризуєте свій веб-сайт, мігруєте на новий домен або тимчасово маршрутизуєте трафік під час обслуговування, правильно налаштовані перенаправлення захищають ваші рейтинги SEO, зберігають цінність посилань і гарантують, що відвідувачі завжди потрапляють на правильну сторінку. Nginx — один з найпотужніших і найширше використовуваних веб-серверів у світі — робить впровадження перенаправлень як гнучким, так і ефективним.
Цей комплексний посібник проведе вас через все, що вам потрібно знати про налаштування HTTP перенаправлень за допомогою Nginx на VPS Hosting середовищі, від розуміння типів перенаправлень до тестування та перевірки вашої установки в продакшені.
1. Розуміння HTTP перенаправлень
Перш ніж торкатися одного файлу конфігурації, важливо розуміти, що насправді роблять перенаправлення і чому вибір правильного типу має значення — особливо для SEO.
HTTP перенаправлення — це відповідь сервера, яка інструктує клієнта (зазвичай веб-браузер або краулер) перейти на іншу URL-адресу, ніж та, яка була спочатку запрошена. Сервер передає цю інструкцію за допомогою 3xx HTTP статус-коду, і конкретний код, який ви виберете, має значні наслідки як для користувацького досвіду, так і для поведінки пошукових систем.
Найпоширеніші типи перенаправлень
| Тип перенаправлення | Статус-код | Варіант використання | Передає цінність посилання? |
|---|---|---|---|
| Постійне перенаправлення | 301 | Ресурс постійно переміщений | ✅ Так |
| Тимчасове перенаправлення | 302 | Ресурс тимчасово недоступний | ❌ Ні |
| Тимчасове перенаправлення (метод-безпечне) | 307 | Тимчасовий переміст, зберігає HTTP метод | ❌ Ні |
| Постійне перенаправлення (метод-безпечне) | 308 | Постійний переміст, зберігає HTTP метод | ✅ Так |
#### 301 Постійне перенаправлення
301 перенаправлення — це найбільш критичний для SEO тип перенаправлення. Він сигналізує пошуковим системам, що ресурс постійно переміщений на нову URL-адресу, передаючи накопичену цінність посилань оригінальної сторінки (також називається «link juice») до пункту призначення. Використовуйте це при постійному перейменуванні URL-адрес, консолідації дублікованого вмісту або міграції на новий домен.
#### 302 Тимчасове перенаправлення
302 перенаправлення повідомляє браузери та краулери, що переміст тимчасовий і оригінальна URL-адреса буде врешті-решт відновлена. Оскільки пошукові системи інтерпретують це як тимчасове, вони не передають цінність посилань на URL-адресу призначення. Використовуйте це для A/B тестування, тимчасових сторінок обслуговування або короткострокових промо-перенаправлень.
#### 307 Тимчасове перенаправлення
307 перенаправлення поводиться подібно до 302, але з однією критичною різницею: воно явно зберігає оригінальний HTTP метод запиту. Якщо клієнт надсилає POST запит на URL-адресу, яка повертає 307, клієнт повинен повторити POST на нову URL-адресу, а не переходити за замовчуванням на GET. Це важливо для API кінцевих точок і надсилання форм.
#### 308 Постійне перенаправлення
308 перенаправлення — це постійний аналог 307 — він сигналізує про постійний переміст, одночасно зберігаючи HTTP метод запиту. Він використовується рідше, ніж 301, але цінний у середовищах, багатих на API.
2. Передумови: доступ до вашого VPS через SSH
Щоб налаштувати перенаправлення Nginx, вам потрібен доступ до командного рядка вашого сервера. Якщо ви запускаєте середовище VPS на основі Linux, це означає підключення через SSH.
Крок 1: Відкрийте свій термінал і підключіться
На Linux або macOS відкрийте свій термінал. На Windows використовуйте клієнт, як-от PuTTY або вбудований Windows Terminal з підтримкою OpenSSH.
ssh username@your_server_ipЗамініть username на вашого фактичного системного користувача (наприклад, root або користувача з правами sudo) і your_server_ip на публічну IP-адресу вашого VPS.
Приклад:
ssh admin@203.0.113.45Після підключення підтвердьте, що Nginx встановлений і запущений:
sudo systemctl status nginxВи повинні побачити вихід, що вказує на те, що служба активна (запущена). Якщо Nginx ще не встановлений, ви можете встановити його за допомогою:
# On Ubuntu/Debian
sudo apt update && sudo apt install nginx -y
# On CentOS/RHEL/AlmaLinux
sudo dnf install nginx -y3. Пошук і розуміння файлів конфігурації Nginx
Nginx використовує ієрархічну структуру конфігурації. Розуміння того, де знаходяться файли, є важливим перед внесенням будь-яких змін.
Шляхи конфігурації за замовчуванням
| Шлях | Призначення |
|---|---|
/etc/nginx/nginx.conf | Основний файл конфігурації Nginx |
/etc/nginx/sites-available/ | Доступні конфігурації віртуальних хостів |
/etc/nginx/sites-enabled/ | Пов’язані активні конфігурації |
/etc/nginx/conf.d/ | Додаткові файли конфігурації (стиль CentOS/RHEL) |
На системах Ubuntu/Debian рекомендований підхід — створити окремі файли конфігурації в /etc/nginx/sites-available/ і потім увімкнути їх, створивши символічні посилання в /etc/nginx/sites-enabled/.
На системах CentOS/RHEL/AlmaLinux конфігурації зазвичай знаходяться в /etc/nginx/conf.d/.
Відкриття файлу конфігурації
Щоб відредагувати конфігурацію для конкретного домену:
sudo nano /etc/nginx/sites-available/example.comЯкщо файл ще не існує, ця команда його створить. Ви також можете використовувати vim або будь-який інший текстовий редактор на ваш вибір.
4. Налаштування перенаправлень у Nginx
Nginx обробляє перенаправлення в основному через дві директиви: return і rewrite. Директива return простіша, швидша і рекомендується для більшості сценаріїв перенаправлення. Директива rewrite пропонує більше можливостей для складних перенаправлень на основі шаблонів.
Метод 1: Використання директиви return (рекомендується)
Директива return припиняє обробку і негайно повертає клієнту вказаний HTTP статус-код і URL-адресу. Це найефективніший підхід для простих перенаправлень.
#### Налаштування 301 постійного перенаправлення (одна URL-адреса)
server {
listen 80;
server_name example.com www.example.com;
location /old-page {
return 301 https://example.com/new-page;
}
}У цій конфігурації будь-який запит на http://example.com/old-page буде постійно перенаправлений на https://example.com/new-page. Пошукові системи оновлять свої індекси, щоб відобразити нову URL-адресу, і передадуть цінність посилання відповідно.
#### Налаштування 302 тимчасового перенаправлення
server {
listen 80;
server_name example.com;
# Temporary redirect during maintenance
location /promo-page {
return 302 https://example.com/temporary-landing;
}
}Ця конфігурація тимчасово перенаправляє відвідувачів з /promo-page на /temporary-landing без впливу на SEO сигнали оригінальної URL-адреси.
#### Перенаправлення всього домену (без WWW на WWW)
Дуже поширеним варіантом використання є впровадження канонічного домену — наприклад, перенаправлення всього трафіку http://example.com на 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
# ...
}Змінна $request_uri зберігає оригінальний шлях і рядок запиту, тому http://example.com/blog/post-1?ref=newsletter правильно перенаправляється на https://www.example.com/blog/post-1?ref=newsletter.
#### Перенаправлення HTTP на HTTPS (впровадження SSL)
Впровадження HTTPS — це найкраща практика безпеки і підтверджений сигнал рейтингу Google. Після встановлення SSL сертифіката на вашому сервері налаштуйте перенаправлення наступним чином:
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;
}Ця конфігурація перехоплює весь HTTP трафік на порту 80 і видає 301 перенаправлення на HTTPS еквівалент, гарантуючи, що всі відвідувачі та краулери використовують безпечну версію вашого сайту.
#### Перенаправлення всього старого домену на новий домен
При міграції вашого веб-сайту на абсолютно новий домен використовуйте наступний шаблон:
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;
}Це зберігає повний шлях URL під час міграції домену, що критично важливо для збереження ваших рейтингів SEO. Якщо вам потрібно зареєструвати новий домен для вашого проекту, AlexHost пропонує доступні послуги реєстрації доменів.
Метод 2: Використання директиви rewrite (перенаправлення на основі шаблонів)
Директива rewrite використовує регулярні вирази для відповідності та трансформації URL-адрес. Вона більш потужна, але також більш ресурсомістка, ніж return. Використовуйте її, коли вам потрібно перенаправити кілька шаблонів URL-адрес за допомогою одного правила.
#### Базовий синтаксис rewrite
rewrite regex replacement [flag];Прапори:
last— Припиняє обробку поточних директивrewriteі починає новий пошук місцезнаходженняbreak— Припиняє обробку директив перезапису в поточному блоціredirect— Повертає 302 тимчасове перенаправленняpermanent— Повертає 301 постійне перенаправлення
#### Перенаправлення URL-адрес за шаблоном
Припустимо, ви реструктуризуєте свій блог і вам потрібно перенаправити всі URL-адреси з /blog/YYYY/MM/post-slug на /articles/post-slug:
server {
listen 80;
server_name example.com;
rewrite ^/blog/[0-9]{4}/[0-9]{2}/(.*)$ /articles/$1 permanent;
}Це одне правило обробляє всю реструктуризацію URL блогу, захоплюючи слаг посту і вставляючи його в новий шаблон URL-адреси.
#### Перенаправлення кількох конкретних URL-адрес
Для невеликої кількості конкретних змін URL-адреси використання кількох директив return у окремих блоках location є чистішим і більш продуктивним:
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;
}
}Модифікатор = у location виконує точне співпадіння, яке є найшвидшим типом співпадіння у Nginx.
Метод 3: Перенаправлення на основі рядків запиту
Nginx не підтримує рідко рядки запиту в блоках location, але ви можете використовувати змінну $arg_ або директиви if для перенаправлень на основі рядків запиту:
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;
}
}
}> Примітка: Хоча директиви if працюють для простих випадків, вони можуть спричинити неочікувану поведінку в складних конфігураціях. Спільнота Nginx часто називає це проблемою «if is evil». Використовуйте з обережністю і ретельно протестуйте.
5. Розширені сценарії перенаправлення
Перенаправлення підкаталогу на інший домен
server {
listen 80;
server_name example.com;
location /shop/ {
return 301 https://shop.example.com$request_uri;
}
}Видалення кінцевих косих ліній
Непослідовні кінцеві косі лінії можуть створити проблеми з дублюванням вмісту. Щоб канонікалізувати URL-адреси, видаливши кінцеві косі лінії:
server {
listen 80;
server_name example.com;
rewrite ^/(.*)/$ /$1 permanent;
}Додавання кінцевих косих ліній до URL-адрес каталогів
І навпаки, якщо ваша CMS або додаток вимагає кінцевих косих ліній:
server {
listen 80;
server_name example.com;
location ~ ^(/[^.]*[^/])$ {
return 301 $1/;
}
}Геолокаційні перенаправлення за допомогою GeoIP
Для веб-сайтів, які обслуговують кілька регіонів, ви можете перенаправити користувачів на основі їх географічного розташування за допомогою 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. Тестування вашої конфігурації Nginx
Ніколи не застосовуйте зміни до продакшн сервера без попереднього тестування. Синтаксична помилка у вашій конфігурації Nginx може вивести весь ваш веб-сайт з ладу.
Крок 1: Перевірте синтаксис конфігурації
sudo nginx -tОчікуваний вихід для дійсної конфігурації:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successfulЯкщо ви побачите помилки, Nginx повідомить про конкретний файл і номер рядка, де була виявлена проблема, що полегшує налагодження.
Крок 2: Перезавантажте Nginx, щоб застосувати зміни
Після того, як тест конфігурації пройде успішно, перезавантажте Nginx м’яко (без розриву активних з’єднань):
sudo systemctl reload nginxКрім того, для повного перезапуску (який коротко перериває активні з’єднання):
sudo systemctl restart nginxДля більшості змін перенаправлення reload достатньо і переважно.
7. Перевірка того, що ваші перенаправлення працюють правильно
Після застосування вашої конфігурації перевірте, що перенаправлення поводяться саме так, як передбачено, перш ніж вважати завдання завершеним.
Метод 1: Тестування в браузері
Відкрийте браузер і перейдіть на стару URL-адресу. Спостерігайте, чи ви правильно перенаправлені на нове місце призначення. Для більш детальної інформації відкрийте Інструменти розробника (F12), перейдіть на вкладку Мережа і перезавантажте сторінку. Ви побачите весь ланцюг перенаправлень, включаючи статус-коди, повернені на кожному кроці.
Метод 2: Використання curl з командного рядка
Команда curl — це найнадійніший спосіб тестування перенаправлень без втручання кешування браузера:
curl -I http://example.com/old-pageПрапор -I отримує лише заголовки HTTP відповіді. Шукайте заголовок Location і статус-код у відповіді:
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Щоб автоматично слідувати всьому ланцюгу перенаправлень:
curl -IL http://example.com/old-pageПрапор -L інструктує curl слідувати перенаправленням, і в поєднанні з -I він показує заголовки на кожному кроці ланцюга.
Метод 3: Онлайн інструменти перевірки перенаправлень
Кілька безплатних онлайн інструментів можуть візуалізувати ваші ланцюги перенаправлень і виявити проблеми, як-от цикли перенаправлень або надмірні переходи перенаправлення:
- Redirect Checker (redirect-checker.org)
- httpstatus.io
- Screaming Frog SEO Spider (настільний додаток, безплатно до 500 URL-адрес)
Перевірка циклів перенаправлення
Цикл перенаправлення виникає, коли URL-адреса A перенаправляється на URL-адресу B, яка перенаправляється назад на URL-адресу A (або через довший ланцюг, який врешті-решт циклюється назад). Це спричиняє появу помилки в браузерах, як-от *«ERR_TOO_MANY_REDIRECTS»*.
Щоб виявити цикли за допомогою curl:
curl -IL --max-redirs 10 http://example.com/old-pageЯкщо curl досягне максимального ліміту перенаправлення, у вас є цикл. Ретельно перегляньте вашу конфігурацію, щоб переконатися, що циклічних шляхів перенаправлення не існує.
