【问题标题】:How to base64 encode apache header?如何对 apache 标头进行 base64 编码?
【发布时间】:2014-01-09 22:21:18
【问题描述】:

我使用 apache 作为前端 http 代理。我需要将带有来自特定环境变量的值的标头发送到所有代理请求。像这样:

RequestHeader set myheader %{FOO}e

问题是环境变量FOO 的值必须是base64 编码的。是否可以即时对该标头值进行 b64 编码?

mod_rewrite?子请求?自定义模块? ...

顺便说一句,env 变量是由另一个 apache 模块创建的,很遗憾我无法修复。

【问题讨论】:

    标签: apache mod-rewrite http-headers base64


    【解决方案1】:

    我想通了。使用 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]
    
    1. 创建一个名为 base64map 的重写映射,它运行可执行文件 (/bin/b64e),它读取标准输入并在标准输出上编码。 可执行文件在 apache 启动时加载,您必须从标准输入循环读取并通过 /bin/base64 传递它才能正常工作
    2. 重写规则将查询字符串(或任何您想要的)传递给名为base64map 的映射。输出用于将 apache 变量 WIC 设置为编码值。
    3. 请求头x-b64encoded是根据WIC中的值创建的 为了正确读取 WIC 变量,我们必须将语法更改为 ENV:WIC
    4. 最后,请求被代理到目的地,请求头自动包含在请求中。

    【讨论】:

      【解决方案2】:

      使用expressionbase64 function 也应该有效:

      RequestHeader set myheader "expr=%{base64:%{FOO}e}"
      

      使用它成功地对客户端证书执行额外的 base64 编码传递,如下所示:

      RequestHeader set X-ENV-SSL_CLIENT_CERTIFICATE "expr=%{base64:%{SSL_CLIENT_CERT}s}"
      

      【讨论】:

      • 宁愿是:RequestHeader set myheader "expr=%{base64:env:FOO}" 但这不起作用。
      猜你喜欢
      • 2016-01-27
      • 2012-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-26
      • 2010-11-18
      • 2018-10-26
      相关资源
      最近更新 更多