Редиректы в NGINX

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

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

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

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

Настройка редиректов в 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;
        }

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

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

  • Используйте return для простых переадресаций, таких как перенаправления 301/302, когда вам нужно быстро перенаправить запрос на другой URL без дополнительной логики. В большинстве случаев return будет оптимальным выбором.
  • Используйте rewrite для более сложных или условных переадресаций, где нужно изменить часть URI или выполнить перенаправление на основе определенных условий.

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

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

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

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

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

Предположим, нам нужно сделать редиректы 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 сайта.

PQ VPS сервера в 28+ странах.