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

Как перенаправить www на не-www с помощью Nginx в Ubuntu 14.04


Введение

Многим веб-разработчикам необходимо разрешить своим пользователям доступ к их веб-сайту или приложению как через поддомен www, так и через корневой домен (без www). То есть пользователи должны иметь одинаковый опыт при посещении www.my-website.com и my-website.com. Хотя есть много способов настроить это, наиболее дружественное к SEO решение — выбрать, какой домен вы предпочитаете — субдомен или корневой домен — и заставить веб-сервер перенаправлять пользователей, которые посещают другой, на предпочтительный домен.

Существует множество видов HTTP-перенаправлений, но в этом случае лучше всего использовать перенаправление 301, которое сообщает клиентам: «Запрошенный вами веб-сайт навсегда перемещен на другой URL-адрес. Вместо этого перейдите туда». Как только браузер получает код ответа HTTP 301 от сервера, он отправляет второй запрос на новый URL-адрес, предоставленный сервером, и пользователь получает доступ к веб-сайту, возможно, даже не замечая, что он был перенаправлен.

Почему бы не настроить свой веб-сервер так, чтобы он просто обслуживал один и тот же веб-сайт для запросов к обоим доменным именам? Это может показаться проще, но это не дает SEO-преимуществ переадресации 301. Постоянная переадресация сообщает сканерам поисковых систем, что для вашего веб-сайта существует одно каноническое местоположение, и это улучшает поисковый рейтинг этого единственного URL-адреса.

В этом руководстве вы настроите перенаправление 301 с помощью Nginx в Ubuntu 14.04. Если вы используете Apache вместо Nginx, см. вместо этого это руководство: Как перенаправить www на не-www с помощью Apache в Ubuntu 14.04.

Предпосылки

Чтобы выполнить этот урок, вам сначала нужно:

  • Права суперпользователя (пользователя в группе sudo) на сервере, на котором работает Nginx. Если у вас еще нет такой настройки, следуйте этому руководству: Initial Server Setup with Ubuntu 14.04.
  • Nginx установлен и настроен для обслуживания вашего веб-сайта. Следуйте этому руководству, чтобы сделать это: Как настроить серверные блоки Nginx (виртуальные хосты) в Ubuntu 14.04 LTS.
  • Зарегистрированное доменное имя. Если у вас его еще нет, вы можете получить его бесплатно из этой статьи из нашей документации, где показано, как это сделать.

Давайте начнем с настройки записей DNS.

Шаг 1 — Настройка записей DNS

Во-первых, вам нужно указать оба www.my-website.com и my-website.com на ваш сервер, на котором работает Nginx. (В остальной части руководства предполагается, что ваш домен — my-website.com. Замените его своим собственным доменом везде, где вы видите его ниже.) Вы сделаете это, создав DNS-запись A для каждого имени, которое указывает на IP-адрес вашего сервера Nginx.

Откройте веб-консоль вашего провайдера DNS. В этом руководстве используется DigitalOcean DNS.

В форме «Добавить домен» введите зарегистрированное доменное имя в текстовое поле и нажмите «Добавить домен». Откроется страница нового домена, где вы сможете просматривать, добавлять и удалять записи для домена.

В разделе «Создать новую запись» введите \@” в текстовом поле HOSTNAME. Это специальный символ, указывающий, что вы добавляете запись для корневого доменного имени, запись для простого my-website.com В текстовом поле WILL DIRECT TO введите публичный IPv4-адрес вашего сервера и нажмите «Создать запись» (TTL менять не нужно).

Для второй записи DNS вы можете использовать запись CNAME вместо записи A. Запись CNAME — это псевдоним, который указывает на другое имя вместо IP-адреса. Вы можете создать запись CNAME, которая направляет www.my-website.com на my-website.com, и любой HTTP-запрос для субдомена www попадет на ваш сервер. поскольку вы только что создали запись A для корневого домена. Но для простоты просто создайте еще одну запись A, подобную первой, введя \www в поле HOSTNAME и общедоступный IP-адрес сервера в поле WILL DIRECT TO.

Когда вы создали обе записи, это должно выглядеть примерно так:

При наличии двух записей веб-запросы для my-website.com и www.my-website.com должны достигать вашего сервера Nginx. Теперь давайте настроим сервер.

Шаг 2 — Настройка редиректа в Nginx

Как указано в предварительных требованиях, ваш веб-сайт уже должен быть настроен в Nginx. Неважно, находится ли блок server сайта в основном файле /etc/nginx/sites-enabled/default или в собственном файле. Важно то, что у вас есть некоторый блок server, настроенный с директивой server_name, установленной на my-website.com и/или www .my-website.com. Независимо от того, содержит ли ваше имя_сервера одно или оба имени, сейчас самое время решить, какое имя вы хотите использовать в качестве единственного имени для размещения сайта.

Откройте файл с конфигурацией вашего веб-сайта (например, /etc/nginx/sites-available/my-website.com.conf) в nano или в вашем любимом редакторе и найдите директива server_name:

  1. sudo nano /etc/nginx/sites-available/my-website.com.conf
