我正在使用apache作为前端http代理。我需要将一个带有特定环境变量值的标头发送到所有代理请求。像这样:
RequestHeader set myheader %{FOO}e
问题是env变量FOO
的值必须是base64编码的。是否可以动态地对该标头值进行b64编码?
mod_rewrite的?子请求?自定义模块? ...
顺便说一句,env变量是由另一个apache模块创建的,遗憾的是我无法解决这个问题。
答案 0 :(得分:5)
我明白了。使用mod_rewrite从外部程序读取/写入stdin / stdout,如下所示:
ProxyRequests on
RewriteEngine on
# 1
RewriteMap base64map "prg:/bin/b64e"
# 2
RewriteRule .* - [E=WIC:${base64map:%{QUERY_STRING}},NE]
# 3
RequestHeader set x-b64encoded "%{WIC}e"
# 4
RewriteRule ^proxy/.*$ http://localhost:9999 [P]
base64map
的重写映射,它运行可执行文件(/bin/b64e
),它读取stdin并在stdout上编码。 base64map
的映射。输出用于将apache变量WIC
设置为编码值。x-b64encoded
是根据WIC
答案 1 :(得分:1)
将expression与base64
function一起使用也应该有效:
RequestHeader set myheader "expr=%{base64:%{FOO}e}"
成功使用它对客户端证书执行附加的base64编码传递,如下所示:
RequestHeader set X-ENV-SSL_CLIENT_CERTIFICATE "expr=%{base64:%{SSL_CLIENT_CERT}s}"