我正在使用Apache作为前端HTTP代理。我需要将特定环境变量的值作为标题发送到所有代理请求中,就像这样:
RequestHeader set myheader %{FOO}e
问题在于环境变量
FOO
的值必须是Base64编码的。是否可能即时对标头值进行Base64编码?使用mod_rewrite?子请求?自定义模块?... 顺便说一下,该环境变量是由另一个Apache模块创建的,不幸的是我无法修复它。我正在使用Apache作为前端HTTP代理。我需要将特定环境变量的值作为标题发送到所有代理请求中,就像这样:
RequestHeader set myheader %{FOO}e
FOO
的值必须是Base64编码的。是否可能即时对标头值进行Base64编码?使用mod_rewrite?子请求?自定义模块?... 顺便说一下,该环境变量是由另一个Apache模块创建的,不幸的是我无法修复它。我明白了。可以使用mod_rewrite来读/写外部程序的标准输入和输出,像这样:
ProxyRequests on
RewriteEngine on
# 1
RewriteMap base64map "prg:/bin/b64e"
# 2
RewriteRule .* - [E=WIC:${base64map:%{QUERY_STRING}},NE]
# 3
RequestHeader set x-b64encoded "%{ENV:WIC}e"
# 4
RewriteRule ^proxy/.*$ http://localhost:9999 [P]
base64map
的rewrite-map,该rewrite-map运行可执行文件(/bin/b64e
),该文件从stdin读取并在stdout上编码。在apache启动时加载可执行文件,在循环中从stdin读取并通过/bin/base64进行传递,以使其正常工作。base64map
的映射中。输出用于将apache变量WIC
设置为已编码值。x-b64encoded
是从WIC
中的值创建的,为了正确读取WIC变量,我们必须将语法更改为ENV:WIC。
RequestHeader set myheader "expr=%{base64:env:FOO}"
但是它并不能正常工作。 - drzraf