Сегодня мы погрузимся в одну из самых полезных возможностей 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. До встречи! 🚀