ホームページ  >  記事  >  運用・保守  >  nginx が http リクエストを処理する方法

nginx が http リクエストを処理する方法

(*-*)浩
(*-*)浩オリジナル
2019-06-04 16:20:475862ブラウズ

nginx の http リクエストの処理は、nginx の最も重要な機能であり、最も複雑な部分です。実行プロセスについては大まかに説明できます。

nginx が http リクエストを処理する方法

リクエスト ヘッダーを読む;

リクエストを解析するline;

リクエスト ヘッダーを解析します;

リクエスト本文を読み取ります;

リクエスト ヘッダーを解析します。最も重要な部分、つまり多段階処理です。nginx はリクエスト処理を 11 段階に分割します。これは、nginx がリクエスト行とリクエストヘッダーを読み取った後、リクエストを構造体 ngx_http_request_t にカプセル化し、各ステージのハンドラーがこの ngx_http_request_t に基づいて、uri の書き換え、権限制御、パス検索、コンテンツの生成、ロギングなどのリクエストを処理します。

結果をクライアントに返します;

ngx_http_process_request_line 関数の主な機能は、リクエスト ラインを解析することです。また、ネットワーク IO 操作が関係しているため、短いリクエスト ラインでも一度に読み取れない可能性があるため、前の ngx_http_init_request 関数では、ngx_http_process_request_line関数が設定されている 読み取りイベントの処理関数には、固有の ngx_event_t * 型パラメーターのみがあり、関数の開始時に、タイムアウト イベントであるかどうかを判断する必要もあります。タイムアウト イベントである場合は、リクエストと接続を閉じます。それ以外の場合は、通常の解析プロセスを開始します。まず ngx_http_read_request_header 関数を呼び出してデータを読み取ります。

サードパーティのモジュールもここに登録されているため、多段階処理は nginx モジュールの最も重要な部分です;

たとえば、誰かが次のようなサードパーティのモジュールを作成しました。ページ キャッシュ モジュールには nginx と memcache を使用します。memcache を redis クラスターなどに置き換えることもできます。

そして、nginx の多段階処理は、Python や golang Web フレームワークのミドルウェアに似ています。後者は主に、ハンドラーを階層化するデコレーター モード、カプセル化、nginx は配列 (リンク リスト) を使用して複数段階のハンドラーを結合し、ハンドラーのリンク リストに従ってそれらを実行します;

送信されたユニフォーム リソース ロケーター (URL)リソースの場合、Web サーバーが行う必要があるのは、URL をローカル ファイル システムのパスにマップし、対応するファイルを読み取ってクライアントに返すことだけです。しかし、これは初期のインターネットの要求にすぎませんでしたが、現在ではインターネットにはさまざまな複雑な要求があり、Web サーバーはセキュリティや権限制御、マルチメディア コンテンツ、動的な Web ページなどの問題を処理する必要があります。これらの複雑な要件により、Web サーバーはもはや短いプログラムではなく、慎重に設計してモジュール化する必要があるシステムになっています。

nginx の優れたモジュール性は、リクエスト処理プロセスの多段階分割に反映されています。多段階処理プロセスは組み立てラインのようなものです。1 つの nginx プロセスは、異なる段階で複数のリクエストを同時に処理できます。 nginx を使用すると、開発者は処理プロセスのどの段階でもモジュールを登録でき、起動フェーズ中に、nginx は各段階で登録されたすべてのモジュール処理関数を順番に実行チェーンに編成します。

Nginx 関連の技術記事の詳細については、Nginx の使用法チュートリアル 列にアクセスして学習してください。

以上がnginx が http リクエストを処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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