Недавно я изменил конфигурацию nginx, чтобы перенаправить весь http-трафик на https (и весь www-трафик на no-www).
Имеет ли смысл добавить add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
к моим серверным блокам? Или в этом нет необходимости, поскольку я уже перенаправляю весь трафик? Было бы здорово узнать плюсы (и минусы, если есть).
В случае необходимости, моя текущая конфигурация виртуального хоста:
server {
server_name example.com www.example.com;
listen 80;
return 301 https://example.com$request_uri;
}
server {
server_name www.example.com;
listen 443 ssl;
ssl_certificate /etc/nginx/ssl/cert_chain.crt;
... other SSL related config ...
return 301 https://example.com$request_uri;
}
server {
server_name example.com;
listen 443 ssl;
... other SSL related config ...
... remaining server configuration ...
}
HSTS сообщает браузеру всегда использовать https, а не http. Добавление этой конфигурации может уменьшить необходимость пересылки с http на https, поэтому она может очень немного повысить производительность сайта и очень немного снизить нагрузку на сервер.
Для справки, вот заголовки безопасности, которые я использую на своих веб-сайтах на Nginx. Я сохраняю это в один файл и включаю его со всех серверов, которые в нем нуждаются, включая серверы http и https. Он позволяет загружать некоторые общие ресурсы, такие как Google и Facebook.
# Security headers
add_header Strict-Transport-Security "max-age=2592000; includeSubDomains; preload";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header Content-Security-Policy "default-src 'self' www.google-analytics.com ajax.googleapis.com www.google.com google.com gstatic.com www.gstatic.com connect.facebook.net facebook.com;";
add_header X-XSS-Protection "1; mode=block";
add_header Referrer-Policy "origin";
Разъяснение
Вам по-прежнему нужно перенаправление http на https.
Принятый ответ хорош, но он устарел и имеет недостаток, который я обнаружил, исследуя его построчно.
Продолжительность заголовка HSTS должна составлять не менее трех месяцев для удовлетворения требований безопасности. Я использовал следующее в моем фрагменте заголовков безопасности, чтобы получить оценку A + по тесту SSL:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";
Во-вторых, использование X-Frame-Options
устарел (и никогда не поддерживался многими / большинством основных браузеров). Текущий стандарт (т.е. реализованный во всех основных современных браузерах): Content-Security-Policy
(CSP).
add_header Content-Security-Policy 'frame-ancestors https://mywebapp.mywebsite.example';
Как видно из примера, заголовки CSP должны быть установлены для каждого сайта (за исключением умных регулярных выражений и т. Д., Которых я еще не видел).
Я бы предложил указать always
параметр в add_header
чтобы включить этот заголовок и для внутренних страниц ошибок.
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
Также, добавить preload
директива к заголовку ответа чтобы позже вы могли добавить свой сайт в список предварительной загрузки