Перенаправление имени пользователя на обратном прокси Apache с базовой аутентификацией

Вопрос или проблема

У меня есть обратный прокси (пакеты), который перенаправляет запросы на другой сайт (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 для установки заголовка. Это позволит вам увидеть имя пользователя в логах конечного сервера. Вот шаги, которые нужно выполнить:

  1. Убедитесь, что модули включены: Перед тем как начать, убедитесь, что следующие модули включены в вашем Apache-сервере:

    • mod_proxy
    • mod_proxy_http
    • mod_headers
    • mod_rewrite

    Вы можете включить их с помощью команды:

    a2enmod proxy proxy_http headers rewrite
  2. Настройка конфигурации обратного прокси: В вашем конфигурационном файле 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, доступной после успешной аутентификации пользователя.

  3. Настройка логирования на конечном сервере: На вашем конечном сервере (localhost), вам нужно будет настроить логи так, чтобы включать новый заголовок. Вам необходимо добавить его в конфигурацию логирования. Например:

    LogFormat "%{X-Remote-User}i %h %l %u %t \"%r\" %>s %b" combined
    CustomLog /var/log/apache2/access.log combined

    Это позволит вам видеть имя пользователя в логах конечного сервера.

  4. Перезагрузка сервера: Не забудьте перезагрузить Apache, чтобы изменения вступили в силу.

    systemctl restart apache2
  5. Проверка: После выполнения всех шагов, вы должны увидеть имя пользователя в логах конечного сервера:

    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/"

Теперь ваше имя пользователя будет перенаправляться и отображаться в логах.

Если у вас остались вопросы или возникли трудности с реализацией данного решения, пожалуйста, задайте их!

Оцените материал
Добавить комментарий

Капча загружается...