Большинство людей набирают в строке браузера: mysite.com
и нет https://mysite.com
.
У многих разработчиков, включая меня, есть что-то подобное в конфигурационном файле Nginx, что означает, что это mysite.com
запрос вызывает redirect
к https://
сайт:
server {
listen 80;
server_name mysite.com;
return 301 https://$server_name$request_uri;
}
Команда Google Pagespeed недавно заявила [ref] эти перенаправления ужасны для производительности, особенно на мобильных устройствах, потому что redirect
заставляет запрос вернуться через сеть мобильного оператора.
Мой вопрос: есть ли другой способ написать nginx.conf, чтобы люди, набирающие server_name
не переживай этого http://
к https://
штраф за перенаправление?
Нет, это потребует от вас изменения поведения браузера. Все зависит от ответа на запрос. Типы пользователей example.com
в его панели браузера, и браузер автоматически добавляет http://
перед этим. Таким образом, ваш сервер всегда будет получать первый запрос на http://example.com
и вы можете ответить перенаправлением на свой адрес с поддержкой SSL, только если нет ничего без SSL.
Отказать в просьбе, предложенной Натаном, - абсолютно не вариант. Поскольку браузер отобразит страницу с ошибкой, этот веб-сайт недоступен и может даже не существовать.
Но вы можете сделать еще кое-что: Строгая безопасность транспорта HTTP (HSTS)
HSTS сообщает браузеру, что ваш сайт доступен только через SSL и что последующие запросы всегда должны выполняться автоматически с помощью https://
вместо того http://
. Вы можете добиться этого в nginx с помощью следующих строк в блоке вашего сервера SSL:
add_header Strict-Transport-Security "max-age=262974383";
http {
# One server listening on port 80 and sending the redirect to HTTPS
server {
server_name example.com;
return 301 https://$server_name$request_uri;
}
# Our actual server handling incoming requests.
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/ssl/my_site.pem;
ssl_certificate_key /etc/ssl/my_site.key;
# Tell the browser that he should always visit us with SSL.
add_header Strict-Transport-Security "max-age=262974383";
}
}
Либо не слушайте порт 80 (что вызовет ошибку), либо отклоните запрос:
server {
listen 80;
server_name mysite.com;
location / {
deny all;
}
}
Тогда просто получите свой обычный блок 443.