Назад | Перейти на главную страницу

Как не перенаправлять при запросе только server_name

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