Я использовал конфигурацию nginx взято из этого поста реализовать редирект с http: // (www.) example.com -> https://example.com:
server {
server_name www.example.com example.com;
return 301 https://example.com$request_uri;
}
server {
listen 443 ssl;
<possibly other ssl directives if you have a separate cert and key for www>
server_name www.example.com;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
return 301 https://example.com$request_uri;
}
server {
listen 443 ssl;
ssl_certificate /path/to/server.cert;
ssl_certificate_key /path/to/server.key;
server_name example.com;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
<locations for processing requests>
}
Я хотел бы добавить к этому HSTS, поэтому следую документация nginx, что составляет добавление
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
к обоим блокам сервера SSL (как было сделано выше).
TL; DR: нужен ли заголовок STS во втором блоке сервера?
Однако я немного почитал по этой теме, особенно это сообщение в блоге который, казалось, думал, что:
... если ваш канонический URL-адрес - www.example.com, токен includeSubDomains не будет защищать example.com, поскольку это не субдомен www.example.com. Решение - сделать запрос с www.example.com на некэшированный ресурс на
https:// example.com
, например изображение размером 1px и убедитесь, что https: // example.com устанавливает заголовок HSTS.
Думаю, это правильно, как будто вы сразу переходите к каноническому https://www.example.com
тогда это только защитит http://*.www.example.com.
Однако это не проблема, если ваш канонический URL https://example.com
и вы используете includeSubDomains
. Я тестировал его в Chrome, и он сделал следующее http://www.example.com
(307) -> https://www.example.com
(301) -> https://example.com
.
Так это Strict-Transport-Security
заголовок во втором listen 443 ssl
www.example.com
блокировать необходимо? Как прямой запрос к https://www.example.com
в любом случае будет SSL, и он подберет STS includeSubDomains
заголовок при редиректе с третьего серверного блока, защищающий http://www.example.com
в будущем.
Да, желательно иметь заголовок STS в обоих server
блоки по той причине, которую вы написали в своем вопросе.
Глядя на это с другой стороны, нет ничего плохого в том, чтобы указать заголовок в example.com
сервер тоже.