Возьмем следующий конфигурационный файл nginx.conf
с блоками server
для example.com
и subdomain.example.com
:
http {
...
server {
listen [::]:80 ipv6only=off default_server;
server_name example.com;
return 301 https://example.com$request_uri;
}
server {
listen [::]:443 ipv6only=off ssl default_server;
server_name example.com;
add_header Strict-Transport-Security
"max-age=63072000; includeSubDomains; preload" always;
...
}
server {
listen [::]:80 ipv6only=off;
server_name subdomain.example.com;
return 301 https://subdomain.example.com$request_uri;
}
server {
listen [::]:443 ipv6only=off ssl;
server_name subdomain.example.com;
add_header Strict-Transport-Security
"max-age=63072000; includeSubDomains; preload" always; # <-- again ???
...
}
}
Часть заголовка includeSubDomains
, очевидно, сообщает браузеру, что заголовок также применяется ко всем поддоменам.
Однако, если этот браузер посетит subdomain.example. com
, прежде чем увидеть example.com
, это не поможет, не так ли? Итак, чтобы прикрыть этот сценарий, мне нужно добавить тот же самый add_header
во все серверные блоки поддоменов ... верно?
Вы правы, что лучше иметь заголовок HSTS Strict-Transport-Security
везде, где он вам нужен, чтобы клиент мог его получить даже если доступ к sub.example.com
осуществляется до example.com
или истек срок действия кэшированной информации HSTS.
Флаг includeSubDomains
влияет на все поддомены, в которых это присутствует. Это означает, что includeSubDomains
на sub.example.com
вступает в силу для *. Sub.example.com
вместо *. Example.com
]. (Это естественно, так как было бы плохо, если бы, например, example.co.uk
мог повлиять на *. Co.uk
.)
Если вы не используете ] sub.sub.example.com
вы можете оставить Strict-Transport-Заголовок безопасности
ваших поддоменов без этого флага.
subA.example.com
не может защитить subB.example.com
.
Верно. Параметр includeSubdomains используется для принудительного использования https для всех ресурсов, связанных внутри html-страницы, обслуживаемой текущим доменом.
Цитирование https://www.nginx.com/blog/http-strict-transport-security-hsts -and-nginx / :
Например, ответ HTML для https://www.example.com может включать запрос к ресурсу с https://example.com , чтобы убедиться, что HSTS установлен для всех поддоменов example.com.
Также помните, что если вы добавите директиву add_header
внутри блока location {}, вам также потребуется переопределить add_header Strict-Transport-Security ...
внутри этого блока. Еще раз цитируем:
Блоки конфигурации NGINX наследуют директивы add_header от своих включающие блоки, поэтому вам просто нужно разместить директиву add_header в серверном блоке верхнего уровня. Есть одно важное исключение: если блок включает в себя директиву add_header, он не наследует заголовки из включающих блоков, и вам нужно повторно объявить все Директивы add_header: