eval

Директива `eval` позволяет захватывать ответ подзапроса в переменную для последующего использования в конфигурации NGINX.

Синтаксисeval variable_name { subrequest_commands; };
По умолчаниюnone
Контекстlocation
Аргументыblock (1+)

Описание

Директива eval в NGINX — мощная возможность, предоставляемая модулем ngx_eval, которая позволяет выполнять HTTP-подзапросы и сохранять их ответы в переменную. Это особенно полезно для использования вывода upstream-сервисов, баз данных или других ресурсов в основном потоке обработки запроса. Директива может принимать один или несколько блоков инструкций для обработки подзапросов, каждый из которых предназначен для получения конкретных данных на основе заданных директив. Захваченные ответы затем можно обрабатывать или анализировать с помощью стандартного синтаксиса переменных NGINX.

При использовании eval содержимое блока может включать команды, такие как drizzle_query или postgres_query, а также опции для настройки контекста выполнения, включая обработку типов содержимого и параметр сохранения содержимого в памяти. Также можно задать размер буфера для ответов, что влияет на объём данных, который может быть захвачен до усечения, что важно при обработке больших полезных нагрузок из ответов подзапросов. Кроме того, использование eval можно сочетать с другими директивами обработки, например с if, чтобы создавать динамические сценарии обработки запросов на основе полученных данных.

Важно помнить, что хотя директива eval гибкая и мощная, она может усложнять обработку ошибок и отладку из‑за асинхронной природы обработки подзапросов. Разработчикам рекомендуется применять тщательное управление конфигурацией и стратегии тестирования, чтобы гарантировать корректную работу оценок подзапросов.

Пример конфига

location = /data {
    eval $response {
        drizzle_query "SELECT * FROM users";
        drizzle_pass my_mysql_backend;
    }
    if ($response ~ 'success') {
        return 200;
    }
    return 404;
}

Убедитесь, что контекст, в котором применяется eval, поддерживает вызываемые операции подзапросов.

Размер буфера должен быть правильно настроен, чтобы избежать усечения больших ответов.

Неправильная обработка типов контента в eval может привести к некорректному разбору ответа.

← Ко всем директивам