Войти через VK Войти через FB Войти через Google Войти через Яндекс
Поиск по сайту
Нюансы перехода на https
Upgrade-Insecure-Requests
Спецификация Upgrade-Insecure-Requests состоит из двух частей: на стороне браузера и на стороне сайта. Сайт можно отправить заголовок Content-Security-Policy: upgrade-insecure-requests, который обяжет браузеры, которые поддерживают спецификацию Upgrade-Insecure-Requests, отправлять запросы на сайт в защищенном режиме. Спецификация HTTP Strict Transport Security (HSTS) и Upgrade Insecure Requests.
Со стороны браузера может быть отправлен заголовок Upgrade-Insecure-Requests: 1, который говорит серверу, что браузер хочет получать сайт в защищенном режиме (если такой для сайта предусмотрен). Для перевода сайта в защищенный режим необходимо выпустить SSL-сертификат. При наличии SSL-сертификата сайт будет сигнализировать всем браузерам, которые поддерживают этот стандарт, о переходе в безопасный режим и сам переходить в безопасный режим, если получит сигнал от браузера.
Переход на https (SSL) с помощью .htaccess
Реализуем переход с помощью Apache файла .htaccess в корне сайта
# если браузер запрашивает работу по https, перекидываем его на https RewriteCond %{HTTP:Upgrade-Insecure-Requests} (1) [NC] RewriteCond %{HTTP_HOST} (_ДОМЕН_) [NC] # на локале не перекидываю RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteCond %{HTTPS} off RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=307] # добавим заголовок рекомендующий браузеру перети на https <IfModule mod_headers.c> Header set Content-Security-Policy "upgrade-insecure-requests" env=HTTPS </IfModule>
К сожалению, у разных хостеров разные настройки, поэтому для определения ситуации я использую следующий набор команд файла .htaccess:
# тестирование хостера #RewriteCond %{QUERY_STRING} ^ss$ [NC] #RewriteCond %{HTTPS} off #RewriteCond %{SERVER_PORT} !^443$ #RewriteCond %{ENV:HTTPS} !on #RewriteCond %{HTTP:X-HTTPS} !1 #RewriteCond %{HTTP:CF-Visitor} '"scheme":"http"' #RewriteCond %{HTTP:Front-End-Https} !on RewriteRule .* https://htmlweb.ru/?a=%{HTTP:Upgrade-Insecure-Requests}&b=%{HTTP:X-Forwarded-Proto}&c=%{HTTP:X-Forwarded-Proto}&d=%{HTTPS}&e=%{SERVER_PORT}&f=%{ENV:HTTPS}&g=%{HTTP:X-HTTPS}&h=%{HTTP:CF-Visitor}&i=%{HTTP:Front-End-Https} [L,R=302]
Переход на https (SSL) с помощью NGINX
server { if ($http_upgrade_insecure_requests = "1") { add_header Vary Upgrade-Insecure-Requests; return 307 https://$host$request_uri; } }
Рабочий конфиг виртуального хоста, замените _ДОМЕН_ на имя своего домена:
server { # теперь нужно слушать 443-й порт и ждать шифрованных данных, защишённых ключами SSL-сертификатов Let's Encrypt вместо простой и понятной передачи текстовых данных на 80-м порту listen 443 ssl; server_name _ДОМЕН_; # Блок с указанием сертификатов и ключей ssl_certificate /etc/letsencrypt/live/_ДОМЕН_/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/_ДОМЕН_/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/_ДОМЕН_/chain.pem; # Блок технической части по использованию SSL-сертификатов ssl_stapling on; ssl_stapling_verify on; resolver 127.0.0.1 8.8.8.8; # переезд на HTTPs протокол: add_header Strict-Transport-Security "max-age=31536000"; # Отдавать все файлы с изображениями только по HTTPs протоколу add_header Content-Security-Policy "img-src https: data:; upgrade-insecure-requests"; root /var/www/mb4/data/www/_ДОМЕН_; charset utf-8; access_log /var/www/mb4/data/www/logs/_ДОМЕН_.access-nginx.log main; error_log /var/www/mb4/data/www/logs/_ДОМЕН_-nginx.error.log error; index index.html index.htm index.php; include /etc/nginx/letsencrypt; include /etc/nginx/templates/apache24.conf; include /etc/nginx/templates/phpmyadmin.conf; } # для правильного склеивания зеркал http и https поисковыми машинами. Если не сделать 301-й редирект с 80-го порта, # по правилам склейки зеркал в Яндексе, склейка не произойдёт и сайты на 80-м порту и 443-м порту # будут восприниматься как отдельные независимые сайты, что плохо скажется на ранжировании в поисковой выдаче. # с 80-го порта может начать отдаваться контекст папки по умолчанию, настроенной в основных настройках NGiNX, # т.е. папки /var/www/html, а в ней, как правило, лежит единственный HTML-файл с приветствием NGiNX. # По всем остальным запросам будет отдаваться 404-я ошибка (страница не найдена). И сайт может потерять все страницы, которые были проиндексированы поисковыми роботами. server { listen 80; server_name _ДОМЕН_; return 301 https://_ДОМЕН_$request_uri; } server { listen 80; server_name www._ДОМЕН_; return 301 http://_ДОМЕН_$request_uri; }
Приведет ли HTTPS к тому, что мой сайт станет работать медленнее?
Да, т.к. HTTPS – это в HTTP + кодирование + проверка сертификата, т.е. переход на HTTPS будет отражается на производительности. Однако в случае с современными платформами это практически незаметно. Более того, если вы переходите на HTTPS + HTTP/2 это фактически может привести к лучшей производительности. Протокол HTTP/2 позволяет добиться значительного улучшения производительности по сравнению с HTTP/1.1, и во всех современных браузерах оно доступно только для защищенных сайтов.
Не забудьте поправить директиву Host: в robots.txt и настроить новое основное зеркало в Яндекс.Вебмастер
Смотрите также:
.
Прокомментировать/Отблагодарить