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 встановлює 31 536 000 секунд (~1 рік).
- includeSubDomains – (необов’язково) – поширює HSTS на всі субдомени (
subdomain.example.com
,www.example.com
тощо), забезпечуючи їх захист. - preload – індикатор для додавання домену до спеціального списку HSTS у браузерах. Сам по собі не дає ефекту, але потрібен для подачі заявки на включення до HSTS Preload List (потребує завчасної реєстрації, про це нижче).
- always – гарантує додавання заголовка у всіх відповідях.
Перевірка та тестування
Після налаштування важливо протестувати сайт та впевнитись, що він працює коректно. Для додаткових можливостей можна зареєструвати сайт у HSTS Preload List.
Перевірка конфігурації Nginx
Якщо помилок немає, перезавантажте сервер:
Перевірка заголовків HSTS
Запустіть команду curl
:
Очікуємо на відповідь з використаними у прикладі змінними:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Поширенні помилки та їх вирішення
Помилка: 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 + Кеш).