题 向ProxyPass请求添加自定义标头


我有一个简单的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}

有没有办法实现这个目标?


8
2018-04-30 12:42




您想在每次请求期间执行此外部程序吗? - sciurus
是。或者它也可以是“子请求”:由cgi脚本或类似的东西返回的值。我知道性能影响。 - Simon


答案:


好,我知道了。

首先,执行的脚本用于获取要在标头中插入的值。我创建了这个 /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文档是 这里


7
2018-04-30 17:26