Tambahkan header khusus ke permintaan ProxyPass

9

Saya punya vhost apache sederhana:

<VirtualHost *:80>
  ServerName hello.local

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

Semua permintaan ke hello.local di proksi ke http://localhost:8810/. Yang ingin saya lakukan adalah menambahkan header ke permintaan http http://localhost:8810/dengan nilai yang dikembalikan oleh perintah eksternal. Sesuatu seperti

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

Adakah cara untuk mencapai ini?

Simon
sumber
Anda ingin menjalankan program eksternal ini selama setiap permintaan?
sciurus
Iya. Atau bisa juga berupa "subrequest": nilai yang dikembalikan oleh skrip cgi atau yang serupa. Saya menyadari implikasi kinerja.
Simon

Jawaban:

9

OK aku mengerti.

Pertama-tama, skrip yang dijalankan dan yang digunakan untuk mendapatkan nilai untuk disisipkan di header. Saya membuat ini sebagai /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

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

Layanan backend yang berjalan pada http://localhost:8080/menerima customheaderdengan nilai dari skrip.

Dokumentasi Apache tentang penggunaan program eksternal ada di sini .

Simon
sumber