将标头从apache传递到代理位置

时间:2014-08-03 01:55:41

标签: apache mod-rewrite http-headers environment-variables remote-server

我在主机Server1Server2上运行了两个Apache服务器Host1Host2。两者都启用了SSL。在Host2上,还有另一个用C语言编写的服务器Server3侦听端口5555.此服务器仅侦听环回接口(它仅侦听本地主机,即Host2)。我已将以下内容添加到Server2的httpd.conf中:

<Location /specialserver>
    ProxyPass  http://localhost:5555
    Order  allow,deny
    Allow  from all
    ProxyPassReverse  http://localhost:5555
</Location>

Server1上托管了一个网站,其中包含指向/specialserver的链接以及Server2上所有其他链接。我想将REMOTE_USER和其他一些环境变量的值传递给/ specialserver。我不能将它们作为单独的变量传递,因此我必须连接所需环境变量的值并将它们作为单个变量传递。为此,我在mod_rewriteServer1的httpd.conf文件中添加了以下Server2命令:

RewriteCond %{LA-U:REMOTE_USER}*%{REMOTE_ADDR}*%{QUERY_STRING} (.*)
RewriteRule (.*) - [E=X-REMOTE_INFO:%1]

这将连接环境变量并将结果分配给名为X-REMOTE_INFO的环境变量。此外,我已修改位置块以将此值添加到请求标头,如下所示:

<Location /specialserver>
    ProxyPass  http://localhost:5555
    Order  allow,deny
    Allow  from all
    ProxyPassReverse  http://localhost:5555
    RequestHeader  merge X-REMOTE_INFO %{X-REMOTE_INFO}e
</Location>

我知道Server2上REMOTE_USER的值是正确的(我检查了值)。我的自定义标头和我的自定义环境变量也具有正确的值(REMOTE_USER * REMOTE_ADDR * QUERY_STRING)。但是,当环境变量达到Server3时,它会丢失REMOTE_USER的值。而不是将值设为REMOTE_USER * REMOTE_ADDR * QUERY_STRING现在只有* REMOTE_ADDR * QUERY_STRING。 X-REMOTE_INFO中不再提供REMOTE_USER的值。我尝试将merge更改为addset。我也试过没有预见(即没有LA:U)。价值仍然丢失。当单击指向/ specialserver的链接时,似乎再次计算X-REMOTE_INFO的值。 Server3没有REMOTE_USER的值,因此该值为空。如何将Server2上显示的X-REMOTE_INFO值传递给Server3

我的要求是将REMOTE_USER,REMOTE_ADDR和QUERY_STRING的值从Server2传递给Server3作为单个变量。我已经完成了所有这些以满足这一要求。

  1. 欢迎使用我的方法实现我想要的任何帮助。
  2. 欢迎任何其他方法。

0 个答案:

没有答案