Добавить пользовательский заголовок в запросы ProxyPass


9

У меня есть простой Apache Vhost:

<VirtualHost *:80>
  ServerName hello.local

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

Все запросы к hello.local прокси для http://localhost:8810/. Что я хотел бы сделать, так это добавить заголовок к http-запросу http://localhost:8810/со значением, возвращаемым внешней командой. Что-то вроде

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

Есть ли способ сделать это?


Вы хотите выполнить эту внешнюю программу во время каждого запроса?
Sciurus

Да. Или это также может быть «подзапрос»: значение, возвращаемое сценарием cgi или что-то подобное. Я знаю о последствиях производительности.
Симон

Ответы:


9

Ладно, я понял.

Прежде всего, скрипт, который выполняется и который используется для получения значения для вставки в заголовок. Я создал это как /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:

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

Бэкэнд-сервис, запущенный на, http://localhost:8080/получает customheaderзначение со сценарием.

Документация Apache по использованию внешней программы находится здесь .

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.