2017-09-05 11 views
0

ユーザー定義変数を設定し、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に新しい概念/機能が必要ですか?

感謝の答えにコメントとして

答えて

0

転記コメントはマップを使用することについて

どのようにフォーマットする必要があるため?

map $custom_request_time $custom_request_time_log { 
    default $custom_request_time; 
    '' 'Not Available'; 
} 

これをlog?

log_format main '$remote_addr $server_addr $http_host $custom_destination_addr [$custom_request_time_log] ' ' "$request" $status $body_bytes_sent "$http_user_agent" '; 
+0

log_by_luaでluaコードを使って書式を設定する必要がある場合、マップの変数の値をどのように設定しますか? マップにこの値を設定する方法については、ルアコードによるログに基づいて説明できます。 – developer

+0

あなたのコードは 'ngx.var.custom_request_time'を使って' custom_request_time'を設定しなければなりません。残りは地図で気になります –

+0

私の根本的な質問は: NGINX書き換えフェーズの前に変数を設定して、アクセスログの変数? – developer

関連する問題