Gérer les hôtes virtuels

LemonLDAP::NG configuration is build around Apache or Nginx virtual hosts. Chaque hôte virtuel est une ressource protégée, avec règles d'accès, en-têtes, options et données POST.

Configuration d'Apache

Pour protéger un hôte virtuel dans Apache, l'agent LemonLDAP::NG doit être activé (voir configuration globale d'Apache).

Ainsi n'importe quel hôte virtuel peut être protégé en ajoutant cette ligne :

PerlHeaderParserHandler Lemonldap::NG::Handler

Application hébergée

Exemple d'hôte virtuel protégé pour une application locale :

<VirtualHost *:80>
        ServerName localsite.example.com
 
        PerlHeaderParserHandler Lemonldap::NG::Handler
 
        DocumentRoot /var/www/localsite
 
        ErrorLog /var/log/apache2/localsite_error.log
        CustomLog /var/log/apache2/localsite_access.log combined
 
</VirtualHost>

Proxy inverse

Exemple d'hôte virtuel protégé avec Lemonldap::NG en proxy-inverse :

<VirtualHost *:80>
        ServerName application.example.com
 
        PerlHeaderParserHandler Lemonldap::NG::Handler
 
        # Reverse-Proxy
        ProxyPass / http://private-name/
        # Change "Location" header in redirections
        ProxyPassReverse / http://private-name/
        # Change domain cookies
        ProxyPassReverseCookieDomain private-name application.example.com
 
        ErrorLog /var/log/apache2/proxysite_error.log
        CustomLog /var/log/apache2/proxysite_access.log combined
</VirtualHost>

La même chose avec le serveur distant configuré avec le même nom d'hôte :

<VirtualHost *:80>
        ServerName application.example.com
 
        PerlHeaderParserHandler Lemonldap::NG::Handler
 
        # Reverse-Proxy
        ProxyPass / http://APPLICATION_IP/
 
        ProxyPreserveHost on
 
        ErrorLog /var/log/apache2/proxysite_error.log
        CustomLog /var/log/apache2/proxysite_access.log combined
</VirtualHost>

La directive ProxyPreserveHost transfère l'en-tête Host à l'application protégée.
Pour en savoir plus sur l'utilisation d' Apache en reverse-proxy, consultez la documentation d'Apache.

Certaines applications ont besoin de la variable d'environnement REMOTE_USER pour connaître le nom d'utilisateur connecté, qui n'est pas renseignée en mode reverse-proxy. Dans ce cas, voir comment convertir les en-têtes en variable d'environnement.

Ajouter un menu flottant

Un petit menu flottant peut être ajouté aux applications par une seimple configuration Apache :

PerlModule Lemonldap::NG::Handler::Menu
PerlOutputFilterHandler Lemonldap::NG::Handler::Menu->run

Les pages où ce menu est affiché peuvent être restreintes, par exemple :

<Location /var/www/html/index.php>
PerlOutputFilterHandler Lemonldap::NG::Handler::Menu->run
</Location>

You need to disable mod_deflate to use the floating menu

Nginx configuration

To protect a virtual host in Nginx, the LemonLDAP::NG FastCGI server must be launched (see LemonLDAP::NG FastCGI server).

Then you can take any virtual host, and simply add this lines to protect it:

