REMOTE_USER通过Apache反向代理

我有一个启用了mod_proxy的Apache webserver和一个虚拟主机proxy.domain.com。 此代理configuration为通过AuthType Basic提示用户input凭据。 然后,通过ProxyPass和ProxyReverse通过代理可以访问web.domain.com的内容。 但是,REMOTE_USERvariables是空的。 我用mod_rewrite和mod_headers读了不同的东西来实现这一点,但是我所有的尝试都失败了。 有人比我幸运吗?

谢谢。

这可以通过mod_headers,mod_rewrite和mod_proxy来实现。

在代理服务器上,我假设你有你的身份validation工作,并适当地设置REMOTE_USER。 如果是这样,那么将REMOTE_USER的值放入一个代理用户头到后端,如下所示:

RewriteRule .* - [E=PROXY_USER:%{LA-U:REMOTE_USER}] # note mod_rewrite's lookahead option RequestHeader set Proxy-User %{PROXY_USER}e 

以下是发生的事情:

  1. RewriteRule会触发每个请求,并将环境variablesPROXY_USER设置为等于REMOTE_USER的值,该值已经由auth模块设置。
  2. RequestHeader设置一个名为Proxy-User的请求头,其值为PROXY_USER

现在在后端,你可以得到这个头值,并像这样设置REMOTE_USER:

 RewriteCond %{HTTP:Proxy-user} ^(.*)$ RewriteRule .* - [E=REMOTE_USER:%1] 

以下是发生的事情:

  1. RewriteCondition检查代理用户头的值,看它是否匹配模式^。* $(它会)。 括号告诉mod_rewrite将该值存储在%1中。
  2. 然后,RewriteRule将环境variablesREMOTE_USER设置为%1中的值。