До перехода на HTTPS у меня все работало «без WWW». Теперь пришла пора добавить еще немного инструкций склейки.
Вот конфиг для «любой сервер_нейм» (чтоб каждому домену не писать).
server {
server_name _;
#раньше только "с WWW" отправлял на "без WWW"
if ($host ~* ^www\.(.+)$) {
set $newhost $1;
return 301 https://$newhost$request_uri;
}
#теперь нужно с "HTTP" направлять на "HTTPS"
if ($scheme != "https") {
return 301 https://$host$request_uri;
}
}
Домены у меня описаны такими блоками
server {
listen 80;
listen 443 ssl http2;
server_name https://site.ru;
root /var/www/site.ru/folder;
index index.php;
ssl on;
ssl_certificate /etc/letsencrypt/live/site.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/site.ru/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
}
И когда я делаю тест конфигов (nginx -t) на выхлопе варнинг.
nginx: [warn] server name "https://site.ru" has suspicious symbols in /etc/nginx/sites-enabled/site.ru:17
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Оно работает, но «подозрительные символы» :))
Лишних пробелов нет, точки с запятыми на концах строк есть... Что ему в символах не нравится то?
Если убрать из имени сервера протокол https, тогда редирект http://site.ru => https://site.ru перестанет исполняться.