Редирект домена с www на без www на Nginx в Ubuntu 14.04

Когда сайт или приложение запущено на домене, часто возникает необходимость позволить пользователям открывать его при помощи простого домена и поддомена www. То есть, пользователи должны иметь возможность посетить домен и с префиксом www, и без него (например: example.com или www.example.com), и при этом получить доступ к одному и тому же контенту. Существует множество способов решения этой проблемы. Лучше всего заранее определиться, какой домен вам подходит больше (с префиксом или без), а затем настроить переадресацию второго домена на основной. Такой редирект называется постоянным (Permanent Redirect), или 301. Его настройки содержатся в конфигурациях DNS и веб-сервера.

В данном руководстве показано, как настроить редирект URL-а с префиксом www на URL без префикса на веб-сервере Nginx в системе CentOS 7 (например, с www.example.com на example.com).

Примечание: Аналогичную статью для CentOS 7 можно найти по этой ссылке. Чтобы настроить редирект на веб-сервере Apache в Ubuntu 14.04, читайте эту статью.

Требования

Для выполнения руководства необходимы права суперпользователя (sudo или root). Подробнее об этих правах можно узнать в статье «Начальная настройка сервера Ubuntu 14.04».

Кроме того, нужно предварительно установить Nginx. Полезные инструкции по установке и настройке этого веб-сервера можно найти в специальном разделе нашего сайта.

Также нужно иметь возможность добавлять DNS-записи.

 Настройка DNS-записи

Чтобы настроить редирект с www.example.com на example.com (или наоборот), нужно создать запись для каждого имени.

Откройте панель управления DNS.

Если записи домена (также называется зоной) на данный момент не существует, создайте её сейчас. В hostname укажите доменное имя (к примеру, example.com), в поле IP address нужно указать внешний IP-адрес сервера Nginx. Некоторые системы создают запись A, которая указывает на заданный IP-адрес, автоматически, а некоторые требуют создавать такие записи вручную.

Затем создайте еще одну запись А, на этот раз для адреса с префиксом www, указав тот же IP-адрес.

Примечание: Такой редирект работает и с записями CNAME, поскольку запись А канонического имени относится к IP-адресу веб-сервера Nginx.

Теперь сервер доступен по двум доменам: с префиксом www и без него. Приступайте к настройке редиректа.

Настройка редиректа Nginx

Чтобы настроить редирект 301 в Nginx, нужно добавить новый блок server, указывающий на исходный блок.

Откройте конфигурации блока server в редакторе. Добавьте новый конфигурационный файл в каталог Nginx:

sudo vi /etc/nginx/sites-enabled/default

Исходный блок server должен быть уже определён. Следуйте инструкциям одного из следующих разделов в зависимости от направления редиректа.

1: Редирект с www на без www

Чтобы настроить редирект с адреса с префиксом www на простой домен без префикса, используйте конфигурации:

New Server Block — www to non-www
server {
listen 80;
server_name www.example.com;
return 301 $scheme://example.com$request_uri;
}

Сохраните и закройте файл.

Сохраните и закройте файл. Теперь Nginx будет перенаправлять запросы с www.example.com на адрес example.com. Обратите внимание: адрес без префикса должен иметь отдельный блок  server.

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

sudo service nginx restart

Примечание: при использовании HTTPS директива listen должна слушать порт 443, а не 80.

Затем используйте команду curl, чтобы убедиться, что домен без префикса переадресован на домен с www:

curl -I http://www.example.com

На экране должно появиться сообщение, подтверждающее редирект 301:

Output:
HTTP/1.1 301 Moved Permanently
Server: nginx/1.4.6 (Ubuntu)
Date: Mon, 04 May 2015 18:20:19 GMT
Content-Type: text/html
Content-Length: 193
Connection: keep-alive
Location: http://example.com/

Обязательно проверьте редирект при помощи браузера.

2: Редирект без www на www

Чтобы настроить редирект с простого домена на домен с префиксом www, добавьте такой блок server.

New Server Block — non-www to www
server {
listen 80;
server_name example.com;
return 301 $scheme://www.example.com$request_uri;
}

Сохраните и закройте файл. Теперь Nginx перенаправляет запросы с простого домена на домен с префиксом. Обратите внимание: для домена с www необходим отдельный блок server.

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

sudo service nginx restart

Примечание: Опять же, при использовании HTTPS директива listen должна слушать порт 443, а не 80.

Затем используйте команду curl, чтобы убедиться, что домен без префикса переадресован на домен с www:

curl -I http://example.com

После этого на экране появится сообщение, подтверждающее успешную настройку постоянного редиректа:

Output:
HTTP/1.1 301 Moved Permanently
Server: nginx/1.4.6 (Ubuntu)
Date: Mon, 04 May 2015 18:20:19 GMT
Content-Type: text/html
Content-Length: 193
Connection: keep-alive
Location: http://www.example.com/

Не забудьте протестировать редирект при помощи браузера.

Заключение

Постоянный редирект (301) на Nginx настроен должным образом. Теперь сайт доступен по домену с префиксом www и по простому домену без префикса!

Tags: , , ,

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