Nginx перенаправляет www на не www и наоборот в Ubuntu 18.04

12 set 2022 4 min di lettura
Nginx перенаправляет www на не www и наоборот в Ubuntu 18.04
Indice dei contenuti

Введение

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

Support us with a

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.