Apacheが受信したHTTP要求ヘッダー(すべて)の内容をログファイルに記録する方法は?
現在、Apache結合ログ形式の構成は次のとおりです。
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{Cookie}i\"" combined
私はそれを行うことが可能であることを理解しています:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{Cookie}i\" \"%{heading name}i\" \"%{heading name}i\" \"%{heading name}i\"" combined
しかし、それは論理的ではなく、どのヘッダーになるかを知ることはできません。
mod_log_forensic は必要なものですが、デフォルトではApacheインストールに含まれていないか利用できない場合があります。
使用方法は次のとおりです。
LoadModule log_forensic_module /usr/lib64/httpd/modules/mod_log_forensic.so
<IfModule log_forensic_module>
ForensicLog /var/log/httpd/forensic_log
</IfModule>
すべてのhttp-headersのリストは次のとおりです。 http://en.wikipedia.org/wiki/List_of_HTTP_header_fields
そして、ここにすべてのApache-logformatsのリストがあります: http://httpd.Apache.org/docs/2.0/mod/mod_log_config.html#formats
正しく記述したように、特定のヘッダーを記録するコードは%{foobar} iです。foobarはヘッダーの名前です。そのため、唯一の解決策は特定のフォーマット文字列を作成することです。 x-my-nonstandard-headerのような非標準ヘッダーが必要な場合は、%{x-my-nonstandard-header}i
。サーバーがこの非標準ヘッダーを無視する場合、ログファイルに書き込む必要があるのはなぜですか?不明なヘッダーは、システムにまったく影響しません。
リモートクライアントがサーバーに送信している特定のヘッダーを確認したい場合、リクエストにCGIスクリプトを実行させることができる場合、最も簡単な解決策は、サーバースクリプトに環境変数をファイルにダンプさせることです。
例えばスクリプト内からシェルコマンド「env>/tmp/headers」を実行します
次に、HTTP _...で始まる環境変数を探します.
次のような行が表示されます。
HTTP_ACCEPT=text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
HTTP_ACCEPT_ENCODING=gzip, deflate
HTTP_ACCEPT_LANGUAGE=en-US,en;q=0.5
HTTP_CACHE_CONTROL=max-age=0
これらはそれぞれリクエストヘッダーを表します。
ヘッダー名は実際のリクエストから変更されていることに注意してください。たとえば、「Accept-Language」は「HTTP_ACCEPT_LANGUAGE」などになります。