Как передать имя пользователя HTTP из Apache в Mongrel/Rails?

Цель: запустить приложение Rails на Mongrels, разрешив доступ через Apache после выполнения базовой HTTP-аутентификации.

Проблема: чтение предоставленного имени пользователя из Rails

Апач:

<Proxy balancer://mongrel_cluster>
    BalancerMember http://127.0.0.1:4001
    # ...

    Order deny,allow
    Deny from all

    AuthType Basic
    AuthName "<realm>"
    AuthUserFile "<users-file>"
    AuthGroupFile "<groups-file>"
    Require group <group>

    Satisfy Any
</Proxy>

RewriteEngine On
# ...
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteRule ^/(.*)$ balancer://mongrel_cluster%{REQUEST_URI} [P,QSA,L]

Это прекрасно работает, Apache заставляет пользователя аутентифицироваться и в случае успеха перенаправляется на Rails. Я пропустил несколько строк для обработки статических файлов и тому подобного, а также для запуска аутентификации для них.

Переменные среды с точки зрения Rails содержат обычные записи и дополнительно HTTP_X_FORWARDED_HOST, HTTP_X_FORWARDED_SERVER и HTTP_X_FORWARDED_FOR. Мне не удалось передать пользовательские переменные среды, добавив их в правило перезаписи:

RewriteRule ... [P,QSA,L,E=foo:bar]

Есть предположения?


person Lemming    schedule 06.11.2009    source источник


Ответы (1)


Попробуйте использовать директиву RequestHeader, чтобы поместить REMOTE_USER в заголовок HTTP. . Похоже, это сработало для участников этой темы:

RewriteCond %{LA-U:REMOTE_USER} (.+)
RewriteRule . - [E=RU:%1]
RequestHeader add X-Forwarded-User %{RU}e
person Andrew Watt    schedule 07.11.2009