2009-11-06 14 views
0

L'objectif: exécuter une application Rails sur Mongrels, ce qui permet l'accès par Apache après avoir fait l'authentification HTTP de baseComment puis-je passer le nom d'utilisateur HTTP d'Apache à Mongrel/Rails?

Le problème: lire le nom d'utilisateur fourni à l'intérieur Rails

Apache:

<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] 

Cela fonctionne très bien, Apache force l'utilisateur à s'authentifier et à transférer vers Rails en cas de succès. J'ai omis quelques lignes pour gérer les fichiers statiques et autres, et déclencher l'authentification pour eux aussi. Les variables d'environnement de la perspective de Rails contiennent les entrées habituelles et en plus HTTP_X_FORWARDED_HOST, HTTP_X_FORWARDED_SERVER et HTTP_X_FORWARDED_FOR. J'ai été incapable de transmettre des variables d'environnement personnalisées en les ajoutant à la règle de réécriture:

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

Des pensées?

Répondre

3

Essayez d'utiliser la directive RequestHeader pour mettre REMOTE_USER dans un en-tête HTTP. Cela semble avoir fonctionné pour les gens dans this thread:

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

Frickin A, cela fonctionne! Merci beaucoup! – Lemming