この投稿は Apache httpd Advent Calendar 2013 ではありません… 2013-11-25 に Apache httpd 2.4.7 がリリースされました。 CHANGES_2.4.7 この中に
*) mod_headers: Add ‘Header note header-name note-name’ for copying a response headers value into a note. [Eric Covener]
という変更を見つけました。これは!! 「Apache で Response Header を消しつつその値をログに書き出す」で書いた機能が Apache に追加されたようです。 当該部分のコードはこれ
case hdr_note:
apr_table_setn(r->notes, process_tags(hdr, r), apr_table_get(headers, hdr->header));
break;
私は subprocess_env にコピーしたのですが、これは notes にコピーしていますね。 notes っていうのは module 間でデータを受け渡しできるメモ用テーブルです。 mod_log_config で %{VARNAME}n として書き出すことができます。「モニカジ#3に参加してきた」で触れた @kazeburo さんの mod_copy_header もこの notes で実装されてます。(あ、Example の LogFormat のところにミスが…) mod_headers の note は次のように使います。CGI で出力するヘッダーを扱う場合は always が必要です(これでしばらくハマりました)。Proxy だったら不要。
Header [always] note X-Foo foo
Header [always] unset X-Foo
LogFormat "... %{foo}n" xxx
Client に返したくないデータのはずなので unset をお忘れなく。返して良いヘッダーをログに書き出すだけなら %{X-Foo}o で出来ますし。
おまけ
2.4.7 の mod_headers には setifempty という機能も追加されていました。「Set If Empty」で名前の通りの機能ですね。
*) mod_headers: Add ‘setifempty’ command to Header and RequestHeader. [Eric Covener]