ユーザー定義変数を設定し、NGINX書き換えフェーズ前にアクセスログで使用する方法はありますか? いくつかのエラーシナリオでは、以下に定義されているように、ユーザー変数が設定される前にアクセスログフェーズが終了します。ヘッダーの読み取りがタイムアウトしたときにNginxのアクセスログ変数が設定されない
次は私が持っているアクセスログのフォーマット例である: ' "$リクエスト" $ステータスの$ body_bytes_sent "$ HTTP_USER_AGENT"'
LOG_FORMATメイン '$ REMOTE_ADDR $ SERVER_ADDR $ HTTP_HOST $ custom_destination_addr [$ custom_request_time]' ;
"custom_"で始まるフィールドは、ユーザー定義の変数です。
私は、非終了ヘッダを持つ以下のgetメッセージを送信します。すなわち、 "/ r/n/r/n"の代わりに "/ r/n"で終わるヘッダー:
get = "GET /Vod/mod/video16k_1.mp4 HTTP/1.1 \ r \ nホスト:10.20。 20.10:8585 \ r \ nUser-Agent:HTTPテストスイートTestSuite/1.0.2 \ r \ nAccept-Language:en-us、en; q = 0.5 \ r \ nAccept-Encoding:gzip、deflate \ r \ nConnection:keep "030:* 1クライアントの要求ヘッダーを読み込んでいるときにクライアントがタイムアウトしました(110:接続がタイムアウトしました)。クライアント:10.20 .20.128、server:、request: "GET /Vod/mod/video16k_1.mp4 HTTP/1.1"、ホスト: "10.20.20.10:8585"
次に、すべてのユーザー定義のアクセスログエントリを生成します。変数はクライアント:10.20.20.128、サーバー:、要求:「GET/NETRY」変数を使用して初期化されていない「custom_destination_addr」変数を使用しています。 VOD/MOD/video16k_1.mp4 HTTP/1.1" 、ホスト: "10.20.20.10:8585"
2017年9月1日十時03分07秒28875#0 [警告]:初期化されていない使用して* 1 "custom_request_time" 変数を要求を記録しながら、クライアント:10.20.20.128、サーバー:リクエスト: "GET /Vod/mod/video16k_1.mp4 HTTP/1.1"、ホスト: "10.20.20.10:8585"
アクセスログエントリ:
10.20.20.128 10.20.20.10 10.20。 HTTPテストスイートTestSuite/1.0.2
ヘッダーの末尾を正しく設定すると「/ r/n」というメッセージが表示されます。/r/n "の場合、アクセスログは正常です。
したがって、上記のエラー条件(ヘッダーの読み取り時にタイムアウト)の下で、ユーザー定義のアクセスログ変数はすべてがEMPTYになります。
この問題の既知の解決法がありますか、または書き換えフェーズの前に変数設定をサポートするためにNGIMXに新しい概念/機能が必要ですか?
感謝の答えにコメントとして
log_by_luaでluaコードを使って書式を設定する必要がある場合、マップの変数の値をどのように設定しますか? マップにこの値を設定する方法については、ルアコードによるログに基づいて説明できます。 – developer
あなたのコードは 'ngx.var.custom_request_time'を使って' custom_request_time'を設定しなければなりません。残りは地図で気になります –
私の根本的な質問は: NGINX書き換えフェーズの前に変数を設定して、アクセスログの変数? – developer