У меня есть веб-приложение, работающее на сервере Tomcat, который находится «за» сервером Apache httpd, и я использую mod_proxy для пересылки запросов с httpd на сервер Tomcat. Сервер httpd использует для аутентификации mod_auth_tkt, который хранит информацию о пользователе в переменной окружения REMOTE_USER. Я передаю эту переменную из httpd на сервер tomcat с помощью mod_rewrite, сохраняя ее как заголовок (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) в веб-приложении оказывается пустым (нулевым).
После дальнейшего расследования я обнаружил, что если я попытаюсь переслать другую переменную, например REMOTE_PORT (или даже строку), все будет работать правильно для обеих конфигураций (приложение правильно получает заголовок).
Есть ли очевидная ошибка, почему пересылка REMOTE_USER не работает при прокси-сервере из корневого каталога? Я что-то пропустил или это может быть проблема с mod_auth_tkt?