アクセス ログにクライアントのダウンロード速度を示すエントリが必要です。私は limit_rate について知っていますが、明らかにそれは私が望むものではありません。lua_module でも検索しましたが、この変数が見つかりませんでした。
2 に答える
$request_time
クライアント要求を読み取る時間を示すだけで、サーバーの処理時間や応答とは無関係です。で割ると、クライアントのアップロード速度が示さ$request_length
れます。$request_time
しかし、OP はクライアントのダウンロード速度について尋ねました。つまり、次の 2 つの情報が必要です。
サーバーによって送信されたバイト数 (
$bytes_sent
または$bytes_body
/Content-length
ヘッダーが比較的小さいと想定)。サーバーによって送信された最初のバイトとクライアントによって受信された最後のバイトの間の経過時間 - 配信を完了するのは TCP サブシステム次第であり、これは非同期で行われるため、NGINX サーバー変数からすぐには得られません。
そのため、後者の値を計算してアプリケーション サーバーに報告するために、クライアント側でいくつかのロジックが必要です。
NGINX $msec
(ミリ秒単位の秒単位の現在時刻) は、おそらくカスタム HTTP ヘッダー フィールド (X-My-Timestamp など) を使用して、応答の開始をミリ秒の精度でタイムスタンプするために使用できます。
X-My-Timestamp 値は、HTTP 応答ヘッダーDate:
フィールドに大まかにマップされます。
さらに、クライアントは、応答の完全な受信時にシステムクロックを読み取ることができます。後者と X-My-Timestamp (UTC および NTP 同期クロックを想定) の間のデルタは、ダウンロード速度の計算に必要な経過時間をもたらします。
最後のステップは、適切なアクションを実行するために、クライアントに値をサーバーに報告させることです。