Apache リバース プロキシで応答ヘッダーをクライアントに送信せずにログに記録する

Apache リバース プロキシで応答ヘッダーをクライアントに送信せずにログに記録する

私たちは、多数のバックエンド サーバーの前で、複数の Apache サーバーをリバース プロキシとして使用しています。バックエンド サーバーは、バックエンド サーバーの内部名を含む HTTP 応答ヘッダー (「Cast」) を送信します。

リバース プロキシでは、バックエンド サーバーの応答ヘッダーの内容をログに記録し、ヘッダーがクライアントに送信されないようにしたいと考えています。

ヘッダーのログ記録は、%{Cast}oカスタムLogFormat構成に挿入するだけで簡単です。また、ヘッダーがクライアントに送信されないようにするには、次のコードを使用します。Header unset Cast

唯一の問題は、ヘッダーを設定解除すると、ログに記録できなくなることです。

バックエンドの応答ヘッダーを変数に保存し、ヘッダーを設定解除して変数をログに記録する方法はありますか?

ノート

  • リバースプロキシとして使用されているApacheサーバーは、RHEL 6上のApache 2.2とRHEL7上の2.4です。
  • リバースプロキシルールは、ProxyPassまたはのいずれかを使用します。RewriteRule ... [P]

答え1

過去に、特定のディレクティブがうまく連携しなかった同様の状況の回避策として、中間 VirtualHost エントリを使用しました。

現在の構成は次のようになります。

<VirtualHost *:80>
   ServerName www.example.com
   ProxyPass /app http://app.example.com/app
   ProxyPassReverse /app http://app.example.com/app
</VirtualHost>

これを中間仮想ホストを指すように変更し、応答からヘッダーを削除します。

<VirtualHost *:80>
   ServerName www.example.com
   ProxyPass /app http://localhost:8000/app
   ProxyPassReverse /app http://localhost:8000/app
   Header unset Cast
</VirtualHost>

キャスト ヘッダーをログに記録できる新しい仮想ホスト:

Listen 127.0.0.1:8000
<VirtualHost 127.0.0.1:8000>
   ServerName localhost
   ProxyPass /app http://app.example.com/app
   ProxyPassReverse /app http://app.example.com/appp
   LogFormat %{X-Forwarded-For}o %{Cast}o ...
</VirtualHost>

関連情報