NGINX часто стоит как веб-сервер и reverse proxy. Редиректы – одна из базовых задач: смена URL, HTTPS, слияние зеркал, переезд на новый домен. Ниже рабочие схемы с return и regex, плюс типичные ошибки.
301 и 302: что выбрать
301 – постоянный перенос. Браузеры и поисковики «запоминают» новый адрес. Подходит для смены структуры сайта, канонизации www/HTTPS, переезда домена.
302 (и 307) – временно. Контент «сейчас» здесь, но исходный URL ещё в игре. Для A/B, обслуживания, коротких акций. Для SEO-канона почти всегда нужен 301, не 302.
В NGINX удобнее писать return CODE URL; в server или location – меньше сюрпризов, чем у rewrite ... redirect/permanent в сложных цепочках.
Примеры конфигурации
1. Один URL на другой
server {
...
location = /oldpage {
return 301 https://example.com/newpage;
}
...
}
location = – точное совпадение. Для префикса без regex достаточно location /oldpage, но следите, чтобы не зацепить лишние пути.
2. www на без www
server {
server_name www.example.com;
return 301 $scheme://example.com$request_uri;
}
$request_uri сохраняет путь и query string. Отдельный server для www проще и надёжнее, чем путаница if внутри общего блока.
3. Весь домен на новый
server {
server_name oldexample.com;
return 301 $scheme://newexample.com$request_uri;
}
При полном переезде на HTTPS целевой URL лучше сразу с https://, чтобы не ловить второй hop.
4. HTTP на HTTPS
server {
listen 80;
server_name example.com www.example.com;
return 301 https://example.com$request_uri;
}
Отдельный server на 80 только для редиректа – чистая схема. Сертификат и контент – в server с listen 443 ssl.
Редирект с regex
Когда путь нужно «переложить» по шаблону:
server {
...
location ~ ^/oldprefix/(.*)$ {
return 301 https://example.com/newprefix/$1;
}
...
}
~ – case-sensitive regex, ~* – без учёта регистра. Группы (...) попадают в $1, $2… Не злоупотребляйте regex на горячих location: префиксные location быстрее.
Практика без боли
- Всегда
nginx -tперед reload. Синтаксическая ошибка на проде без теста = даунтайм. - Проверяйте циклы. A на B и обратно ломает браузер и краулеры. Смотрите цепочку через
curl -I/curl -IL. - Один hop лучше двух. HTTP+www сразу на HTTPS+apex (финальный URL).
- Не смешивайте лишний
ifс редиректами, если хватает отдельногоserver/location. - После смены схемы обновите sitemap, каноникалы, внутренние ссылки – редирект не отменяет мусорные self-links.
Краткий вывод
Редиректы в NGINX – простой и мощный инструмент для SEO и UX. Базовый набор: 301 для постоянного переноса, отдельный server для HTTPS/www, return + при необходимости regex. Планируйте целевые URL, тестируйте конфиг и цепочки, не оставляйте петли. Тогда переезд и канонизация проходят без сюрпризов для пользователей и поисковиков.
