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 (как сделано выше).

TLDR: нужен ли заголовок 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 заголовок во втором listen 443 sslwww.example.com блок нужен? Как прямой запрос к https://www.example.com в любом случае был бы SSL, и это подхватило бы STS includeSubDomains заголовок при перенаправлении с третьего блока сервера, защищающий http://www.example.com в будущем.

1 ответ

Решение

Да, желательно иметь заголовок STS в обоих server блоки, по той причине, что вы написали в своем вопросе.

Если посмотреть на это с другой стороны, то нет никакого вреда в указании заголовка в example.com сервер тоже.

Другие вопросы по тегам