向ProxyPass请求添加自定义标头


9

我有一个简单的Apache虚拟主机:

<VirtualHost *:80>
  ServerName hello.local

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

对hello.local的所有请求都代理到http://localhost:8810/。我想做的是向http://localhost:8810/带有外部命令返回值的http请求添加标头。就像是

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

有什么办法可以做到这一点?


您要在每个请求期间执行此外部程序吗?
sciurus 2014年

是。或者也可以是“子请求”:cgi脚本或类似内容返回的值。我知道性能影响。
西蒙

Answers:


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文档在这里

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.