向 ProxyPass 请求添加自定义标头

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

有什么方法可以实现这个吗?

答案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 文档是这里

相关内容