nginx の HTTP モジュールを作成する場合、リクエスト開始時のアクセス許可の有無、コンテンツ生成時のフィルタリングなどの処理など、さまざまな目的を達成するために、各段階で HTTP リクエストを適切に処理する必要があります。コンパイルされた nginx モジュールに登録されている処理フェーズが正しくない場合、処理したいコンテンツが現時点では実際には利用できないなど、目的の結果が得られない可能性があります。 さまざまな処理要件を満たすために、nginx 内で複数のフェーズ タイプが定義されています (ngx_http_core_module.h では、バージョンによって定義が異なります)。 typedef列挙型{ NGX_HTTP_POST_READ_PHASE = 0、 NGX_HTTP_SERVER_REWRITE_PHASE、 NGX_HTTP_FIND_CONFIG_PHASE、 NGX_HTTP_REWRITE_PHASE、 NGX_HTTP_POST_REWRITE_PHASE、 NGX_HTTP_PREACCESS_PHASE、 NGX_HTTP_ACCESS_PHASE、 NGX_HTTP_POST_ACCESS_PHASE、 NGX_HTTP_TRY_FILES_PHASE、 NGX_HTTP_CONTENT_PHASE、 NGX_HTTP_LOG_PHASE } ngx_http_phases; 対応する意味は次のとおりです。 NGX_HTTP_POST_READ_PHASE = 0 // 読み取り要求フェーズ NGX_HTTP_SERVER_REWRITE_PHASE // URI 変換フェーズ NGX_HTTP_FIND_CONFIG_PHASE // フェーズを実行するための対応する構成を検索 NGX_HTTP_REWRITE_PHASE // URI 変換フェーズ (ここではあまり明確ではありません) NGX_HTTP_POST_REWRITE_PHASE // 変換された URL 結果を処理するステージ NGX_HTTP_PREACCESS_PHASE // 権限チェックの準備ステージ NGX_HTTP_ACCESS_PHASE // 権限チェックのステージ NGX_HTTP_POST_ACCESS_PHASE // 権限チェックの結果処理ステージ NGX_HTTP_TRY_FILES_PHASE // 構成内の try_files ステージの処理 NGX_HTTP_CONTENT_PHASE // 生成された戻りデータのステージの処理 (ここでは詳細すぎるとは考えていません。もちろん、フィルターは無視できます) NGX_HTTP_LOG_PHASE //リクエストが完了し、リクエストが閉じられた後に処理されるログ処理フェーズを記録します この構成から、リクエストを処理する際の nginx のプロセス全体を分析できます。プロセスは最初から最後まで実行されます。最後に LOG が実行されていることがわかります。コンテンツ セグメントの処理は、通常、フィルター モジュールで行われます。NGX_HTTP_LOG_PHASE ステージに登録された処理セグメントは、返されたデータを取得できません。返されたデータは、クライアントに送信された後、直接解放されます。したがって、各段階を処理する際には、各段階のデータ準備状況を明確にする必要があります。 通常、独自の処理モジュールは次の方法で登録できます。 静的 ngx_int_t ngx_http_xxx_init(ngx_conf_t *cf) { ngx_http_handler_pt *h; ngx_http_core_main_conf_t *cmcf; cmcf = ngx_http_conf_get_module_main_conf(cf、ngx_http_core_module); h = ngx_array_push(&cmcf->phases[NGX_HTTP_CONTENT_PHASE].handlers); h == NULLの場合{ NGX_ERROR を返します。 } ngx_http_xxx_handler をハンドラに追加します。 NGX_OK を返します。 } ngx_http_xxx_up_handler の戻り値は次のようになります。 NGX_OK //処理が成功し、次のステージに進みますNGX_DECLINED //処理を中止しますNGX_AGAIN || NGX_DONE //処理が完了しました。この値を返すとリクエストがトリガーされますNGX_ERROR || NGX_HTTP_.. //処理エラーまたはHTTPのその他のステータス値 さらに、NGX_HTTP_CONTENT_PHASE フェーズには、次のように登録する別の方法があります。 静的文字 * ngx_http_xxx_server(ngx_conf_t *cf、ngx_command_t *cmd、void *conf) { ngx_str_t *値; ngx_url_t u; ngx_http_core_loc_conf_t *clcf; clcf = ngx_http_conf_get_module_loc_conf(cf、ngx_http_core_module); clcf->ハンドラ = ngx_http_xxx_handler; clcf->name.data[clcf->name.len - 1] == '/'の場合{ clcf->auto_redirect = 1; } NGX_CONF_OK を返します。 } しかし、この方法では、やらなければならないことが多すぎます。ほとんどの場合、上流の統合やリクエストの特別な処理を考慮する必要があります。たとえば、分散ストレージの分散では、要求されたデータを特別な SERVER に直接渡してコンテンツを取得するなど、リクエスト処理をファイルシステムに関連付ける必要があります。へへ。 nginx の http リクエスト処理の各段階の詳細分析に関するこの記事はこれで終了です。nginx の http リクエスト処理の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: 複数のフィールドを変更するためのMysql更新の構文の詳細な分析
インターネットで見つけた方法は効果的ですinclude によって導入されたフッター ファイルとヘッダ...
目次序文1. Nginx+Tomcat 2. Nginxサーバーを構成する3. Tomcatアプリケ...
<br />一般的なゲストブック、フォーラムなどでは、テキスト入力ボックスが使われていま...
目次1. 基本概念2. データベース管理技術の開発3. リレーショナルデータベース(RDBMS)の概...
今日 Docker コンテナを作成したとき、誤ってイメージの名前を間違って入力しました。その結果、コ...
では、早速スクリーンショットを実行してみましょう。黒い駒はプレイヤーの位置、赤い駒はコンピュータの位...
Vueのシンプルなタイマーを参考にしてください。具体的な内容は以下のとおりです原理: setInte...
序文データ型変換とは何ですか?フォームまたはプロンプトを使用して取得されるデフォルトのデータ型は文字...
この記事では、モバイルとPCで簡単なドラッグアンドドロップ効果を実現するためのTypescript ...
async_hooks モジュールは、Node.js バージョン 8.0.0 に正式に追加された実験...
無線インタラクションにずっと興味があったので、今回は実践してみようと思います〜この分析と評価は iO...
問題の説明: mysqladmin.exe を使用してコマンドを実行すると、次のエラー メッセージが...
springboot には tomcat サーバーが組み込まれているため、jar パッケージにパッケ...
チーム開発のプロセスでは、プロジェクトの安定性、コードの効率性、管理の利便性のために、内部開発および...
目次導入なぜわざわざ?落とし穴のあるコミュニティソリューション(Vue を例に挙げる)現時点では良い...