Простой редирект c www-версии сайта при использовании HTTPS

Многие пользольватели зачастую по привычке вводят в начале любого адреса www. Поэтому целеособразно сделать редирект с www.domain.xyz на domain.xyz. Наоборот можно сделать аналогичным образом: Но зачем? Ведь более короткий адрес банально эстетически красивее.

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

Вся настройка сводится к созданию отдельного виртуального хоста и получению сертификата. В свою очередь, хост будет заниматься только редиректом. Более подробно о получении сертификата можно прочитать здесь.

Переходим в директорию конфигов NGINX и создаем новый файл конфигурации:

1
2
cd /etc/nginx
sudo nano sites-available/www.domain.xyz.conf

Используем этот конфиг:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
server {
listen 80;
# Поддержка IPv6
# listen [::]:80;
server_name www.domain.xyz;
# Редирект с http://www.domain.xyz на https://www.domain.xyz
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
# Поддержка IPv6
# listen [::]:443 ssl http2;
server_name www.domain.xyz;
### START OF SSL CONFIGURATION ###
### https://krasovsky.me/2016/nginx-ssl
ssl on;
ssl_certificate /etc/letsencrypt/live/www.domain.xyz/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.domain.xyz/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/www.domain.xyz/fullchain.pem;
ssl_dhparam /etc/letsencrypt/live/www.domain.xyz/dhparam.pem;
### END OF SSL CONFIGURATION ###
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
# Основной редирект с https://www.domain.xyz на https://domain.xyz
return 301 https://domain.xyz$request_uri;
}

Создаем симлинк для нового виртуального хоста:

1
sudo ln -s sites-available/www.domain.xyz.conf sites-enabled/www.domain.xyz.conf

Перезапускаем сервер:

1
2
3
4
5
# Если systemd
sudo systemctl restart nginx
# Остальное
sudo service restart nginx