Настройка HTTP-кода ответа при блокировке (NGINX)¶
При блокировке запроса фильтрующей нодой ПроAPI Защита 2.0 можно настроить HTTP-код, который будет возвращён в ответе.
Для настройки используется директива NGINX wmx_api_block_status_code.
Настройка кода ответа¶
В качестве значения директивы можно указать HTTP-код из диапазона от 400 до 599 (все коды ошибок HTTP).
Синтаксис:
wmx_api_block_status_code <HTTP_CODE>;
Например, чтобы при блокировке запроса возвращать код 451:
wmx_api_block_status_code 451;
После изменения конфигурации проверьте ее корректность и перезагрузите NGINX.
Поддерживаемые варианты поставки¶
Директива wmx_api_block_status_code поддерживается в следующих вариантах поставки фильтрующей ноды:
| Вариант поставки | Поддержка |
|---|---|
| Установка из RPM-пакета | Да |
| Запуск ноды в Docker-контейнере | Да |
Особенности для Docker¶
При использовании Docker-поставки директиву необходимо прописать в файле конфигурации NGINX, который находится внутри контейнера:
-
Подготовьте свой собственный конфигурационный файл NGINX с добавленной директивой.
-
Передайте файл в контейнер при запуске.
-
После изменения конфигурации перезагрузите NGINX или перезапустите контейнер в соответствии с принятой схемой развертывания.
Обратите внимание
Переменная окружения, соответствующая директиве wmx_api_block_status_code, отсутствует. Поэтому настроить HTTP-код с помощью параметров запуска контейнера нельзя – только через конфигурационный файл NGINX.
Рекомендация по настройке страницы блокировки средствами NGINX¶
Эта настройка является примером конфигурации NGINX и не относится к функциональности ПроAPI. Модуль позволяет настроить только HTTP-код ответа при блокировке.
Пример конфигурации
В следующем примере при блокировке NGINX возвращает код 451 и HTML-страницу /etc/nginx/error-pages/wmx-api-blocked.html:
server {
# HTTP-код ответа при блокировке
wmx_api_block_status_code 451;
# Пользовательская страница для ответа с кодом 451
error_page 451 /wmx-api-blocked.html;
location = /wmx-api-blocked.html {
internal;
root /etc/nginx/error-pages;
}
# Остальная конфигурация фильтрующей ноды
# ...
}
Код в директиве error_page должен совпадать с кодом, указанным в wmx_api_block_status_code.
Создайте файл /etc/nginx/error-pages/wmx-api-blocked.html:
Пример
<!doctype html>
<html lang="ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Запрос заблокирован</title>
</head>
<body>
<h1>Запрос заблокирован</h1>
<p>Обращение к ресурсу было ограничено в соответствии с политикой безопасности.</p>
</body>
</html>
Использование динамических значений¶
Если в HTML-странице необходимо выводить переменные NGINX, например, идентификатор запроса, можно использовать SSI. Для этого включите обработку SSI в location страницы:
Обработка SSI
location = /wmx-api-blocked.html {
internal;
root /etc/nginx/error-pages;
ssi on;
}
Пример вставки переменной в HTML
<p>Идентификатор запроса: <!--# echo var="request_id" --><p>
Если страница содержит только статический HTML, включать SSI не требуется.
Использование в Docker¶
При развертывании фильтрующей ноды в Docker добавьте HTML-файл в контейнер или подключите каталог со страницей как volume. Путь внутри контейнера должен соответствовать значению, указанному в конфигурации NGINX.
После изменения конфигурации проверьте ее и перезагрузите NGINX. Затем отправьте запрос, который будет заблокирован, и убедитесь, что в ответе возвращаются настроенный HTTP-код и пользовательская HTML-страница.