リバースプロキシ上のログで実サーバを見分ける

apache のリバースプロキシの機能を使ってアプリケーションサーバ(実Webサーバ)を振り分けている場合、リバースプロキシ側の apacheaccess_log で、このリクエストはどの実サーバで処理された結果なのかが知りたいことがママある。

そんな時に mod_header。

アプリケーションサーバ側で mod_header を使ってレスポンスヘッダを追加

httpd.conf で

LoadModule headers_module modules/mod_headers.so

が読み込まれているかどうかを確認。

VirtualHost ディレクティブとかで

Header append X-RealServer "%{SERVER_NAME}e %D"

とすれば、レスポンスヘッダに追加されます。

ヘッダ名(X-RealServer)はテキトー。リバースプロキシ側と合わせてさえいれば、もちろん何でもOK。
サーバ名は今回は 環境変数の SERVER_NAME を使ってるけど、ケースバイケースで適当に。文字列で直接指定しても OK。
append は、同じ名称のヘッダがあった場合に、追記する方式。安全。

%D は別にいらないが、せっかくなので、アプリケーションサーバ側でどれくらいの処理時間がかかったかも取得。

リバースプロキシ側で上記のレスポンスヘッダの値を取得するログを規定

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{X-RealServer}o %D %T" combined_rp

適当な CustomLog で上記のフォーマットを選択すれば OK。
combined_rp はテキトーにつけた名前。combined をいぢって全部変えちゃって良ければその方がラク
%{hogehoge}i でリクエストヘッダ、%{hogehoge}o でレスポンスヘッダへアクセスできる。

参考: http://httpd.apache.org/docs/2.2/ja/mod/mod_headers.html