Ajouter un en-tête personnalisé aux demandes ProxyPass


9

J'ai un vhost apache simple:

<VirtualHost *:80>
  ServerName hello.local

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

Toutes les demandes adressées à hello.local sont transmises par proxy http://localhost:8810/. Ce que j'aimerais faire, c'est ajouter un en-tête à la requête http http://localhost:8810/avec une valeur renvoyée par une commande externe. Quelque chose comme

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

Une façon d'accomplir cela?


Vous souhaitez exécuter ce programme externe à chaque demande?
sciurus

Oui. Ou il pourrait également s'agir d'une "sous-demande": une valeur renvoyée par un script cgi ou quelque chose de similaire. Je suis conscient des implications en termes de performances.
Simon

Réponses:


9

OK j'ai compris.

Tout d'abord, le script qui est exécuté et qui est utilisé pour obtenir la valeur à insérer dans l'en-tête. J'ai créé ceci comme /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

Configuration Apache:

<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>

Le service d'arrière-plan en cours d'exécution http://localhost:8080/reçoit le customheaderavec la valeur du script.

La documentation Apache sur l'utilisation d'un programme externe est ici .

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.