server {
    . . .
    server_name my-website.com www.my-website.com
    . . .
}

Если вы хотите перенаправить www.my-website.com на my-website.com, удалите www.my-website.com из server_name, сохраните и закройте файл. (Если вы хотите перенаправить my-website.com на www.my-website.com, вместо этого удалите my-website.com.)

Затем создайте новый файл конфигурации Nginx с именем /etc/nginx/sites-available/www.my-website.com.conf (или /etc/nginx/sites-available/my- веб-сайт.com.conf, если это имя, которое вы перенаправляете). Назовите файл как угодно, но, как и все файлы конфигурации Nginx, имя файла должно заканчиваться на .conf:

  1. sudo nano /etc/nginx/sites-available/www.my-website.com.conf

Добавьте в файл следующий блок server, заменив my-website.com своим собственным доменным именем:

server {
    server_name www.my-website.com;
    return 301 $scheme://my-website.com$request_uri;
}

Если вместо этого вы перенаправляете my-website.com на субдомен www, поместите my-website.com только в server_name, а www.my-website.com в URL-адресе на следующей строке.

Сохраните и выйдите, когда закончите. Затем создайте символическую ссылку в /etc/nginx/sites-enabled на этот новый файл, чтобы Nginx подхватил его после перезапуска:

  1. sudo ln -s /etc/nginx/sites-available/www.my-website.com.conf /etc/nginx/sites-enabled/

Это настраивает Nginx на отправку переадресации 301 всем клиентам, запрашивающим www.my-website.com, и вместо этого направляет их на посещение my-website.com. Перенаправление сохраняет URI запроса, поэтому запрос на http://www.my-website.com/login.php будет перенаправлен на http://my-website.com. /логин.php.

Примечание. Блок server выше не содержит директивы listen. Это нормально, потому что, как упоминалось в этом руководстве, любой блок server без директивы listen будет прослушивать 0.0.0.0:80 (порт 80 на всех интерфейсах). Но если ваш сервер Nginx содержит несколько IP-адресов или если ваш сайт прослушивает порт, отличный от 80, вам может потребоваться добавить директиву listen, чтобы указать конкретный IP-адрес и порт. Используйте то же значение для listen, которое использует основной блок вашего сайта server.

Перед применением изменений убедитесь, что ваша конфигурация Nginx не содержит ошибок:

  1. sudo nginx -t

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

Output
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful

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

  1. sudo service nginx restart

Прежде чем посетить www.my-website.com в своем браузере, сделайте запрос, используя curl либо на своем сервере, либо на локальном компьютере (если curl устанавливается локально):

  1. curl -IL http://www.my-website.com

Флаг -I указывает curl показывать только заголовки из ответа сервера. Флаг -L указывает curl подчиняться любым перенаправлениям с сервера, автоматически делая второй запрос, на этот раз по URL-адресу, указанному в Location. заголовок (так же, как это сделал бы веб-браузер). Поскольку вы настроили перенаправление 301, curl должен сделать два запроса, и вы должны увидеть только заголовки двух ответов:

Output
HTTP/1.1 301 Moved Permanently Server: nginx/1.20.1 Date: Thu, 08 Dec 2022 19:24:44 GMT Content-Type: text/html Content-Length: 169 Connection: keep-alive Location: http://my-website.com HTTP/1.1 200 OK Server: nginx/1.20.1 Date: Thu, 08 Dec 2022 19:24:44 GMT Content-Type: text/html Content-Length: 57 Last-Modified: Thu, 01 Dec 2022 22:10:57 GMT Connection: keep-alive ETag: "63892671-39" Accept-Ranges: bytes

В ответе 301 (перемещено навсегда) на первоначальный запрос к http://www.my-website.com обратите внимание на последний заголовок: Местоположение: http://my-website. ком. Второй ответ исходит от последующего запроса curl к http://my-website.com, и если ваш веб-сайт исправен, сервер должен был ответить 200 ( ХОРОШО).

Наконец, посетите http://www.my-website.com в своем веб-браузере. Моргни, и ты пропустишь перенаправление. Ваш веб-сайт должен отображаться как обычно, но еще раз взгляните в адресную строку и обратите внимание, что в URL-адресе отсутствует \www. >http://мой-сайт.com.

Заключение

В этом руководстве вы добавили две записи DNS для своего веб-сайта и настроили Nginx для перенаправления дополнительного домена на ваш предпочтительный домен. Теперь ваш сайт доступен через оба домена. Возможно, это уже было до того, как вы прочитали этот урок; возможно, вы обслуживали его напрямую с обоих доменных имен. Но с помощью всего лишь четырех строк конфигурации Nginx вы улучшили репутацию своего веб-сайта в глазах поисковых систем и, таким образом, представили его большему количеству пользователей в Интернете.

Хотите узнать больше о том, как Nginx решает, какой блок server будет обрабатывать данный запрос? Ознакомьтесь с этим руководством: Понимание алгоритмов выбора Nginx Server и Location Block.