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更新の構文の詳細な分析
プラットフォームの展開1. JDKをインストールするステップ1. OracleJDKをダウンロードす...
序文簡単に言えば、tcpdump は、ネットワーク上のトラフィックをダンプし、ユーザーの定義に従って...
<br />前の記事:Webデザインチュートリアル(6):デザインへの情熱を持ち続けまし...
目次環境設定の概要1.K8Sとは何ですか? 2. K8S を使用する理由3. K8S を使用する利点...
バックエンドからフロントエンドまで、なんと悲劇なのでしょう。他の人の CSS を自分の jsp We...
目次開始と停止データベース関連の操作データベーステーブル関連の操作制約関連デフォルトの制約高度なデー...
今日、ある人がウェブサイト開発プロジェクトについて話をしてくれました。具体的な要件について話すと、「...
img src 値が空の場合、リクエストが 2 つ行われます。一部の学生は以前に同様の状況に遭遇した...
目次1. テンプレート文字列とは何ですか? 2. 複数行のテンプレート文字列2.1 式付きテンプレー...
目次必要コアアイデアReactでスロットを実装する2つの方法必要コンポーネントを自分で書きました。コ...
解決策: システム内のすべての .vscode 関連プロセスを終了します (または、remote-s...
1. nginxをインストールして起動する # nginxをインストールする sudo apt-ge...
1. Windows 版の Docker をインストールしたら、Docker クイックスタート ター...
ステップ1: MySQLでbinlogが有効になっていることを確認する '%log_bin%...
背景Alibaba Cloud RDS for MySQL(MySQL バージョン 5.7)データベ...