Aggiungi un'intestazione personalizzata alle richieste ProxyPass


9

Ho un semplice vhost apache:

<VirtualHost *:80>
  ServerName hello.local

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

Tutte le richieste a hello.local sono delegate a http://localhost:8810/. Quello che vorrei fare è aggiungere un'intestazione alla richiesta http che va http://localhost:8810/con un valore restituito da un comando esterno. Qualcosa di simile a

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

Qualche modo per raggiungere questo obiettivo?


Vuoi eseguire questo programma esterno durante ogni richiesta?
sciurus,

Sì. Oppure potrebbe anche essere un "sottorequisito": un valore restituito da uno script cgi o qualcosa di simile. Sono consapevole delle implicazioni sulle prestazioni.
Simon,

Risposte:


9

Ok ho capito.

Innanzitutto, lo script che viene eseguito e utilizzato per ottenere il valore da inserire nell'intestazione. Ho creato questo come /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

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

Il servizio back-end in esecuzione http://localhost:8080/riceve il customheadercon il valore dallo script.

La documentazione di Apache sull'utilizzo di un programma esterno è qui .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.