Сегодня мы погрузимся в одну из самых полезных возможностей Nginx — перенаправления и использование rewrite-правил. С их помощью ты можешь управлять URL-адресами, настраивать редиректы, исправлять ошибки пользователей и упрощать структуру ссылок.
Почему важны перенаправления?
Перенаправления помогают решать множество задач:
- SEO. Предотвращают проблемы с дублированием контента, например, http:// и https://.
- Удобство пользователей. Направляют их на актуальные страницы.
- Оптимизация структуры сайта. Помогают делать URL-адреса короче и понятнее.
Виды перенаправлений в Nginx
- Постоянные редиректы (301): используются, если страница навсегда переместилась на новый адрес.
- Временные редиректы (302): подходят для тестирования или временной замены страниц.
Шаг 1: Простые редиректы
Самый простой способ настроить редирект — использовать директиву return.
Пример: перенаправление с HTTP на HTTPS
Добавь в конфигурацию Nginx:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://example.com$request_uri;
}
- return 301: постоянное перенаправление.
- $request_uri: добавляет исходный путь и параметры запроса.
Теперь все запросы на http://example.com автоматически перенаправляются на https://example.com.
Шаг 2: Перенаправление с www на без www (и наоборот)
Пользователи могут вводить адрес сайта с «www» или без. Давай выберем один вариант и перенаправим пользователей.
С www на без www
server {
listen 80;
server_name www.example.com;
return 301 $scheme://example.com$request_uri;
}
server {
listen 80;
server_name example.com;
# Здесь основная конфигурация сайта
}
С без www на www
server {
listen 80;
server_name example.com;
return 301 $scheme://www.example.com$request_uri;
}
server {
listen 80;
server_name www.example.com;
# Здесь основная конфигурация сайта
}
Шаг 3: Используем rewrite для гибкости
Иногда простой return недостаточен, и нужно менять структуру URL-адресов. В таких случаях на помощь приходит директива rewrite
.
Синтаксис rewrite
rewrite <регулярное выражение> <замена> [флаг];
- <регулярное выражение>: шаблон, который нужно найти.
- <замена>: новый путь.
- [флаг]: поведение правила (например, permanent для 301).
Пример 1: Перенос страницы
Если страница переехала, можно настроить редирект:
server {
location /old-page {
rewrite ^/old-page$ /new-page permanent;
}
}
Теперь все запросы на /old-page будут перенаправлены на /new-page с кодом 301.
Пример 2: Удаляем расширения
Допустим, ты хочешь скрыть расширения .php из URL-адресов:
server {
location / {
rewrite ^/(.*)\.php$ /$1 permanent;
}
}
Запрос на example.com/page.php станет example.com/page.
Шаг 4: Условия if для сложных случаев
Для более сложных сценариев используется директива if.
Пример: редирект на мобильную версию
Если пользователь заходит с мобильного устройства, направим его на поддомен:
server {
set $mobile_redirect 0;
if ($http_user_agent ~* '(Android|iPhone|iPad)') {
set $mobile_redirect 1;
}
if ($mobile_redirect) {
rewrite ^ https://m.example.com$request_uri permanent;
}
}
Шаг 5: Редиректы с использованием карты
Если нужно настроить множество редиректов, можно использовать директиву map.
Пример: массовые редиректы
Создай файл с картой редиректов:
map $uri $new_uri {
/old-page /new-page;
/old-section /new-section;
}
Добавь в конфигурацию:
server {
location / {
if ($new_uri) {
return 301 $new_uri;
}
}
}
Теперь все старые страницы перенаправляются на новые автоматически.
Шаг 6: Обработка ошибок с редиректом
Перенаправления можно использовать для обработки ошибок, например, 404.
Пример: страница «ошибка 404»
server {
error_page 404 /custom-404.html;
location = /custom-404.html {
root /var/www/html;
}
}
Теперь при ошибке 404 пользователи будут видеть красивую страницу с информацией.
Полезные советы
- Используй постоянные редиректы (301) для SEO. Они помогают поисковым системам понять, что страница переместилась.
- Избегай циклических редиректов. Проверяй конфигурацию, чтобы исключить зацикливание.
- Проверяй работу редиректов с помощью curl
- Тестируй правила на staging-сервере, чтобы избежать ошибок в продакшене.
curl -I http://example.com
Задание для самостоятельной практики
- Настрой редирект с HTTP на HTTPS.
- Перенаправь пользователей с www на без www (или наоборот).
- Создай правило для скрытия расширений файлов.
- Настрой карту для массовых редиректов.
- Добавь красивую страницу ошибки 404.
Итоги
Теперь ты знаешь, как использовать перенаправления и rewrite-правила в Nginx. Эти инструменты помогут тебе сделать сайт удобнее, защищённее и более дружелюбным для поисковых систем. В следующей статье мы разберёмся с подключением балансировки нагрузки в Nginx. До встречи! 🚀