eval

`eval` 指令允许将子请求的响应捕获到变量中,以便在 NGINX 配置中后续使用。

语法eval variable_name { subrequest_commands; };
默认值none
上下文location
参数block (1+)

说明

eval 指令在 NGINX 中是由 ngx_eval 模块提供的一个强大功能,能够对 HTTP 子请求进行求值,从而将这些子请求的响应存储到变量中。这对于在主请求处理流程中利用上游服务、数据库或其他资源的输出特别有用。该指令可以接受一个或多个子请求处理指令块,每个块用于根据所提供的指令检索特定数据。捕获的响应随后可以通过标准的 NGINX 变量语法进行处理或分析。

eval 使用时,包含的块可以包含诸如 drizzle_querypostgres_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 中不正确处理内容类型可能导致响应解析错误。

← 返回所有指令