Wir verwenden mehrere Apache-Server als Reverse-Proxy vor zahlreichen Backend-Servern. Die Backend-Server senden einen HTTP-Antwortheader ("Cast"), der einen internen Namen des Backend-Servers enthält.
Im Reverse-Proxy möchte ich den Inhalt des Antwortheaders des Backend-Servers protokollieren und verhindern, dass der Header an den Client gesendet wird.
Das Protokollieren des Headers ist einfach, indem Sie ihn %{Cast}o
in unsere benutzerdefinierte LogFormat
Konfiguration einfügen. Außerdem können Sie ganz einfach verhindern, dass der Header an den Client gesendet wird, indem SieHeader unset Cast
Das einzige Problem besteht darin, dass beim Aufheben der Festlegung des Headers dieser nicht mehr protokolliert werden kann.
Gibt es eine Möglichkeit, den Antwortheader des Backends in einer Variablen zu speichern, den Header aufzuheben und die Variable zu protokollieren?
Anmerkungen
- Die als Reverse-Proxys verwendeten Apache-Server sind Apache 2.2 auf RHEL 6 und 2.4 auf RHEL7
- Reverse-Proxy-Regeln verwenden entweder
ProxyPass
oderRewriteRule ... [P]
Antwort1
In der Vergangenheit habe ich als Workaround für ähnliche Situationen einen Zwischeneintrag für VirtualHost verwendet, wenn bestimmte Anweisungen nicht gut zusammenpassten:
Ihre aktuelle Konfiguration könnte folgendermaßen aussehen:
<VirtualHost *:80>
ServerName www.example.com
ProxyPass /app http://app.example.com/app
ProxyPassReverse /app http://app.example.com/app
</VirtualHost>
Ändern Sie es so, dass es auf den zwischengeschalteten virtuellen Host verweist und entfernen Sie Ihren Header aus den Antworten:
<VirtualHost *:80>
ServerName www.example.com
ProxyPass /app http://localhost:8000/app
ProxyPassReverse /app http://localhost:8000/app
Header unset Cast
</VirtualHost>
und ein neuer virtueller Host, auf dem Sie weiterhin Ihre Cast-Header protokollieren können:
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>