Fügen Sie ProxyPass-Anforderungen einen benutzerdefinierten Header hinzu

9

Ich habe einen einfachen Apache vhost:

<VirtualHost *:80>
  ServerName hello.local

  ProxyPass / http://localhost:8810/
  ProxyPassReverse / http://localhost:8810/
</VirtualHost>

Alle Anfragen an hello.local werden an weitergeleitet http://localhost:8810/. Ich möchte der http-Anfrage einen Header http://localhost:8810/mit einem Wert hinzufügen, der von einem externen Befehl zurückgegeben wird. Etwas wie

Header set MyHeader ${/usr/bin/an_external_program}

Wie kann man das erreichen?

Simon
quelle
Sie möchten dieses externe Programm bei jeder Anfrage ausführen?
Sciurus
Ja. Oder es könnte auch eine "Unteranforderung" sein: ein Wert, der von einem CGI-Skript oder ähnlichem zurückgegeben wird. Ich bin mir der Auswirkungen auf die Leistung bewusst.
Simon

Antworten:

9

OK ich habe es.

Zunächst das Skript, das ausgeführt wird und mit dem der Wert in den Header eingefügt wird. Ich habe dies erstellt als /opt/apache/debug.sh:

#!/bin/bash

#this script just loops forever and outputs a random string
#every time it receives something on stdin

while read
do
        cat /dev/urandom|head -c12|base64
done

Apache-Konfiguration:

<VirtualHost *:80>
        ServerName light.nik

        RewriteEngine On

        RewriteMap doheader prg:/opt/apache/debug.sh
        RewriteRule (.*) - [E=customheader:${doheader:},P]

        RequestHeader set customheader %{customheader}e

        ProxyPass / http://localhost:8080/
        ProxyPassReverse / http://localhost:8080/
</VirtualHost>

Der weiterlaufende Backend-Dienst http://localhost:8080/empfängt den customheadermit dem Wert aus dem Skript.

Die Apache-Dokumentation zur Verwendung eines externen Programms finden Sie hier .

Simon
quelle