-
ngx_event_accept
接受客户端的 TCP 连接。这个处理阶段是对监听 socket 的读请求的响应,并且会在该阶段创建ngx_connection_t
对象,然后每个 Nginx 的监听器会将新的连接对象告知给下一个处理阶段。对于 HTTP 连接来说就是ngx_http_init_connection(c)
-
ngx_http_init_connection
执行 HTTP 连接早期的初始化工作,并且创建ngx_http_connection_t
对象,并将该对象作为ngx_connetion_t
的 data 成员赋值。代理协议解析以及SSL
握手也是在这个阶段开始进行的。 -
ngx_http_wait_request_handler
是在 socket 接收到客户端发送数据后触发的,并且在该阶段创建了ngx_http_request_t
对象并替换ngx_connection_t
的data
成员。 -
接下来是
ngx_http_process_request_line
阶段,该阶段尝试读取请求行数据,并作为ngx_connection_t
的buffer
成员赋值。事实上,该buffer
也将请求头的数据大小考虑在内, 该 buffer 的大小初始化是由client_header_buffer_size
指令控制的,如果不够大,则由large_client_header_buffers
指令分配更大的空间 -
接下来自然是
ngx_http_process_request_header
阶段。该阶段是由ngx_http_process_request_line
设置的下一个处理阶段。 -
ngx_http_core_run_phases
阶段是在请求行和请求头都解析完成后执行的。该阶段负责ngx_http_post_read_phase
到ngx_http_content_phase
的执行过程,最后将请求阶段传递到过滤器中。该阶段还没必要将响应数据吐给客户端,而是将响应数据通过buffer
存起来,等待ngx_http_final_request
再吐出去。 -
当产生所有的响应数据或者错误数据后,
ngx_http_final_request
阶段开始执行,如果在该阶段数据没有完全发送给客户端,那么还需要设置ngx_http_writer
来完成最后的数据发送。 -
当所有的响应数据都发送给客户端后,
ngx_http_final_connection
开始执行。对于设置有keepalive
特性的执行ngx_http_set_keepalive
来结束整个请求,并等待下一个请求的到来,否则执行ngx_http_close_connection
来结束整个请求和整个连接。
nginx处理一个http请求过程
于 2020-09-02 14:05:57 首次发布