- 段階(ngx_http_init_connectionを)受け入れます:
- 構造を分配Ngx_http_connection_t。
- FDは、後続のクエリ・サーバのためのHC-> addr_conf割当ブロックのアドレスおよびポートです。
- 再利用可能なコネクタが提供され、タイムアウト時間がpost_accept_timeoutで、ファイルディスクリプタ新fd、設定されたリードタイムアウトを追加します。
REV:ngx_http_wait_request_handler WEV(この時点では、どのようなデータが読み込まれません。):
ngx_http_empty_handler
- 第1の読み出し段階(ngx_http_wait_request_handler):
- クライアントヘッダを格納するためのC->バッファ(cscf-> client_header_buffer_sizeサイズ)を分配します。
- RECVコールは、パケットヘッダを受信しました。
- ngx_http_request_t作成。
REV:ngx_http_process_request_line(受信サイクル要求ライン、ライン解決要求)
WEV:ngx_http_empty_handler
- ステージ要求行(ngx_http_process_request_line):
- R-> header_in(C->バッファ)にサイクルRECV、。
- R-> URI、R-> argsを、R-> EXTENを備え、URIを解析します。
- リクエストラインの処理は終了します。
REV:ngx_http_process_request_headers;(ループが要求ヘッダー、要求ヘッダー解析を受ける)は
WEV:ngx_http_empty_handler
- ステージ要求ヘッダ(ngx_http_process_request_headers):
- R-> header_in(C->バッファ)にサイクルRECV、。
- 解決要求ヘッダ、R-> headers_in.headersに格納されています。
- 解析请求头结束后,调用ngx_http_process_request,进行11阶段和子请求处理。
rev:ngx_http_request_handler
——read_event_handler->ngx_http_block_reading (主请求读停止,子请求处理)
wev:ngx_http_request_handler
——write_event_handler->ngx_http_core_run_phases (11阶段,子请求处理)
- 十一阶段:(读触发)
- 在r->content_handler存在情况下,调用content_handler。
rev:ngx_http_request_handler
——read_event_handler->ngx_http_block_reading (子请求处理)
wev:ngx_http_request_handler
——write_event_handler->ngx_http_request_empty_handler (子请求处理)
- content_handler阶段:(ngx_http_proxy_handler)
- 分配ngx_http_upstream_t结构体,并根据上游的协议类型,为upstream分配不同的回调函数,例如:
create_request:创建上游请求
process_header:处理上游响应
finalize_request:结束上游请求
input_filter_init:input_filter初始化
input_filter:上游响应的处理函数 - 无请求体情况,直接进入上游初始化(ngx_http_upstream_init);
- 调用u->create_request将全部请求放入u->request_bufs(ngx_chain_t);
- 建立上游连接(ngx_http_upstream_connect)。
rev:ngx_http_upstream_handler
——read_event_handler->ngx_http_upstream_process_header (处理上游响应)
wev:ngx_http_upstream_handler
——write_event_handler->ngx_http_upstream_send_request_handler
(向上游发送请求)
- request_body_no_buffering=0的情况(缓存请求体):
1.不调用ngx_http_upstream_init建立上游;
2.读事件触发请求体接收,直至请求体读取完成;
3.回调rb->post_handler,即建立上游。
rev:ngx_http_request_handler
——read_event_handler->ngx_http_read_client_request_body_handler(读取过程中)
——read_event_handler->ngx_http_block_reading(读取结束后) (读取请求体)
wev:ngx_http_request_handler
——write_event_handler->ngx_http_request_empty_handler (子请求处理)
- request_body_no_buffering=1的情况(不缓存请求体):
1.第一次读取结束后,设置r->reading_body = 1;
2.立即建立上游;
3.上游写事件触发时,将判断r->reading_body位,并不断读取请求体并发送至上游,直至请求体读取完成。
rev:ngx_http_request_handler
——read_event_handler->ngx_http_block_reading
(请求体下游读取一次后,后续的请求体不再由下游套接字触发接收,而是由上游的写事件触发。子请求处理)
wev:ngx_http_request_handler
——write_event_handler->ngx_http_request_empty_handler (子请求处理)
- r->discard_body = 1的情况:
rev:ngx_http_request_handler
——read_event_handler->ngx_http_discarded_request_body_handler
(请求体只读不发) wev:ngx_http_request_handler
——write_event_handler->ngx_http_request_empty_handler (子请求处理)
- 上游请求发送阶段:(ngx_http_upstream_send_request)
- 对于首次请求发送(!u->request_sent),调用ngx_output_chain,发送u->request_bufs和r->request_body->bufs中的请求,直到请求发送完毕;
- 非首次发送,只需要发送r->request_body->bufs。
- 如果request_body_no_buffering = 0,发送一次就结束。否则,将循环读取下游包体,并循环发送。
rev:ngx_http_upstream_handler
——read_event_handler->ngx_http_upstream_process_header (处理上游响应)
wev:ngx_http_upstream_handler
——write_event_handler->ngx_http_upstream_dummy_handler
(因请求发送完成,所以上游写事件不再处理)
- 位相応答のヘッダ(ngx_http_upstream_process_header)
U->バッファに1 RECVサイクル;
2.u-> process_headerライン解像度応答および応答ヘッダー、分析結果U-> headers_inに格納されている;
3.レスポンスヘッダにR- > headers_out;
レスポンスヘッダを送信4.ngx_http_send_header。
上流:
--read_event_handler->、読み取り下流(受信処理体に応答してアップストリーム送信)--write_event_handler-> ngx_http_upstream_dummy_handlerで関数を呼び出す終わる書き込みngx_http_upstream_process_non_buffered_upstream-
--read_event_handler->(不ngx_http_block_reading:(処理されていない)ダウンストリーム
処理)--write_event_handler - >最後に上流で機能を呼び出す読み取り、書き込みngx_http_upstream_process_non_buffered_downstream-
(その応答の送信の下流)
- 位相応答体:
すなわちngx_http_upstream_process_non_buffered_requestコール
U-に1サイクルRECV、>緩衝液;
2. ngx_http_output_filterコールフィルタリング、および送信。