Настройка HSTS (HTTP Strict Transport Security) для сайта
HSTS — механизм, при котором браузер запоминает, что сайт доступен только по HTTPS, и больше не пробует HTTP-соединение. Один заголовок в конфигурации сервера устраняет целый класс атак типа SSL stripping.
Как это работает
Сервер отдаёт заголовок:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
После первого визита браузер кэширует эту директиву на 365 дней. Все последующие запросы к домену и его поддоменам автоматически переводятся на HTTPS ещё до отправки в сеть — без редиректа 301, без round-trip на сервер.
Настройка на Nginx
server {
listen 443 ssl http2;
server_name example.com www.example.com;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
# Остальная конфигурация...
}
Параметр always критичен — без него заголовок не отправляется при ошибочных ответах (4xx, 5xx).
Настройка на Apache
<VirtualHost *:443>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
</VirtualHost>
Модуль mod_headers должен быть включён: a2enmod headers.
Пошаговое введение
Резкая активация HSTS с max-age=31536000 на продакшен-сайте — риск. Если потом выяснится, что SSL-сертификат не покрывает какой-то поддомен, пользователи не смогут попасть на него месяц и более.
Рекомендуемый порядок:
- Убедиться, что все поддомены работают по HTTPS
- Настроить автоматическое обновление сертификатов (Let's Encrypt + Certbot или аналог)
- Установить
max-age=300(5 минут), проверить неделю - Увеличить до
max-age=2592000(30 дней) - Установить
max-age=31536000; includeSubDomains - Подать заявку на включение в HSTS Preload List
HSTS Preload List
Заявка подаётся на hstspreload.org. После включения в список браузеры Chrome, Firefox, Safari знают о вашем HSTS-требовании ещё до первого визита пользователя. Убрать домен из списка — процедура долгая (несколько месяцев), поэтому включают только домены с устойчивой HTTPS-инфраструктурой.
Требования для preload:
-
max-ageне менее 31536000 - Директива
includeSubDomains - Директива
preload - Все поддомены должны поддерживать HTTPS
Срок реализации
Базовая настройка заголовка — 1–2 часа включая тестирование. Полный цикл до preload-статуса — 2–4 недели с учётом поэтапного наращивания max-age.







