Вопрос или проблема
У меня есть обратный прокси (пакеты), который перенаправляет запросы на другой сайт (localhost) с базовой аутентификацией с использованием файла. Для отладки мне нужно получить имя пользователя в журналах сайта localhost, но оно пустое. Вот конфигурация моего обратного прокси:
<Location "/">
ProxyPass "http://localhost:80/" timeout=30
ProxyPassReverse "http://localhost:80/"
AuthType basic
AuthBasicProvider file
AuthUserFile /etc/apache2/packages.htpasswd
Require valid-user
</Location>
В логах прокси я корректно вижу пользователя (titou), который пытается войти:
XXX.XXX.XXX.XXX - titou [30/Sep/2024:17:04:53 +0000] "GET / HTTP/1.1" 401 4233 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36"
но в логах “актуального” сайта информация теряется. Возможно ли перенаправить только имя пользователя? (Мне не нужен пароль)
127.0.0.1 - - [30/Sep/2024:16:50:54 +0000] "GET /icons/openlogo-75.png HTTP/1.1" 200 6040 "https://packages.XXXX.com/"
Я пытался использовать модуль rewritecond, но без успеха.
RewriteEngine on
RewriteCond %{REMOTE_USER} (.*)
RewriteRule ^(.*)$ - [E=ENV_REMOTE_USER:%1]
RequestHeader set X-REMOTE-USER %{ENV_REMOTE_USER}e
Ответ или решение
Чтобы решить проблему перенаправления имени пользователя через обратный прокси Apache с основными данными для аутентификации, можно использовать директивы Apache для установки заголовка. Это позволит вам увидеть имя пользователя в логах конечного сервера. Вот шаги, которые нужно выполнить:
-
Убедитесь, что модули включены: Перед тем как начать, убедитесь, что следующие модули включены в вашем Apache-сервере:
mod_proxy
mod_proxy_http
mod_headers
mod_rewrite
Вы можете включить их с помощью команды:
a2enmod proxy proxy_http headers rewrite
-
Настройка конфигурации обратного прокси: В вашем конфигурационном файле Apache для обратного прокси добавьте или измените секцию
<Location>
следующим образом:<Location "/"> ProxyPass "http://localhost:80/" timeout=30 ProxyPassReverse "http://localhost:80/" AuthType basic AuthBasicProvider file AuthUserFile /etc/apache2/packages.htpasswd Require valid-user # Добавление имени пользователя в заголовок RequestHeader set X-Remote-User %{REMOTE_USER}e </Location>
Здесь мы используем директиву
RequestHeader
для установки заголовкаX-Remote-User
, который будет содержать значение переменной%{REMOTE_USER}e
, доступной после успешной аутентификации пользователя. -
Настройка логирования на конечном сервере: На вашем конечном сервере (localhost), вам нужно будет настроить логи так, чтобы включать новый заголовок. Вам необходимо добавить его в конфигурацию логирования. Например:
LogFormat "%{X-Remote-User}i %h %l %u %t \"%r\" %>s %b" combined CustomLog /var/log/apache2/access.log combined
Это позволит вам видеть имя пользователя в логах конечного сервера.
-
Перезагрузка сервера: Не забудьте перезагрузить Apache, чтобы изменения вступили в силу.
systemctl restart apache2
-
Проверка: После выполнения всех шагов, вы должны увидеть имя пользователя в логах конечного сервера:
titou 127.0.0.1 - - [30/Sep/2024:17:04:53 +0000] "GET /icons/openlogo-75.png HTTP/1.1" 200 6040 "https://packages.XXXX.com/"
Теперь ваше имя пользователя будет перенаправляться и отображаться в логах.
Если у вас остались вопросы или возникли трудности с реализацией данного решения, пожалуйста, задайте их!