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

Добавление HSTS в конфигурацию nginx

Недавно я изменил конфигурацию 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 директива к заголовку ответа чтобы позже вы могли добавить свой сайт в список предварительной загрузки