Настройка временного и постоянного редиректа в Nginx

HTTP-перенаправление (или редирект) – это способ направить один домен или адрес на другой. Существует несколько видов перенаправления, каждый из которых по-разному воспринимается клиентским браузером. Самые распространённые виды – это временный и постоянный редирект.

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

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

Чтобы создать временный редирект в Nginx, добавьте в виртуальный хост (блок server) такую строку:

rewrite ^/oldlocation$ http://www.newdomain.com/newlocation redirect;

Чтобы создать постоянный редирект, нужно ввести:

rewrite ^/oldlocation$ http://www.newdomain.com/newlocation permanent;

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

Требования

  • Настроенный сервер.
  • Установленный веб-сервер Nginx.
  • Виртуальный хост (эти руководства помогут создать виртуальный хост в Ubuntu, CentOS и Debian).

Простая настройка редиректа

Чтобы настроить простой редирект одной страницы в Nginx, можно использовать директиву rewrite, которая доступна по умолчанию. Директиве нужно иметь минимум два аргумента: старый URL-адрес и новый URL-адрес. С её помощью можно настроить как временное, так и постоянное перенаправление.

Чтобы настроить простое временное перенаправление, добавьте следующие строки в конфигурации сервера:

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

Теперь браузер будет направлять все запросы к www.domain1.com на домен www.domain2.com. Однако такое решение работает только с одностраничными сайтами.

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

Читайте также: Использование Grep и регулярных выражений для поиска текстовых шаблонов в Linux

Директива 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 (/etc/nginx/sites-available/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.

Примечание: После изменения виртуального хоста нужно перезапустить Nginx, чтобы обновить настройки:

systemctl restart nginx

Пример 2: перенаправление страницы

В некоторых ситуациях возникает необходимость изменить название уже опубликованной страницы. Если вы просто измените название (без настройки редиректа), при запросе исходного URL-адреса страницы будет возникать ошибка 404 Not Found. Тогда пользователь, который добавил эту страницу в закладки, не сможет найти её, поскольку он использует устаревшую ссылку. Редирект позволяет устранить эту проблему.

Предположим, на вашем сайте есть две отдельные страницы для товаров и услуг, products.html и services.html соответственно, и вы решили объединить эти страницы в одну, offers.html. Чтобы не потерять трафик, нужно настроить редирект products.html и services.html на offers.html.

К примеру, настройки сайта выглядят так:

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

Чтобы настроить редирект двух страниц, используйте две директивы rewrite.

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

Директива rewrite принимает исходный адрес страницы, которую нужно перенаправить, а затем адрес новой страницы. Опция permanent обеспечит постоянный редирект. Вы можете использовать неограниченное количество директив rewrite в виртуальном хосте, чтобы перенаправить трафик на новые страницы сайта.

Заключение

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

Редирект HTTP применяется также для обеспечения SSL-шифрования трафика (редирект http на https) и добавления префикса www к домену сайта.

Читайте также:

Tags: ,

Добавить комментарий