2012-03-30 22 views
34

どのようにログファイルにHTTPリクエストヘッダ(すべて)の内容を記録するのですか?ApacheですべてのHTTPリクエストヘッダを記録することはできますか?

は、現在、私のApacheの組み合わせログ形式の構成は次のとおりです。

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

が、それは論理的ではありません、それは次のとおりです。

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{Cookie}i\"" combined

私はそれを行うことが可能であることを理解しますどちらのヘッダーになるかはわかりません。ここで

答えて

10

は、すべてのHTTP-ヘッダーのリストです: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を使用します。サーバがこの非標準ヘッダを無視しようとしている場合、なぜあなたのログファイルにそれを書きたいのですか?未知のヘッダーはシステムに全く影響しません。

+3

これは、Apacheマシンに渡されるすべてのHTTPヘッダーをログに記録できるほど有効です。新しいヘッダが導入されるたびに、 'LogFormat'を編集するよりも柔軟なシステムを用意しています。 –

+1

私は故意にこの回答に投票しました。 – rofans91

40

mod_log_forensicあなたが望むものですが、デフォルトではApacheのインストールには含まれていない可能性があります。

使用方法は次のとおりです。あなたは、その後、最も簡単な解決策は、あなたのサーバースクリプトをダンプすることです特定のヘッダーリモートクライアントがサーバーに送信され、そしてあなたがCGIスクリプトを実行するための要求を引き起こす可能性があります見ることに興味があるなら

LoadModule log_forensic_module /usr/lib64/httpd/modules/mod_log_forensic.so 
<IfModule log_forensic_module> 
ForensicLog /var/log/httpd/forensic_log 
</IfModule> 
+11

ありがとう、これは正解です。 httpd.confに設定する方法は次のとおりです。 (うわ、コメントで無改行??) 'のLoadModule log_forensic_moduleは/ usr/lib64に/ httpdの/モジュール/ mod_log_forensic.so' ' <のIfModule log_forensic_module> ForensicLogは/ var/log/httpdの/ forensic_log ' 今することができます'' grep '(){"/ var/log /" /> "のような[Shellshock](http://www.troyhunt.com/2014/09/everything-you-need-to-know-about.html) httpd/forensic_log' – Raptor007

5

環境変数をファイルのどこかに入れます。

HTTPで始まる環境変数を探して、次に、あなたのスクリプト内から

をシェルコマンド「ENV>を/ tmp /ヘッダ」を実行し_...

あなたがような行が表示されます:

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」になります。以下同様です。

関連する問題