# Log format
include /path/to/lemonldap-ng/nginx-lmlog.conf;
server {
  ...
  location = /lmauth {
    internal;
    include /etc/nginx/fastcgi_params;
    fastcgi_pass /path/to/llng/fastcgi/server/socket;
    # Drop post datas
    fastcgi_pass_request_body  off;
    fastcgi_param CONTENT_LENGTH "";
    # Keep original hostname
    fastcgi_param HOST $http_host;
    # Keep original request (LLNG server will received /llauth)
    fastcgi_param X_ORIGINAL_URI  $request_uri;
  }
  location /path/to/protect {
    auth_request /lmauth;
    auth_request_set $lmremote_user $upstream_http_lm_remote_user;
    auth_request_set $lmlocation $upstream_http_location;
    error_page 401 $lmlocation;
    try_files $uri $uri/ =404;
 
    ##################################
    # PASSING HEADERS TO APPLICATION #
    ##################################
 
    # IF LUA IS SUPPORTED
    #include /path/to/lemonldap-ng/nginx-lua-headers.conf
 
    # ELSE
    # Set manually your headers
    #auth_request_set $authuser $upstream_http_auth_user;
    #proxy_set_header Auth-User $authuser;
    # OR
    #fastcgi_param HTTP_AUTH_USER $authuser;
 
  }

Application hébergée

Exemple d'hôte virtuel protégé pour une application locale :

# Log format
include /path/to/lemonldap-ng/nginx-lmlog.conf;
server {
  listen 80;
  server_name myserver;
  root /var/www/html;
  # Internal authentication request
  location = /lmauth {
    internal;
    include /etc/nginx/fastcgi_params;
    fastcgi_pass /path/to/llng-fastcgi-server.sock;
    # Drop post datas
    fastcgi_pass_request_body  off;
    fastcgi_param CONTENT_LENGTH "";
    # Keep original hostname
    fastcgi_param HOST $http_host;
    # Keep original request (LLNG server will received /llauth)
    fastcgi_param X_ORIGINAL_URI  $request_uri;
  } 
 
  # Client requests
  location ~ \.php$ {
    auth_request /lmauth;
    auth_request_set $lmremote_user $upstream_http_lm_remote_user;
    auth_request_set $lmlocation $upstream_http_location;
    error_page 401 $lmlocation;
    try_files $uri $uri/ =404;
    include fastcgi_params;
    try_files $fastcgi_script_name =404;
    fastcgi_pass /path/to/php-fpm/socket;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_intercept_errors on;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_hide_header X-Powered-By;
 
    ##################################
    # PASSING HEADERS TO APPLICATION #
    ##################################
    # IF LUA IS SUPPORTED
    #include /path/to/nginx-lua-headers.conf
 
    # ELSE
    # Set manually your headers
    #auth_request_set $authuser $upstream_http_auth_user;
    #fastcgi_param HTTP_AUTH_USER $authuser;
  }
  location / {
    try_files $uri $uri/ =404;
  }
}

Proxy inverse

Example of a protected reverse-proxy:

# Log format
include /path/to/lemonldap-ng/nginx-lmlog.conf;
server {
  listen 80;
  server_name myserver;
  root /var/www/html;
  # Internal authentication request
  location = /lmauth {
    internal;
    include /etc/nginx/fastcgi_params;
    fastcgi_pass /path/to/llng-fastcgi-server.sock;
    # Drop post datas
    fastcgi_pass_request_body  off;
    fastcgi_param CONTENT_LENGTH "";
    # Keep original hostname
    fastcgi_param HOST $http_host;
    # Keep original request (LLNG server will received /llauth)
    fastcgi_param X_ORIGINAL_URI  $request_uri;
  } 
 
  # Client requests
  location / {
    auth_request /lmauth;
    auth_request_set $lmremote_user $upstream_http_lm_remote_user;
    auth_request_set $lmlocation $upstream_http_location;
    error_page 401 $lmlocation;
 
    proxy_pass http://remote.server/;
    include /etc/nginx/proxy_params;
 
    ##################################
    # PASSING HEADERS TO APPLICATION #
    ##################################
    # IF LUA IS SUPPORTED
    #include /path/to/nginx-lua-headers.conf
 
    # ELSE
    # Set manually your headers
    #auth_request_set $authuser $upstream_http_auth_user;
    #proxy_set_header HTTP_AUTH_USER $authuser;
  }
}

Configuration de LemonLDAP::NG

Un hôte virtuel apache protégé par un agent LemonLDAP::NG doit être enregistré dans la configuration LemonLDAP::NG.

Pour ce faire, utiliser le manager, et aller dans la branche Virtual Hosts. Il est possible d'ajouter, effacer ou modifier un hôte virtuel ici.

Un hôte vituel contient :

Règles d'accès et en-têtes HTTP

See Writing rules and headers to learn how to configure access control and HTTP headers sent to application by LL::NG.

Données POST

Voir Rejeu des formulaires pour savoir comment configurer le rejeu des formulaires pour poster des données à une applications protégée.

Options

Quelques options sont disponibles :

Ces options sont utilisées dans la construction des URL de redirection (lorsque l'utilisateur n'est pas connecté ou pour les requêtes CDA). Sauf modification, les valeurs par défaut sont utilisées. Ces options ne sont à utiliser que pour surcharger les valeurs par défaut.