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更新の構文の詳細な分析
序文最近、MySQL 6.0.x 以降の jar を使用する場合、コード URL リンクで serv...
1. MySQL 5.7 のアンインストール1.1查看yum是否安裝過mysql CD yum li...
数日前、同僚がポイントモールプロジェクトを受け取りました。このプロジェクトには、カードやクーポンをギ...
1. テーブルを作成する テーブル「学生」を作成( `id` int(11) NULLではない、 `...
表示する svg 画像を追加すると、React はファイルが見つからないというメッセージを表示します...
JSON (JavaScript Object Notation、JS Object Notatio...
1 Linuxディストリビューションのバージョンを確認する[root@typecodes ~]# c...
MySQL バージョン 5.0 ではストアド プロシージャのサポートが開始されました。ストアド プロ...
写真を背景にしてリンクを記載します。たとえば、ウェブサイトのロゴ画像などです。例: ポテトのロゴ画像...
いくつかの理由(好奇心も含む)から、数週間前に Linux デスクトップとして Xfce を使い始め...
目次1. vue-cli デフォルト プロジェクトを作成する (babel のみを含む) 2. 作成...
1. floatの基本的な使用例1. まず 2 つの div ボックスを作成し、高さ、幅、背景色を設...
目次1. テレポートの使用2. モーダルダイアログコンポーネントを完成させる3. コンポーネントのレ...
フロントエンドとバックエンドを分離した開発では、フロントエンドがバックエンドの API を呼び出して...
DREAMWEAVER を開き、新しい HTML を作成します。 。ボディの特性: bgcolor...