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

HSTS с каноническим перенаправлением URL в nginx

Я использовал конфигурацию 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 сервер тоже.