Я использовал конфигурацию 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
, например изображение размером 1 пиксель, и убедиться, что 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
во втором прослушивании 443 ssl
www.example.com
блок нужен? В качестве прямого запроса к https://www.example.com
в любом случае будет SSL, и он получит заголовок STS includeSubDomains
при перенаправлении с третьего блока сервера, защищая http://www.example.com
в будущем.
Да, желательно иметь заголовок STS в обоих блоках server
по той причине, которую вы написали в своем вопросе.
Если посмотреть на это с другой стороны, нет ничего плохого в том, чтобы указать заголовок на сервере example.com
.