Protokollieren von Antwortheadern im Apache-Reverse-Proxy, ohne sie an den Client zu senden

Protokollieren von Antwortheadern im Apache-Reverse-Proxy, ohne sie an den Client zu senden

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}oin unsere benutzerdefinierte LogFormatKonfiguration 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 ProxyPassoderRewriteRule ... [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>

verwandte Informationen