まずは適用方法を説明します。nginxモジュールにはjtxyとjtcmdの2つがあります。 http リクエストが来ると、処理のために jtxy モジュールに入ります。jtxy はサブリクエストを作成し、それを jtcmd に送信します。jtcmd は、処理のために上流の非 http サービス A への上流フローを作成します。A が処理を完了して結果を取得すると、その結果が jtcmd サブリクエストに返されます。jtcmd サブリクエストは結果を jtxy に返します。これがプロセスです。リクエストの数を追跡してみましょう。 1. リクエストが到着し、リクエストが作成され、ngx_http_alloc_requestのcountが1に初期化されます。 この時点でカウントは1です。 r->main = r; r->カウント = 1; 2. jtxy モジュールでリクエストを処理するときに、ngx_http_subrequest が呼び出されてサブリクエストが作成され、ngx_http_subrequest でカウントが 1 増加します。 この時点でカウントは2 r->main->count++; 3. モジュール (ここでは jtxy モジュール) を離れるときに、ngx_http_finalize_request が呼び出され、ngx_http_finalize_request のカウントが 1 つ減ります。 この時点でカウントは1です。 r->content_handlerの場合{ r->write_event_handler = ngx_http_request_empty_handler; ngx_http_finalize_request(r, r->content_handler(r)); NGX_OK を返します。 } 4. 次に、サブリクエストの jtcmd モジュールに入ります。このモジュールでは、サブリクエスト ((r!=r->main)) であることがわかった場合、メインリクエスト数を 1 つ増やす必要があります。このポイントは赤で強調表示されています。1 が追加されないと、メインのリクエスト数に問題が発生するためです。この問題は、後でカウントから 1 を引いた値を追跡し続けると見つかります。 以下は、jtxy によって開始された jtcmd サブリクエストです。ここでの r と r->main は同じではありません。r は jtcmd であり、r->main は jtxy です。 この時点でカウントは2です。 同時に、サブリクエストの jtcmd モジュールではアップストリームが使用されるため、count を 1 増やす必要がありますが、ngx_http_read_client_request_body(r, ngx_http_upstream_init) を使用すると、ngx_http_read_client_request_body はすでに 1 増加しているため、ここで 1 増やす必要はありません。 この時点でカウントは3です。 「nginx の詳細な理解」のセクション 5.1.5 を参照してください。上流フローに 1 を追加する必要がある理由の説明があります。 したがって、ここでのカウントは 2 回追加されます。 r->upstream->resolved->sockaddr = (struct sockaddr*)&backendSockAddr; r->upstream->resolved->socklen = sizeof(struct sockaddr_in); r->アップストリーム->解決済み->naddrs = 1; r->upstream->create_request = jtcmd_upstream_create_request; r->upstream->process_header = jtcmd_upstream_process_header; r->upstream->finalize_request = jtcmd_upstream_finalize_request; r->upstream->abort_request = jtcmd_upstream_abort_request; r->upstream->input_filter_init = ngx_http_jtcmd_filter_init; r->upstream->input_filter = ngx_http_jtcmd_filter; r->アップストリーム->input_filter_ctx = jtcmdctx; //r->subrequest_in_memory = 1; r!=r->mainの場合 { r->main->count++; } ngx_int_t rc = ngx_http_read_client_request_body(r, ngx_http_upstream_init); rc == NGX_ERROR || rc > NGX_OK の場合 { rc を返します。 } ここで、r はサブリクエストであり、r->main はメインリクエストです。また、サブリクエスト数は常に 0 であることに注意してください。 ngx_int_t ngx_http_read_client_request_body(ngx_http_request_t *r, ngx_http_client_body_handler_pt post_handler) { size_t を事前読み取りします。 ssize_t サイズ; ngx_int_t rc; ngx_buf_t *b; ngx_chain_t 出力; ngx_http_request_body_t *rb; ngx_http_core_loc_conf_t *clcf; r->main->count++; 5. ステップ 3 と同様に、リクエストが処理された後、ngx_http_finalize_request が呼び出され、カウントが 1 減ります。ただし、ここでの違いは、これがサブリクエストであり、ステップ r = r->main があるため、実際の削減はメイン リクエストに対して行われることです。これは、ステップ 4 で赤で説明したように 1 を追加した理由でもあります。 この時点でカウントは2 静的ボイド ngx_http_close_request(ngx_http_request_t *r, ngx_int_t rc) { ngx_connection_t *c; r = r->メイン; c = r->接続; ngx_log_debug2(NGX_LOG_DEBUG_HTTP、c->log、0、 "http リクエスト数:%d ブロック:%d", r->count, r->blocked); r->count == 0 の場合 ngx_log_error(NGX_LOG_ALERT, c->log, 0, "http リクエスト数がゼロです"); } r->カウント--; 6. その後、サブリクエストはアップストリームを使用するため、このためカウントが 1 増加し、アップストリームが終了すると 1 減少します。 この時点でカウントは1です。 7. 子リクエストが完了した後、親リクエストのコールバックメソッドは処理を継続し、メインリクエストモジュール jtxy に戻ります。ここで、処理が完了した後、ngx_http_finalize_request が呼び出され、リクエストが終了します。このとき、count は 1 となり、リクエストが解放されます。 空所 ngx_http_free_request(ngx_http_request_t *r, ngx_int_t rc) { ngx_log_t *ログ; ngx_pool_t *プール; 構造体 linger linger; ngx_http_cleanup_t *cln; ngx_http_log_ctx_t *ctx; ngx_http_core_loc_conf_t *clcf; ログ = r->接続->ログ; ngx_log_debug0(NGX_LOG_DEBUG_HTTP, ログ, 0, "http クローズ要求"); r->pool == NULLの場合{ ngx_log_error(NGX_LOG_ALERT, log, 0, "http リクエストはすでに閉じられています"); 戻る; } 要約する nginx のリクエスト数追跡に関するこの記事はこれで終わりです。nginx のリクエスト数追跡に関する詳細については、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 |
<<: フロントエンド制作に関する簡単な議論: 互換性のために IE6 はまだ必要ですか?
複数の値を組み合わせて表示これで、図1から図2に示す要件が揃いました。 どうやってやるんですか?次の...
追加するdocker run -it -name test -d nginx:latest /bin...
<br /> 第 1 部と第 2 部では、Web サイトのパフォーマンス、ページ コンテ...
/******************** * 仮想ファイルシステム VFS **********...
現象:イメージを実行します (例: ubuntu14.04)。 docker run -it --r...
序文このコントロールを直接印刷すると下部に透かしが入りますが、公式 Web サイトから購入することで...
序文ページの HTML 構造にネストされたボックスが多数含まれている場合、ページに複数の垂直スクロー...
関数を記述できます。主に正規表現を使用して判断を行います。入力文字が空の場合は、「-」を使用して置き...
1. まず、移行サーバー上のデータ ファイルを見つけます。MySQL 5.7 とデフォルトのインスト...
まずはエフェクト画像を投稿します:全体的なスタイルとレイアウトが崩れないように、スクロール バーがロ...
1. システムインストールパッケージ yum -y インストール make gcc-c++ cmak...
この記事では、例を使用して、replace と regexp を使用して MySQL で正規表現を置...
Web ページでマスク レイヤーを使用すると、繰り返しの操作を防ぎ、読み込みを促進できます。また、ポ...
ブラウザはTIF形式の画像を表示しますコードをコピーコードは次のとおりです。 <html>...
目次例示する1. ブロブオブジェクト2. フロントエンド3. バックエンド要約する例示する最近、ファ...