REMOTE_USER 通过 Apache 反向代理

Lau*_*iné 6 mod-proxy proxypass apache-2.2

我有一个启用了 mod_proxy 的 Apache 网络服务器和一个 Virtualhost,proxy.domain.com。此代理配置为提示用户提供 AuthType Basic 凭据。然后,通过带有 ProxyPass 和 ProxyReverse 的代理可以访问 web.domain.com 的内容。但是,REMOTE_USER 变量为空。我阅读了不同的东西来使用 mod_rewrite 和 mod_headers 来实现这一点,但我所有的尝试都失败了。有人比我幸运吗?

谢谢。

bea*_*ans 12

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

在代理上,我假设您的身份验证正常工作并正确设置 REMOTE_USER。如果是这样,则将 REMOTE_USER 的值放入后端的 Proxy-User 标头中,如下所示:

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

这是发生的事情:

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

现在在后端,您可以提取该标头值并像这样设置 REMOTE_USER:

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

这是发生的事情:

  1. RewriteCondition 检查 Proxy-User 标头的值以查看它是否与模式 ^.*$ 匹配(它会匹配)。括号告诉 mod_rewrite 将该值存储在 %1 中。
  2. RewriteRule 然后将环境变量 REMOTE_USER 设置为 %1 中的值。