Apache + mod_auth_tkt + mod_rewrite + mod_proxy 来自根目录

Apache + mod_auth_tkt + mod_rewrite + mod_proxy 来自根目录

我有一个在 Tomcat 服务器上运行的 Web 应用程序,该服务器位于 Apache httpd 服务器的“后面”,我正在使用 mod_proxy 将请求从 httpd 转发到 tomcat 服务器。httpd 服务器使用 mod_auth_tkt 进行身份验证,它将有关用户的信息存储在环境变量 REMOTE_USER 中。我使用 mod_rewrite 将此变量从 httpd 传递到 tomcat 服务器,并将其保存为标头 (X-Forwarded-User)。

ProxyPass 设置为

httpd_server/app/ -> tomcat_server/app/

这是vhost.conf:

<Location />
    RewriteEngine On
    RequestHeader unset X-Forwarded-User
    RewriteCond %{LA-U:REMOTE_USER} (.+)
    RewriteRule .* - [E=RU:%1,NS]
    RequestHeader add X-Forwarded-User %{RU}e
</Location>

<IfModule mod_proxy.c>
        ProxyPreserveHost On
        <Proxy *>
                Order deny,allow
                Allow from all
        </Proxy>
        ProxyPass               /app/       http://127.0.0.1:8084/app/
        ProxyPassReverse        /app/       http://127.0.0.1:8084/app/
</IfModule>

这很完美。但如果尝试将 ProxyPass 更改为

httpd_server/ -> tomcat_server/app/

因此将 vhost.conf 更改为:

ProxyPass               /       http://127.0.0.1:8084/app/
ProxyPassReverse        /       http://127.0.0.1:8084/app/

然后,标头(X-Forwarded-User)在 Web 应用程序上最终为空(null)。

经过进一步调查,我发现如果我尝试转发不同的变量,例如 REMOTE_PORT(甚至是字符串),则两种配置下的一切都可以正常工作(应用程序正确接收标头)。

从根目录代理时,REMOTE_USER 转发不起作用,这有什么明显的错误吗?我是不是漏掉了什么,还是这是 mod_auth_tkt 的问题?

相关内容