Содержание

Редиректы в NGINX

NGINX является одним из самых популярных веб-серверов в мире, известным своей производительностью и гибкостью. Одной из ключевых функций NGINX является возможность настройки редиректов, то есть автоматического перенаправления пользователей с одного URL на другой. Это может быть полезно во многих ситуациях, например, при переезде сайта на новый домен или при объединении нескольких страниц в одну.

Читайте также: Apache настройка редиректов (переадресация)

Основы Редиректов в NGINX

  1. 301 (Постоянный Редирект): Этот тип редиректа используется, когда страница была перемещена на новый URL навсегда. Он сообщает поисковым системам, что старый адрес больше не действителен, и помогает сохранить SEO-позиции.
  2. 302 (Временный Редирект): Временный редирект говорит о том, что перемещение на новый URL является временным, и старый URL вскоре снова станет активным.

Читайте также: Коды состояния HTTP

Настройка Редиректов в NGINX

Настройка редиректов в NGINX осуществляется путем редактирования файла конфигурации сервера. Вот примеры наиболее распространенных редиректов:

  1. Редирект с www на без-www:
       ```
       server {
           server_name www.example.com;
           return 301 $scheme://example.com$request_uri;
       }
       ```
  2. Редирект со старого домена на новый:
       ```
       server {
           server_name olddomain.com;
           return 301 $scheme://newdomain.com$request_uri;
       }
       ```
  3. Редирект (перенаправление) с HTTP на HTTPS в Nginx делается так:
    server {
     
    server_name example.com;
    listen 80;
     
    if ($scheme = http) {
    rewrite ^ https://$server_name$request_uri? permanent;
     }
    }

    или так

    server {
        listen 80;
        server_name example.com;
        return 301 https://example.com$request_uri;
    }
  4. Часто требуется перенаправлять запросы с одной страницы сайта на другую. Приведем примеры, как это сделать с помощью return и rewrite.
    server {
            ...
            rewrite ^/page1$ /page2 permanent;
    }
    server {
            ...
            location = /page1 {
                return 301 /page2;
            }
    }

    Более сложный случай переправления множества страниц с использованием переменной в локейшене

    На входе мы имеем ссылку, вида
    https://example.com/game/%GAME%
    а нужно получить
    https://www.example.com/ethereum/slots/%GAME%/play
        location ~ ^/game/(.+)/?$ {
            return 301 $scheme://www.example.com/ethereum/slots/$1/play;
        }

Что использовать return или rewrite?

В NGINX для настройки переадресации можно использовать как директивы return, так и rewrite. Выбор между ними зависит от конкретных потребностей и сценария использования.

Когда использовать return и rewrite:

Использование rewrite

Директива rewrite используется для изменения части или всего запроса URI на лету, и она может быть более гибкой, чем return. Однако она также может быть более сложной в настройке и может потребовать больше ресурсов при обработке запросов.

Изменение пути в URL:

rewrite ^/oldpath/(.*)$ /newpath/$1 permanent;

Условные перенаправления:

if ($http_user_agent ~ MSIE) {
    rewrite ^(.*)$ /msie/$1 break;
}

Редиректы NGINX для адресов с параметрами через MAP

Предположим, нам нужно сделать редиректы NGINX по такой схеме:

example.com/tags?tag=cool => example.com/something

Исходный адрес с параметрами нужно перенаправлять на новый адрес. Название и значение параметра в новом адресе не используется. Обычный редирект для такой задачи не будет работать. Вариант решения — использовать директиву MAP.

Тестирование и Отладка

После внесения изменений в файл конфигурации, необходимо перезапустить NGINX, чтобы активировать новые правила редиректа. Затем следует тщательно протестировать редиректы, чтобы убедиться, что они работают корректно.

  1. Проверяйте конфигурацию: Перед перезапуском NGINX используйте команду nginx -t для проверки корректности конфигурационного файла.
  2. Избегайте цепочек редиректов: Слишком много последовательных редиректов могут замедлить загрузку сайта и негативно сказаться на SEO. Удобно пользоваться утилитой curl с ключами -I (показать только заголовки), -L (следовать за редиректом):
curl -I -L https://example.com

Заключение

Редиректы являются важным инструментом в арсенале веб-мастера, и NGINX предоставляет простые и мощные средства для их реализации. Правильное использование редиректов может значительно улучшить пользовательский опыт и SEO сайта.