Convertir les en-têtes HTTP en variables d'environnement

Lorsque LL::NG est utilisé en mode reverse-proxy, la variable d'environnement REMOTE_USER n'est pas renseignée. Toutefois, cette variable est renseignée par l'agent dans le serveur physique l'hébergeant mais pas dans les autres serveurs sans agents.

Le module SetEnvIf d'Apache peut transformer l'en-tête HTTP Auth-User en variable d'environnement REMOTE_USER :

SetEnvIfNoCase Auth-User "(.*)" REMOTE_USER=$1

Ceci permet de protéger des applications nécessitant la variable d'environnement REMOTE_USER en mode reverse-proxy. Dans ce cas 2 fichiers de configuration Apache doivent être renseignés :

<VirtualHost *:80>
        ServerName application.example.com
 
        PerlHeaderParserHandler Lemonldap::NG::Handler
 
        ProxyPreserveHost on
        ProxyPass / http://APPLICATION_IP/
        ProxyPassReverse / http://APPLICATION_IP/
 
</VirtualHost>
<VirtualHost *:80>
        ServerName application.example.com
 
        SetEnvIfNoCase Auth-User "(.*)" REMOTE_USER=$1
 
        DocumentRoot /var/www/application
 
</VirtualHost>
Parfois, des applications PHP examinent également les variables d'environnement PHP_AUTH_USER et PHP_AUHT_PW. On peut les renseigner par la même voie :
SetEnvIfNoCase Auth-User "(.*)" PHP_AUTH_USER=$1
SetEnvIfNoCase Auth-Password "(.*)" PHP_AUTH_PW=$1

Bien sûr, il faut stocker le mot-de-passe dans la session pour renseigner PHP_AUTH_PW.