6.1.8 Настройка HSTS для сайта
HSTS (HTTP Strict Transport Security) — это механизм веб-безопасности, который позволяет веб-сайту заявить, что он должен посещаться только через защищённое соединение HTTPS. Другими словами, после включения HSTS браузер, который посетил сайт, в дальнейшем будет подключаться к нему только через HTTPS и автоматически переводить все попытки доступа через незащищённый HTTP на HTTPS. Это помогает защитить пользователей и сайт от атак типа “SSL stripping” и “downgrade attack”, в частности от понижения уровня безопасности (перевод с HTTPS на HTTP) и перехвата сеансовых cookie. В этой инструкции мы рассмотрим, как включить HSTS в конфигурации Nginx. HSTS определён как стандарт IETF (RFC 6797).
Преимущества HSTS
- Защита от атак. После первого посещения через HTTPS браузер блокирует любые HTTP-запросы, предотвращая понижение уровня безопасности;
- Гарантия безопасного соединения. Пользователь не сможет проигнорировать ошибки сертификата, что исключает возможность подмены сайта;
- Автоматический переход на HTTPS. Даже если пользователь вводит адрес без протокола или с http://, браузер автоматически изменяет его на https://;
- Ускорение загрузки. Исключает необходимость дополнительного 301-редиректа с HTTP на HTTPS, что экономит время;
- Повышение уровня безопасности. Многие аналитические сервисы оценивают наличие HSTS как показатель надёжности сайта.
Ограничения и риски HSTS
Важно: при добавлении HSTS-заголовка ваш сайт будет кэшироваться на стороне клиента. И в случае, если вы захотите удалить его до истечения max-age
, ваш сайт будет недоступен для тех же клиентов. До момента, пока в браузере не выполнится сброс HSTS-политики (об этом ниже).
- Не защищает первый визит. Пока пользователь не открыл сайт через HTTPS, первый запрос может быть уязвим для атак. Решение – HSTS Preload List, который добавляет сайт в списки защищённых доменов браузеров, об этом далее.
- Ошибки конфигурации могут заблокировать доступ. Если включён
includeSubDomains
, а какие-то поддомены не поддерживают HTTPS, они станут недоступными. - Зависимость от SSL-сертификата. Если сертификат истечёт или будет настроен неправильно, сайт станет полностью недоступным.
- Возможность использования для слежки (supercookies). Злоумышленники могут создать уникальный отпечаток браузера на основе HSTS.
- Не защищает от атак на HTTPS/TLS. HSTS гарантирует только принудительное использование HTTPS, но не устраняет уязвимости самого SSL/TLS.
Подготовка сервера
Важно: перед настройкой HSTS необходимо убедиться, что:
- SSL-сертификат установлен и сайт работает по HTTPS протоколу;
- Веб-сервер Nginx установлен и корректно настроен;
- Наличие root-доступа. Если Вы клиент нашего shared-хостинга и у Вас отсутствует доступ root, тогда активировать HSTS Вы можете с помощью обращения в Службу поддержки.
Перед выполнением любых подобных операций рекомендуется обновить Вашу систему. Выполнить это можно одной из следующих команд (зависит от ОС):
Пример для Debian/Ubuntu
Пример для CentOS/AlmaLinux/RockyLinux
Настройка HSTS в конфигурации Nginx
HSTS является политикой веб-сервера и ее активация требует изменения конфигурационного файла Nginx. Перед выполнениям подобных действий рекомендуется сделать бекап конфигурации или всей системы.
1. Откройте конфигурационный файл Nginx:
Совет: если Вы пользуетесь виртуальным или выделенным сервером с панелью управления ISPManager4, тогда Вы также можете отредактировать конфигурацию Nginx Вашего домена следующим образом:

2. В блоке server {}
добавляем:
Разбор параметров HSTS:
max-age=31536000
– задает время действия заголовка HSTS в секундах. Например, max-age=31536000 задаёт 31536000 секунд (~1 год).includeSubDomains
– (необязательно) – распространяет HSTS на все поддомены (subdomain.example.com, www.example.com и т. д.), обеспечивая их защиту.preload
– индикатор для добавления домена в специальный список HSTS в браузерах. Сам по себе он не даёт эффекта, но нужен для подачи заявки на включение в preload-список браузеров.always
– гарантирует добавление заголовка во всех ответах.
Проверка и тестирование
После настройки важно протестировать сайт и убедиться, что он работает корректно. Для дополнительных возможностей можно зарегистрировать сайт в HSTS Preload List.
Проверка конфигурации Nginx:
Если ошибок нет, перезапустите сервер:
Проверка заголовков HSTS:
Запустите команду curl
:
Ожидаемый ответ с используемыми в примере переменными:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload"always;
Частые ошибки и их решения:
Ошибка: nginx: [emerg] unknown directive "add_header"
Решение:
- Убедитесь, что Nginx установлен с модулем headers (
--with-http_headers_module
). - Проверьте конфигурацию на синтаксические ошибки (
nginx -t
).
Заголовок HSTS отсутствует в ответе
Решение:
- Проверьте, что HTTPS работает корректно.
- Убедитесь, что заголовок Strict-Transport-Security добавлен в server { listen 443 ssl; }.
Сайт больше не работает по HTTPS
Решение: Это нормальное поведение HSTS. Используйте команду в браузере для сброса HSTS-политики, например:
- В Chrome:
chrome://net-internals/#hsts
- В Firefox:
about:support
→ “Очистить недавнюю историю” (Cookies + Кэш).