Правильный редирект с 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 и указывает время следующего обновления этих данных