Как создать временную и постоянную переадресацию с помощью 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 есть отличная документация по этому вопросу в официальном сообщении блога о создании перенаправлений.