eval
`eval` 指令允许将子请求的响应捕获到变量中,以便在 NGINX 配置中后续使用。
Evaluate memcached or proxy response into a variable
·
location
语法eval variable_name { subrequest_commands; };
默认值none
上下文location
参数block (1+)
说明
eval 指令在 NGINX 中是由 ngx_eval 模块提供的一个强大功能,能够对 HTTP 子请求进行求值,从而将这些子请求的响应存储到变量中。这对于在主请求处理流程中利用上游服务、数据库或其他资源的输出特别有用。该指令可以接受一个或多个子请求处理指令块,每个块用于根据所提供的指令检索特定数据。捕获的响应随后可以通过标准的 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 中不正确处理内容类型可能导致响应解析错误。