5

Windows で Nginx を実行しているアクセス ログに奇妙な点があります。アクセスログに $request_time と $upstream_response_time (アップストリームで fcgi として Django を実行) を含めました。ログはリクエスト時間をミリ秒単位で表す必要があると私は理解していますが、出力は次のようになります。

ip|date|request_time|upstream_response_time
xx.xx.xx.xxx|[29/Jan/2013:15:29:57 -0600]|605590388736.19374237|0.141
xx.xx.xx.xxx|[29/Jan/2013:15:30:39 -0600]|670014898176.19374237|0.156

その巨大な数はいったい何だろう!?

完全なログ形式は次のとおりです (上記の例ではいくつかの列を削除しました)。

log_format  main  '$remote_addr|$time_local]|$request|$request_time|$upstream_response_time|'
                  '$status|$body_bytes_sent|$http_referer|'
                  '$http_user_agent';

パイプ区切り文字の使用。

4

1 に答える 1

12

あなたが提案するように、ここに答えがあります:

nginxサーバー ( + upstream) に GET としてリクエストを行う$request_timeと、通常の許容値が返されます。これは、上流のサーバーが参加していないために発生し、参加したとしても適切に作成されます。

POST リクエストを実行しているときに問題が発生します。nginx doc によると、$request_time変数の値 (ロギング時にのみ利用可能) は、すべてのデータが送信され、接続が閉じられたときに計算されます (すべてのアップストリームとプロキシによっても)。そして、情報がログに追加されます。

では、すべてが正しいかどうかを確認するにはどうすればよいでしょうか。最初にサーバーに GET リクエストを送信し、ログ ファイルを監視します。呼び出しを終了してログ情報をファイルに追加するのに実際にかかる時間に注意してください。これは実際の価値があるはずです。次に、サーバーに POST リクエストを送信し、ログ ファイルをもう一度監視します。ここで、おそらく、ログがまったく来ていないか、非常に長い期間が経過したことがわかります。

その意味?nginx conf とアップストリーム conf を確認してください。接続が閉じられておらず、宙に浮いている場所がどこかにある可能性があるためです。これらの接続は、OS またはアップストリーム サーバーによって時間の経過とともに更新される可能性がありますが、結局のところ、奇妙な値以外のいくつかの問題を引き起こす可能性があり$request_timeます。

于 2013-01-30T18:56:23.273 に答える