Перейти к содержанию

Настройка 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-страница.