Eu tenho um aplicativo da web em execução em um servidor tomcat que está "atrás" de um servidor httpd Apache e estou usando o mod_proxy para encaminhar solicitações do httpd para o servidor tomcat. O servidor httpd está usando mod_auth_tkt para autenticação, que armazena as informações sobre o usuário na variável de ambiente REMOTE_USER. Eu passo essa variável do httpd para o servidor tomcat usando mod_rewrite, salvando-a como um cabeçalho (X-Forwarded-User).
O ProxyPass é configurado como
httpd_server/app/ -> tomcat_server/app/
este é o 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>
E isso funciona perfeitamente. Mas se tentar mudar o ProxyPass para
httpd_server/ -> tomcat_server/app/
Então mudando o vhost.conf para:
ProxyPass / http://127.0.0.1:8084/app/
ProxyPassReverse / http://127.0.0.1:8084/app/
Em seguida, o cabeçalho (X-Forwarded-User) termina vazio (nulo) no aplicativo da Web.
Após investigações posteriores descobri que, se eu tentar encaminhar uma variável diferente, por exemplo, REMOTE_PORT (ou até mesmo uma string), tudo funciona corretamente para ambas as configurações (o aplicativo recebe o cabeçalho corretamente).
Existe algum erro óbvio por que o encaminhamento de REMOTE_USER não funciona ao fazer proxy no diretório raiz? Eu senti falta de algo ou isso poderia ser um problema de mod_auth_tkt?