この記事は「Apache上のPerl FastCGIはCustomLogにデータを書くことができるか?ついでにmod_perlでのお話」へのレスです

「FCGIので動いているアプリケーションがあって、コードの中の変数をapacheのLOGに出したいのですよ。」とのことらしいので昔書いた mod_copy_header というモジュールを思い出しながら再現して github に置いた

https://github.com/kazeburo/mod_copy_header



これを使うと任意のレスポンスヘッダを Apacheのnoteにコピーすることができます。あとはmod_headersでレスポンスヘッダを消すなり、CustomLogでログに記録するなりできます。

なぜこのモジュールが必要なのかというと、ヘッダだけでやろうとした場合、元記事でも紹介されてますが、

<Location ..>
  CustomLog ".. %{X-Foobar}o"
</Location>

のように設定すれば確かにログに任意の情報を残すことができます。しかし、ユーザにヘッダを見せたくない場合は使えません。

そこでmod_headersを使ってログの削除を試みるのですが

<Location ..>
  Header unset X-Foobar
  CustomLog ".. %{X-Foobar}o"
</Location>

これだとログの記録より先にmod_headersが先に動いてしまうので、ログには空っぽの「-」しか記録できません。

そこで、mod_copy_header を使うと、まず(mod_headersより先に)ヘッダをnoteにコピーし、mod_headersでヘッダを削除。ログはnoteを参照する。ということができるので、うまく記録ができます

LoadModule copyheader_module   modules/mod_copyheader.so

<Location /foobar>
  ProxyPass http://...
  <IfModule copyheader_module>
    CopyHeaderActive On
    CopyHeader X-Foobar
  </IfModule>
  Header unset X-Foobar
  LogFormat "... %{X-Foobar}n" xfoobar
  CustomLog "logs/access_log" xfoobar
</Location>

Reverse ProxyとApplication Serverの2段構成になっていて、Applicationのなんらかの値(処理にかかった時間やユーザ情報)をReverse Proxyのログに残した場合などに使えますね!

このブログ記事について

このページは、Masahiro Naganoが2012年8月 6日 12:13に書いたブログ記事です。

ひとつ前のブログ記事は「MySQLのbinlogをmysqlbinlogとperlワンライナーでカジュアルに解析する」です。

次のブログ記事は「Perlでstrace -p pidして目的のシステムコールが来たら終了する」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ

OpenID対応しています OpenIDについて
Powered by Movable Type 4.27-ja