你以为Nginx只会转发请求?它还能让服务器内部发起“子请求”悄悄传递数据,就像公司部门间的机密对话。
理解Nginx子请求:什么是“请求中的请求”
简单来说,Nginx子请求是由Nginx正在处理的请求在Nginx内部发起的一种级联请求。它们在外观上很像HTTP请求,但实现上却和HTTP协议乃至网络通信一点儿关系都没有。它是Nginx内部的一种抽象调用,目的是为了方便用户把“主请求”的任务分解为多个较小粒度的“内部请求”。
- 主请求:由HTTP客户端从Nginx外部发起的请求。
- 子请求:由Nginx正在处理的请求在Nginx内部发起的一种级联请求。
当一个请求发起一个“子请求”的时候,按照Nginx的术语,习惯把前者称为后者的“父请求”。值得一提的是,Apache服务器中其实也有“子请求”的概念。
子请求的应用场景:何时需要这种“内部对话”
子请求在以下场景中特别有用:
- 身份验证:通过
ngx_http_auth_request_module模块,基于子请求的结果实现客户端授权。 - 内容组装:通过
ngx_http_addition_module模块,在响应前后添加子请求返回的内容。 - 数据聚合:从多个内部接口获取数据并组装成一个统一的响应。
- 权限检查:在继续处理请求前,验证用户是否有权限访问特定资源。
核心模块深度解析:子请求的数据回传机制
1. ngx_http_addition_module模块
ngx_http_addition_module模块是一个在响应之前和之后添加文本的过滤器。它可以通过子请求响应内容来更改response响应体,位置可以是response前或者后。
核心指令:
add_before_body uri;:在响应正文之前添加给定的子请求而返回的文本。add_after_body uri;:在响应正文之后添加给定的子请求而返回的文本。addition_types mime-type ...;:除了“text/html”之外,还允许在具有指定MIME类型的响应中添加文本。
此模块默认未构建,应使用--with-http_addition_module配置参数启用。
Nginx子请求数据回传详解

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



