nginx http模块11个阶段驱动模式详解
在nginx调用 ngx_http_process_request_headers() 方法读取完所有的header数据之后,就调用 ngx_http_process_request() 方法开始了请求的处理过程,这也就是nginx http模块开始处理请求的11个阶段的入口,本文则主要讲解nginx是如驱动http模块的11个阶段。 1. 处理入口 ngx_http_process_request() 关于 ngx_http_process_request() 方法,这里首先有两点需要读者理解的: nginx是在接收完header数据之后就开始进入http模块的11个阶段进行处理的,这主要是因为,相对于多变的body数据,nginx更关注如何控制header数据的处理; ngx_http_process_request() 方法只是一个入口方法,最终这个方法将会进入执行http模块11个阶段的调用中,而这个部分是会读取请求的body数据的。由于TCP是流式数据,也就是说一次接收并不一定能够完整的接收所有数据,而且http模块的11个阶段中有部分阶段也可能会要求再次进行当前阶段的调用,这就还是回归到事件框架中了,这个时候会把事件的回调函数设置为 ngx_http_request_handler() 方法,根据请求需要,其是可以不断的将控制权交给该方法,以进行再次调用。也就是说这里的