我有一个简单的 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}
有什么方法可以实现这个吗?
答案1
好,我知道了。
首先,执行脚本并使用该脚本获取要插入到标题中的值。我将其创建为/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 文档是这里。