Как делается редирект с http на https Nginx

22.03.2021

Современные тенденции в области интернета диктуют условия использования безопасного протокола связи https. Так при переходе важно, чтобы чтобы весь трафик, который приходит на порт http автоматически перенаправлялся на https. Это важное условие не только для сайтов, которые могут потерять часть трафика, но и для пользователей, чтобы ни у кого не было возможности разорвать незащищенное подключение. Дальше рассмотрим как настраивается редирект с http на https Nginx.

Как делается редирект с http на https Nginx

Рекомендуем ипользовать перенаправление с кодом статуса 301. Он подсказывает поисковым системам или браузеру, что текущая ссылка была обновлена, и ее стоит обновить в своей базе, например, закладок браузера. Если мы откроем конфигурационный файл, то сможем обнаружить в нем две секции server, для сайта на https и сайта http. В секции http вы просто перенаправляете все запросы на https c помощью инструкции return, а во второй секции уже все обрабатываете. К примеру, первая секция:

server {
server_name losst.ru www.losst.ru;
charset off;
index index.php;
ssi on;
return 301 https://$host:443$request_uri;
set $root_path /var/www/losst/data/www/losst.ru;
root $root_path;
listen :80 default_server;
...
}

Как делается редирект с http на https Nginx

Вторая секция следует запросам на 433 порту:

server {
server_name losst.ru www.losst.ru;
ssl on;
ssl_certificate "/var/www/losst/losst.ru_le2.crtca";
ssl_certificate_key "/var/www/losst/losst.ru_le2.key";
ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
add_header Strict-Transport-Security "max-age=31536000;";
charset off;
index index.php;
set $root_path /var/www/losst/data/www/losst.ru;
root $root_path;
listen :443 default_server;
...
}

Как видим, синтаксис в этом случае предельно простой и понятный. Так инструкция return дает возможность вернуть необходимые коды ответа сервера. Таким образом мы возвращаем код 301, постоянный редирект, а также URL, на который собираемся перенаправить пользователя. Помимо директивы return, можно использовать инструкцию rewrite, с помощью нее выполняются точно те же действия:

rewrite ^/(.*)$ https://losst.com/$1 permanent;

В синтаксис регулярных выражений можно добавить домен вместо return 301. Также можно использовать такую конструкцию без отдельного блока server:

if ($host ~* ^(losst.ru|www.losst.ru)$ ){
rewrite ^/(.*)$ https://losst.ru/$1 permanent;
}

Дальше необходимо сохранить файл и проверить конфигурацию Nginx. Для этого используется:

$ sudo nginx -t

настройка Nginx

Если все Ок, перезапускаем Nginx:

$ sudo systemctl restart nginx

Проверяем, какой ответ сервера вы получите с помощью curl:

$ curl -I losst.ru

настройка Nginx

Или позволим утилите проследовать полный путь по перенаправлению:

$ curl ILa losst.ru

настройка Nginx

Как видим, выполнить настройку редиректа на https nginx достаточно просто, работа выполняется добавлением одной строки в конфигурационный файл, все остальное - дополнительные параметры.