Введение
Когда ваш веб-сайт или приложение запущено и работает с доменом, часто предпочтительнее разрешить пользователям доступ к нему либо через простое доменное имя, либо через www. Несмотря на то, что существует множество способов его настройки, лучше всего из соображений согласованности и SEO выбрать, какой домен вы предпочитаете, простой или www, и перенаправить другой на ваш предпочтительный домен. Этот тип перенаправления называется постоянным перенаправлением или «перенаправлением 301», и его можно легко настроить, правильно настроив записи ресурсов DNS и веб-сервер.
В этом руководстве показано, как перенаправить URL-адрес с www на не-www и наоборот, например, с www.example.it на example.it с помощью Nginx в Ubuntu 18.04.
Предпосылки
В этом руководстве предполагается, что у вас есть привилегии суперпользователя, то есть sudo или root, на сервере с Nginx. Если вы еще не настроили его, следуйте этому руководству: Ubuntu 18.04 LTS Initial Setup.
Предполагается, что Nginx установлен. Если он не установлен, следуйте этому руководству: Как установить Linux Nginx MySQL PHP (LEMP) в Ubuntu 18.04 LTS
Также необходимо иметь активное и работающее доменное имя. Если записи DNS уже активны и правильно настроены, пропустите следующий абзац.
Настройка DNS-записей
Чтобы установить желаемое перенаправление с www.example.it на example.it или наоборот, вам необходимо иметь запись A для каждого имени.
Имя хоста должно быть вашим доменом, например .it, а IP-адрес должен быть установлен на общедоступный IP-адрес вашего сервера Nginx. Это автоматически создаст запись A, которая указывает ваш домен на указанный IP-адрес.
Затем добавьте еще одну запись A с « www » в качестве имени хоста (или «www.example.it», если только «www» не работает) и укажите тот же IP-адрес.
Примечание. Это также будет работать с записями CNAME, если запись A канонического имени относится к IP-адресу веб-сервера Nginx.
Теперь ваш сервер должен быть доступен через домен www, а не через www, но нам все еще нужно настроить перенаправление.
Установите перенаправление с www на без www
Настроить правила перенаправления с www на без www и наоборот с Nginx очень просто.
Откройте файл конфигурации Nginx:
sudo nano /etc/nginx/sites-available/default
Файл по умолчанию должен выглядеть так, проверьте, указано ли ваше доменное имя в параметре server_name без www:
server {
listen 80;
listen [::]:80;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name TUO_DOMINIO.it;
location /{
try_files $uri $uri/=404;
}
}
Добавьте следующие строки кода в начало файла, измените параметр server_name на свой домен и www и измените возвращаемый код 301 на адрес домена без www, например:
server {
listen 80;
server_name www.TUO_DOMINIO.it;
return 301 http://TUO_DOMINIO.it$request_uri;
}
Итак, результат будет выглядеть так:
server {
listen 80;
server_name www.TUO_DOMINIO.it;
return 301 http://TUO_DOMINIO.it$request_uri;
}
server {
listen 80;
listen [::]:80;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name TUO_DOMINIO.it;
location /{
try_files $uri $uri/=404;
}
}
Сохраните и закройте файл, нажав CTRL + X, затем Y, чтобы сохранить изменения, а затем ENTER, если вы используете nano.
Перезапустите Nginx:
sudo service nginx restart
На этом этапе перенаправление для Nginx с www на не-www должно работать нормально.
Настройте редирект без www на www
И наоборот, чтобы установить правила перенаправления с не-www на www, вам просто нужно поменять местами server_name и перенаправление 301 из предыдущей конфигурации.
Откройте файл конфигурации Nginx:
sudo nano /etc/nginx/sites-available/default
Файл по умолчанию должен выглядеть следующим образом, проверьте, установлено ли имя вашего домена с www в параметре server_name:
server {
listen 80;
listen [::]:80;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name www.TUO_DOMINIO.it;
location /{
try_files $uri $uri/=404;
}
}
Добавьте следующие строки кода в начало файла, измените параметр server_name на свой домен и без www, а также измените возврат 301 на адрес домена на www, например:
server {
listen 80;
server_name TUO_DOMINIO.it;
return 301 http://www.TUO_DOMINIO.it$request_uri;
}
Итак, результат будет выглядеть так:
server {
listen 80;
server_name TUO_DOMINIO.it;
return 301 http://www.TUO_DOMINIO.it$request_uri;
}
server {
listen 80;
listen [::]:80;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name www.TUO_DOMINIO.it;
location /{
try_files $uri $uri/=404;
}
}
На этом этапе перенаправление для Nginx с www на не-www должно работать нормально.
Сохраните и закройте файл, нажав CTRL + X, затем Y, чтобы сохранить изменения, а затем ENTER, если вы используете nano.
Перезапустите Nginx:
sudo service nginx restart
Изменения должны вступить в силу немедленно.
Настройте переадресацию с www на не-www с помощью HTTPS.
Если вы используете SSL-сертификаты, то у вас есть активное соединение с протоколом HTTPS и вы хотите перенаправить с www на не-www (или наоборот) и с HTTP на HTTPS.
Откройте файл конфигурации Nginx:
sudo nano /etc/nginx/sites-available/default
Добавить новый блок сервера в начало файла для управления HTTP-соединениями и перенаправления на HTTPS. Измените параметр server_name, введя свое доменное имя как без www, так и с www, а также измените возвращаемый параметр на предпочтительный URL-адрес, в нашем случае версию без www, например:
server {
listen 80;
listen [::]:80;
server_name TUO_DOMINIO.it www.TUO_DOMINIO.it;
return 301 https://TUO_DOMINIO.it$request_uri;
}
Сохраните и закройте файл, нажав CTRL + X, затем Y, чтобы сохранить изменения, а затем ENTER, если вы используете nano.
Измените основной серверный блок. Измените параметр Listen на порт 443 и добавьте параметр ssl. Включите путь к вашим сертификатам, если они еще не включены, и в конце блока добавьте условие if, которое устанавливает автоматическое перенаправление на ваш предпочтительный URL-адрес, в данном случае без www. Если вы предпочитаете создать перенаправление без www на www, поменяйте местами server_name и return параметры в обоих блоках сервера.
server {
listen [::]:443 ssl ipv6only=on;
listen 443 ssl;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name TUO_DOMINIO.it www.TUO_DOMINIO.it;
location /{
try_files $uri $uri/=404;
}
#include your certificates...
if ($host = 'www.TUO_DOMINIO.it') {
return 301 https://TUO_DOMINIO.it$request_uri;
}
}
Таким образом, окончательная конфигурация с перенаправлением с www на не-www с включенным https выглядит следующим образом:
server {
listen 80;
listen [::]:80;
server_name TUO_DOMINIO.it www.TUO_DOMINIO.it;
return 301 https://TUO_DOMINIO.it$request_uri;
}
server {
listen [::]:443 ssl ipv6only=on;
listen 443 ssl;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name TUO_DOMINIO.it www.TUO_DOMINIO.it;
location /{
try_files $uri $uri/=404;
}
#include your certificates...
if ($host = 'www.TUO_DOMINIO.it') {
return 301 https://TUO_DOMINIO.it$request_uri;
}
}
Перезапустите Nginx:
sudo service nginx restart
Изменения должны вступить в силу немедленно.
Вывод
В этом уроке мы узнали, как настроить правила перенаправления для Nginx с www на не-www и наоборот, а также для http на https.
Это все! Перенаправление Nginx теперь настроено правильно.