10、http模块调用流程

发布时间 2024-01-12 16:26:58作者: ccblblog

http模块处理时序图

image

  • worker 进程会在一个循环语里反复调用事件模块,检测网络事件。当事件模块检测到某个客户端发起的 TCP 请求时(接收到 SYN包),将会为它建立 TCP连接,成功建立连接后根据nginx.conf文件中的配置会交由HTTP框架处理。
  • HTTP框架会试图接收完整的HTTP头部,并在接收到完整的 HTTP 头部后将请求分发到具体的HTTP模块中处理。这种分发策略是多样化的,其中最常见的是根据请求的URI和nginx.conf里location 配置项的匹配度来决定如何分发。
  • HTTP 模块在处理请求的结束时,大多会向客户端发送响应,此时会自动地依次调用所有的 HTTP 过滤模块,每个过滤模块可以根据配置文件决定自己的行为。例如,gzip 过滤模块根据配置文件中的 gzip on | off来决定是否压缩响应。
  • HTTP处理模块在返回时会将控制权交还给HTTP框架,如果在返回前设置了subrequest,那么HTTP框架还会继续异步地调用适合的 HTTP 模块处理子请求开发HTTP模块时,首先要注意的就是 HTTP 框架到具体的HTTP 模块间数据流的传递,以及开发的HTTP 模块如何与诸多的过模块协同工作