Поиск по сайту:

Как создать временную и постоянную переадресацию с помощью Nginx


Введение

Перенаправление HTTP — это способ указать один домен или адрес на другой. Существует несколько различных видов перенаправлений, каждый из которых означает что-то свое для клиентского браузера. Двумя наиболее распространенными типами являются временные перенаправления и постоянные перенаправления.

Временные перенаправления (код ответа 302 Found) полезны, если URL-адрес временно должен обслуживаться из другого места. Например, если вы проводите техническое обслуживание сайта, вы можете использовать временную переадресацию с вашего домена на страницу с пояснениями, чтобы информировать своих посетителей о том, что вы скоро вернетесь.

Постоянные перенаправления (код ответа 301 Moved Permanently), с другой стороны, сообщают браузеру, что он должен полностью забыть старый адрес и больше не пытаться получить к нему доступ. Это полезно, когда ваш контент был окончательно перемещен в новое место, например, когда вы меняете доменные имена.

В этом руководстве будет более подробно объяснено, как реализовать каждый вид перенаправления в Nginx, а также приведены некоторые примеры для конкретных случаев использования.

Предпосылки

Чтобы следовать этому руководству, вам понадобятся:

  • Сервер с Nginx, установленным и настроенным для обслуживания ваших веб-сайтов. Некоторые примеры и инструкции можно найти в руководствах по CentOS.

Краткий обзор решения

В Nginx вы можете выполнить большинство перенаправлений с помощью встроенной директивы rewrite. Эта директива доступна по умолчанию в новой установке Nginx и может использоваться для создания как временных, так и постоянных перенаправлений. В своей простейшей форме он принимает как минимум два аргумента: старый URL-адрес и новый URL-адрес.

Вы можете реализовать временное перенаправление со следующими строками в конфигурации вашего сервера:

server {
    . . .
    server_name www.domain1.com;
    rewrite ^/$ http://www.domain2.com redirect;
    . . .
}

Это перенаправление указывает браузеру направлять все запросы для www.domain1.com на www.domain2.com. Однако это решение работает только для одной страницы, а не для всего сайта. Чтобы перенаправить более одной страницы, вы можете использовать директиву rewrite с регулярными выражениями, чтобы указать целые каталоги, а не только отдельные файлы.

redirect соответствует шаблонам регулярных выражений в скобках. Затем он ссылается на совпадающий текст в месте назначения перенаправления, используя выражение $1, где 1 — первая группа совпадающего текста. В более сложных примерах последующим совпадающим группам последовательно присваиваются номера.

Например, если вы хотите временно перенаправить каждую страницу в пределах www.domain1.com на www.domain2.com, вы можете использовать следующее:

server {
    . . .
    server_name www.domain1.com;
    rewrite ^/(.*)$ http://www.domain2.com/$1 redirect;
    . . .
}

server {
    . . .
    server_name www.domain2.com;
    . . .
}

По умолчанию директива rewrite устанавливает временное перенаправление. Если вы хотите создать постоянное перенаправление, вы можете сделать это, заменив redirect на permanent в конце директивы, например:

rewrite ^/$ http://www.domain2.com permanent;
rewrite ^/(.*)$ http://www.domain2.com/$1 permanent;

Перейдем к конкретным примерам.

Пример 1 — Переезд в другой домен

Если вы установили присутствие в Интернете и хотели бы изменить свой домен на новый адрес, лучше не отказываться от своего старого домена. Закладки на ваш сайт и ссылки на ваш сайт, расположенные на других страницах в Интернете, будут разорваны, если ваш контент исчезнет без каких-либо инструкций для браузера о том, как найти его новое местоположение. Изменение доменов без перенаправления приведет к тому, что ваш сайт потеряет трафик от предыдущих посетителей и старых ссылок.

В этом примере мы настроим перенаправление со старого домена с именем domain1.com на новый с именем domain2.com. Здесь мы будем использовать постоянные перенаправления, потому что старый домен будет объявлен устаревшим, и с этого момента весь трафик должен направляться на новый домен.

Предположим, ваш веб-сайт настроен для обслуживания из одного домена с именем domain1.com, уже настроенного в Nginx следующим образом:

server {
    . . .
    server_name domain1.com;
    . . .
}

Мы также предполагаем, что вы уже обслуживаете свою будущую версию веб-сайта по адресу domain2.com:

server {
    . . .
    server_name domain2.com;
    . . .
}

Давайте изменим файл конфигурации блока сервера domain1.com, чтобы добавить постоянное перенаправление на domain2.com:

server {
    . . .
    server_name domain1.com;
    rewrite ^/(.*)$ http://domain2.com/$1 permanent;
    . . .
}

Мы добавили вышеупомянутое перенаправление с помощью директивы rewrite. Регулярное выражение ^/(.*)$ соответствует всему, что следует после / в URL-адресе. Например, http://domain1.com/index.html будет перенаправлен на http://domain2.com/index.html< /знак>. Чтобы добиться постоянного перенаправления, мы просто добавляем permanent после директивы rewrite.

Примечание. Не забудьте проверить свою конфигурацию с помощью nginx -t, а затем перезапустить Nginx после внесения изменений.

Пример 2. Создание постоянного взаимодействия, несмотря на изменение имени отдельной страницы

Иногда необходимо изменить названия отдельных страниц, которые уже были опубликованы и получили трафик на вашем сайте. Изменение только имени приведет к ошибке 404 Not Found для посетителей, пытающихся получить доступ к исходному URL-адресу, но вы можете избежать этого, используя перенаправление. Это гарантирует, что люди, которые добавили ваши старые страницы в закладки или нашли их по устаревшим ссылкам в поисковых системах, по-прежнему попадут на нужную страницу.

Предположим, что на вашем веб-сайте есть две отдельные страницы для товаров и услуг с именами products.html и services.html соответственно. Теперь вы решили заменить эти две страницы одной страницей предложения с именем offers.html. Мы настроим простую переадресацию для products.html и services.html на offers.html.

Мы предполагаем, что ваш сайт настроен следующим образом:

server {
    . . .
    server_name example.com www.example.com;
    . . .
}

Настроить перенаправления так же просто, как использовать две директивы перенаправления.

server {
    . . .
    server_name example.com www.example.com;
    
    rewrite ^/products.html$ /offer.html permanent;
    rewrite ^/services.html$ /offer.html permanent;
    . . .
}

Директива rewrite принимает исходный адрес, который необходимо перенаправить, а также целевой адрес новой страницы. Поскольку изменение здесь не временное, мы также использовали permanent в директиве. Вы можете использовать столько перенаправлений, сколько хотите, чтобы ваши посетители не видели ненужных ошибок 404 Not Found при перемещении содержимого сайта.

Заключение

Теперь у вас есть знания, как перенаправлять запросы в новые местоположения. Обязательно используйте правильный тип перенаправления, так как неправильное использование временных перенаправлений может повредить вашему поисковому рейтингу.

Существует множество других способов использования HTTP-перенаправлений, в том числе принудительное использование безопасных SSL-соединений (т. е. использование https вместо http) и обеспечение того, чтобы все посетители попадали только на www. префикс адреса веб-сайта.

Правильное использование перенаправлений позволит вам использовать свое текущее присутствие в Интернете, а также даст вам возможность изменять структуру вашего сайта по мере необходимости. Если вы хотите узнать больше о способах перенаправления посетителей, у Nginx есть отличная документация по этому вопросу в официальном сообщении блога о создании перенаправлений.