私たちは、多数のバックエンド サーバーの前で、複数の 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>