ホームページ >バックエンド開発 >PHPチュートリアル >3 つの ngx_http_request_t 構造を学習する Nginx

3 つの ngx_http_request_t 構造を学習する Nginx

WBOY
WBOYオリジナル
2016-07-28 08:26:281041ブラウズ

抜粋: http://blog.csdn.net/xiajun07061225/article/details/9189505 Jiang Yuyanyun のブログ

ngx_http_request_s は nginx の非常に重要な構造であり、http リクエスト処理のプロセス全体で実行されます。

以下では、ngx_http_request_s 構造体の HTTP フレームワークに関連する重要なメンバー変数について説明します。

[cpp]ビュー 無地コピー印刷?

  1. structngx_http_request_s {
  2. uint32_t 署名 /* "HTTP" */
  3. //対応するクライアント接続をリクエストします
  4. ngx_connection_t *connection;
  5. //すべてのHTTPモジュールを格納するコンテキスト構造体へのポインタの配列
  6. //リクエストに対応するメインレベルの設定構造を指すポインタの配列
  7. void
  8. **main_conf;
  9. //リクエスト配列に対応するsrvレベルの設定構造体へのポインタ
  10. void
  11. locレベルのポインタ配列構成構造
  12. void loc_conf
  13. /*
  14. ただし、このメソッドがリクエストのすべての業務を一度に処理できない場合は、制御を epoll タイム モジュールに返した後、リクエストが再度コールバックされると、
  15. を通じて処理されます。 Ngx_http_request_handler メソッド。このメソッドでの読み取り可能なイベントの処理は、read_event_handler を呼び出してリクエストを処理することです。
  16. つまり、http モジュールは、要求された読み取りイベントを最下層で処理するときに read_event_handler メソッドを再実装することを望んでいます
  17. */
  18. _http_even t_handler_pt read_event_handler; /上記のメソッドと同様です
  19. ngx_http_event_handler_pt write_event_handler
  20. #if (NGX_HTTP_CACHE)
  21. ngx_http_cache_t *キャッシュ
  22. #endif
  23. /
  24. // 上流メカニズムで使用される構造体 ngx_http_upstream_t*upstream
  25. ;
  26. //http リクエストの受信に使用されるバッファコンテンツ、主に http ヘッダーの受信部門
  27. ngx_buf_t *header_in;
  28. http_process_request_headers は http リクエストのヘッダーを受信して​​解析した後、解析された各 http ヘッダーを headers_in に追加します。でheaders のリンクされたリスト、 headers_in の他のメンバーも同時に構築されます
  29. ngx_http_headers_in_t headers_in;
  30. // http モジュールは、送信したい http 対応する情報を headers_out に配置します。 http フレームワークから headers_out のメンバーは http 応答パケットにシリアル化され、ユーザーに送信されます
  31. ngx_http_headers_out_t headers_out
  32. //リクエストの受信 本体のデータ構造
  33. ngx_http_request_body_t * Request_body
  34. // 接続を閉じる時間を遅らせます
  35. Time_t
  36. lingering_time;
  37. // 現在のリクエストの初期化時間
  38. //以下の9つのメンバーは、httpリクエストラインを受信して​​解析する際に関数ngx_http_process_request_lineメソッドによって解析される情報です
  39. ngx_uint_t ngx_uint_t メソッド //メソッド名
  40. ngx_uint_t http_version ; // プロトコルバージョン ngx_str_t request_line
  41. // Uri
  42. ユーザーリクエスト内の ngx_str_t 引数
  43. // ユーザーリクエスト; request 真ん中の url パラメータ
  44. ngx_str_t exten; // ユーザー拡張名によって要求されたファイル ngx_str_t unparsed_uri; ngx_str_t ngx_str_t method_name;
  45. // メソッド名の文字列ユーザーリクエスト
  46. ngx_str_t http_protocol;
  47. //データメンバーはリクエスト内の http 開始アドレスを指します
  48. /* は、クライアントに送信する必要がある http 応答を表します。 out は、headers_out でシリアル化された http ヘッダーを表す TCP ストリームを保持します。
  49. * ngx_http_output_filter メソッドを呼び出した後、送信される http パッケージ本体も out に保存されます。これは、http 応答を非同期に送信するための鍵となります。 */
  50. ngx_chain_t *out;
  51. /*現在のリクエストは、ユーザーによって送信されたリクエストまたは派生したサブリクエストである可能性があります。
  52. * main は、関連する一連の派生サブリクエストの元のリクエストを識別します。
  53. ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​メインによる現在のリクエストと現在のリクエストのアドレス。*/
  54. ngx_http_request_t *main;
  55. //現在のリクエストの親リクエスト (必ずしも元のリクエストではありません)
  56. ngx_http_request_t *parent ;
  57. // subrequest サブリクエストに関連する関数
  58. ngx_http_postponed_request_t *postponed
  59. ngx_http_post_subrequest_t *post_subrequest
  60. //All subrequest; - リクエストは、この単一リンクリストを通じてリンクされます
  61. ngx_http_posted_request_t *posted_requests;
  62. /*ngx_http_phase_handler_t 応答メソッドは、グローバル ngx_http_phase_engine_t 構造体配列で定義されます。 H p* および Phase_handler メンバーは配列と組み合わせて使用​​されます。リクエストが次回、シーケンス番号で指定された配列内のコールバック メソッドとして Phase_handler を実行する必要があることを示します */
  63. ngx_int_t NGX_HTTP_CONTENT_PHASE フェーズは、http モジュールがリクエストを処理する方法を提供します。 http モジュールによって実装される処理メソッド
  64. ngx_http_handler_pt content_handler;
  65. //NGX_HTTP_ACCESS_PHASE ノードがリクエストにアクセス許可があるかどうかを判断する必要がある場合、access_code を渡して、 http module 値が 0 の場合、アクセス許可があることを意味します。それ以外の場合はご利用いただけません。
  66. ngx_uint_t access_code;  
  67. ngx_http_variable_value_t *変数;  
  68. #if (NGX_PCRE)
  69. ngx_uint_t ncaptures;  
  70. int *キャプチャ;  
  71. u_char *captures_data;  
  72. #endif
  73. size_t limit_率;  
  74. /*ヘッダーなしのApache互換のレスポンスの長さを学習するために使用されます*/
  75. size_ t header_size;  
  76. //http请要求のすべての長さ、http包体を含む
  77. off_t request_length;  
  78. ngx_uint_t err_status;  
  79. ngx_http_connection_t *http_connection;  
  80. #if (NGX_HTTP_SPDY)
  81. ngx_http_spdy_stream_t *spdy_stream;  
  82. #endif
  83. ngx_http_log_handler_pt log_handler;  
  84. // このリクエストで特定のリソースが有効になった場合は、リクエストの完了時に解放する必要があり、このリクエストに所定の解放リソースを追加する方法が必要です员
  85. ngx_http_cleanup_t *クリーンアップ;  
  86. 未署名 サブリクエスト:8;  
  87. //参照数一般都はこの要求の原始要求上に作用します
  88. // 引用数、每派当生出子要求時、原始要求の数成员都会加一
  89. 符号なし カウント:8;  
  90. //妨害标志位、目前仅由aio使用 N unsigned block: 8;
  91. // ロゴビット: 1 は、卵白リクエストが非同期 IO を使用していることを示します
  92. unsigned AIO: 1;
  93. unsigned http_state:4;
  94. /* URI には "/." が付き、Win32 では "//" が付きます */
  95. unsign ed complex_uri:1; /* uri plus_in_uri:1;* uri space_in_uri:1; ;
  96. unsigned unsigned add_uri_to_alias:1;
  97. unsigned unsigned valid_unparsed_uri:1;
  98. //フラグビット: 1 の場合、 URL が書き換えられたことを意味します N unsigned uri_changed: 1;
  99. // reWrite を使用して URL を書き換えた回数を示します
  100. UNSIGNED URI_CHANGES: 4;
  101. unsigned request_body_in_file_only:1;
  102. 未署名 request_body_in_persistent_file:1;  
  103. 未署名 request_body_in_clean_file:1;  
  104. 未署名 request_body_file_group_access:1;  
  105. 未署名 request_body_file_log_level:3;  
  106. unsigned subrequest_in_memory:1;  
  107. 未署名 待機中:1;  
  108. #if (NGX_HTTP_CACHE)
  109. unsigned キャッシュ:1;  
  110. #endif
  111. #if (NGX_HTTP_GZIP)
  112. unsigned gzip_tested:1;  
  113. 署名なし gzip_ok:1;  
  114. unsigned gzip_vary:1;  
  115. #endif
  116. 未署名 プロキシ:1;  
  117. unsigned bypass_cache:1;  
  118. unsigned no_cache:1;  
  119. /*
  120. *
  121. のリクエストコンテキストデータを使用する代わりに* ngx_http_limit_conn_module および ngx_http_limit_req_module
  122. *リクエストの構造
  123. */
  124. unsigned limit_conn_set:1;  
  125. unsigned limit_req_set:1;  
  126. #if 0
  127. N 署名なしキャッシュ可能: 1;
  128. #Endif
  129. 署名なしチャンク: 1;
  130. unsigned header_only: 1;
  131. //フラグ ビット、1 は現在のリクエスト中のキープアライブ リクエストを示します
  132. unsigned keepalive:1 //遅延終了フラグ
  133. unsigned lingering_close:1 ; //フラグビット: 1 は、http リクエストのパッケージ本体が破棄されていることを示します
  134. unsigned
  135. //フラグビット: 1 は現在のリクエストを示しますステータスは内部ジャンプ
  136. unsigned error_page:1;
  137. unsigned filter_finalize:1; 未署名post_action:1; request_output: 1; unsigned header_sent: 1; 未署名のexpect_tested: 1;
  138. 未署名の root_tested:1;
  139. 完了:1;
  140. //バッファー内に送信するコンテンツがあるかどうかを示すフラグビット
  141. unsigned buffered: 4;
  142. unsigned main_filter_need_in_memory:1 ;
  143. unsigned filter_need_in_memory:1;
  144. unsigned allowed_ranges:1; X_STAT_STUB)
  145. unsigned stat_reading:1;
  146. unsigned stat_writing: 1; stat_writing: */
  147. //ステートマシンが http を解析するとき、state は現在の解析ステータスを表すために使用され、それが完了した http リクエストラインを構成するかどうかを確認する必要があります。
  148. NGX_UINT_THEADER_T STATE;
  149. /*
  150. * リクエスト行の解析後に再利用できるメモリ
  151. * ngx_http_ephemer経由al_t
  152. */
  153. u_char *uri_start;  
  154. u_char *uri_end;  
  155. u_char *uri_ext;  
  156. u_char *args_start;  
  157. u_char *request_start;  
  158. u_char *request_end;  
  159. u_char *method_end;  
  160. u_char *schema_start;  
  161. u_char *schema_end;  
  162. u_char *host_start;  
  163. u_char *host_end;  
  164. u_char *port_start;  
  165. u_char *port_end;  
  166. unsigned http_minor:16;  
  167. unsigned http_major:16;  
  168. }; 

以上は、Nginx 学の 3 つの ngx_http_request_t 構造体であり、側面の内容が含まれており、PHP 教則に関心のある友人の助けになることを望みます。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。