Правильный редирект с HTTP на HTTPS

Правильный редирект с HTTP на HTTPS

Делаем правильное перенаправление с HTTP на HTTPS префикс.

В интернете есть масса решений, но многие из них работают некорректно и могут вызвать в дальнейшем только массу проблем.

Ниже я опишу корректный вариант использования перенаправления с HTTP на HTTPS протокол при использовании nginx.

1 Для начала у вас должен быть установлен SSL сертификат (пропустим его установку, ведь статья не об этом..)

2 Откройте конфиг nginx (nginx.conf), найдите строки своего сайта, примерно такие (основные прокомментированы):

server {
	 server_name site.ru www.site.ru; # имя сайта
	 listen 238.5.241.234; # ip адрес вашего сервера
	 listen 238.5.241.234:443 ssl; # ip адрес вашего сервера
	 set $root_path /var/www/user_name/data/www/site.ru; # путь к корневому каталогу сайта
		
location / {
	     proxy_set_header Host $host;
	     ...
	     ...
	     ...
	   }
		
	ssl_certificate /var/www/httpd-cert/site/chained.crt; # цепочка сертификата
	ssl_certificate_key /var/www/httpd-cert/site/site_ssl.key; # ключ сертификата
}

3 Выберите способ редиректа с http на https

proxy_redirect http:// https://;

или

if ( $scheme = "http" ) {
	rewrite ^/(.*)$ https://$host/$1 permanent;
}

По своему опыту могу сказать что мне более привлекателен первый вариант с proxy_redirect, как мне кажется он работает быстрее. К тому же при его использовании нет каких либо ошибок при использовании онлайн-сервисов проверок сайта, например PageSpeed Insights, Mobile Friendly и прочих ресурсов, т.к. второй вариант ставить перманентный 301 редирект на HTTPS версию и такие сервисы вместо результата выдают ошибку о перенаправлении.

4 Пропишите в директиву Location один из двух вариантов наиболее привлекательный для вас. Прописывать нужно именно в директиву location, чтобы у вас получилось примерно следующее:

location / {
	     proxy_set_header Host $host;
	     ...
	     ...
	     proxy_redirect http:// https://;
	   }

Далее перезагрузите nginx. Сделать это можно через панель сервера (если она позволяет такие манипуляции) либо просто зайдите на сервер с SSH доступом и пропишите команду:

service nginx restart

После этого можете проверить работу своего сайта. Зайдите на http://site.ru и вас должно автоматически перекинуть на https://site.ru. На этом с редиректом с http на https можно закончить.

Неправильная настройка SSL может вызвать массу ошибок при открытии сайта. К примеру браузер может выдать такие сообщения:

Error 310 (net::ERR_TOO_MANY_REDIRECTS): There were too many redirects

или такое:

Ошибка 310 (net::ERR_TOO_MANY_REDIRECTS): Обнаружено слишком много переадресаций.

или вот такое:

На этой странице обнаружена циклическая переадресация

Чтобы не было таких проблем, используйте правильно перенаправление с http на https, как было описано выше.

Кроме этого рекомендую проверить работу и корректность установки SSL сертификата на сайте, с помощью онлайн сервисов:

MaxCDN SSl Test - проверяет работоспособность и валидность, показывает данные о выдаче, проверка на Heartbleed и другую информацию

SSLLabs - очень мощный сервис по проверке SSL сертификатов. Отображает практически всю информацию (корректность работы, данные о выдаче, поддерживаемые типы шифрования, поддержка браузеров, дополнительные настройки). Сервис также отображает рекомендации для настроек сервера и в конечном итоге после проверки выдает текущую оценку безопасности вашего сайата и его SSL сертификата.

  БОНУС

Для более тонкой и лучшей настройки SSL вы можете прописать дополнительные настройки в директиву server (после ключей):

# дополнительные настройки
keepalive_timeout   60; # время соединения с сервером
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # указываем поддерживаемые протоколы
ssl_ciphers  "RC4:HIGH:!aNULL:!MD5:!kEDH"; # указываем используемые типы шифрования (можно добавить любые дополнительные). 
add_header Strict-Transport-Security 'max-age=15768000'; # отправляет заголовок браузеру что сайт работает по HTTPS и указывает время следующего обновления этих данных

Рейтинг: 0 Голосов: 0

Комментарии

Нет комментариев. Ваш будет первым!