Как не перенаправить, если запрашивает только имя_сервера

Большинство людей печатают в панели браузера: 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:// перенаправить штраф?

2 ответа

Нет, для этого потребуется изменить поведение браузера. Это все на основе ответа на запрос. Пользовательские типы example.com в его панели браузера и браузер автоматически добавляет http:// перед этим. Таким образом, ваш сервер всегда будет получать первый запрос на http://example.com и вы можете ответить только перенаправлением на ваш адрес с поддержкой SSL, если нет ничего без SSL.

Отклонить просьбу, предложенную Натаном, абсолютно невозможно. Поскольку браузер отобразит страницу с ошибкой, что этот веб-сайт недоступен и может даже не существовать.

Но есть еще кое-что, что вы можете сделать: HTTP Strict Transport Security (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.

Другие вопросы по тегам