LemonLDAP::NG is designed to be very performant. En particulier, il utilise les capacités multi-threads d'Apache-2, donc pour optimiser les performances, utilisez de préférence mpm-worker.
On linux, by default, there is no DNS cache and LemonLDAP::NG portal request DNS at every connexions on LDAP or DB. Under heavy loads, that can generated hundred of DNS queries and many errors on LDAP connexions (timed out) from IO::Socket.
To bypass this, you can: * Use IP in configuration to avoid DNS resolution * Install a DNS cache like nscd, netmask or bind
Handlers check rights and calculate headers for each HTTP hit. Donc pour augmenter les performances, évitez les règles trop complexes en utilisant les macros, groupes ou macros locales.
Les macros et les groupes sont calculées pendant le processus d'authentification par le portail :
$hGroups
which is a Hash Reference of this form:$hGroups = { 'group3' => { 'description' => [ 'Service 3', 'Service 3 TEST' ], 'cn' => [ 'group3' ], 'name' => 'group3' }, 'admin' => { 'name' => 'admin' } }
Exemples de macros:
# macro booléenne isAdmin -> $uid eq 'foo' or $uid eq 'bar' # autre macro displayName -> $givenName." ".$surName # Utiliser une macro booléenne dans une règle ^/admin -> $isAdmin # Utiliser une macro chaîne dans un en-tête HTTP Display-Name -> $displayName
Exemples de groupes:
# group admin -> $uid eq 'foo' or $uid eq 'bar' # Use a group in a rule ^/admin -> $groups =~ /\badmin\b/ # Or with hGroups ^/admin -> defined $hGroups{'admin'}
Les macros et les groupes sont stockées dans la base de données des sessions. Les macros locales sont une fonctionnalité spéciale des agents qui permettent d'avoir des macros utilisables localement seulement. Ces macros sont calculées seulement à leur premier usage et stockées dans le cache local des sessions (uniquement pour ce serveur) et seulement si l'utilisateur accède à l'application relative. Ce dispositif évite de stocker trop de données.
# règle admin -> $admin ||= ($uid eq 'foo' or $uid eq 'bar') # en-tête Display-Name -> $displayName ||= $givenName." ".$surName
Le portail est le composant le plus gros de Lemonldap::NG. Il est recommendé d'utiliser ModPerl::Registry au lieu d'utiliser le dispositif "cgi-script" tel qu'indiqué dans les fichiers de configuration d'Apache proposés en exemple (portal-apache2.conf):
<Files *.pl> SetHandler perl-script PerlResponseHandler ModPerl::Registry </Files>
On peut utiliser un serveur FastCGI en utilisant le fichier index.fcgi disponible dans les exemples du portail.
make install PROD=yes
. This is done by default in RPM/DEB packages.
En mettant useLocalConf
à 1 dans lemonldap-ng.ini (section [Portal]), le portail utilisera la configuration cachée. Pour la rafraîchir, il faut installer un agent (handler) sur le même serveur pour utiliser le mécanisme de rafraîchissement ou redémarrer le serveur à chaque changement.
Pour accélérer le démarrage du portail lorsque le serveur est relancé, ajoutez les lignes suivantes dans les fichiers de configuration d'Apache (tel que proposé dans portal-apache2.conf):
<Perl> require Lemonldap::NG::Portal::SharedConf; Lemonldap::NG::Portal::SharedConf->compile( qw(delete header cache read_from_client cookie redirect unescapeHTML)); # Décommentez cette ligne si vous utilisez le menu Lemonldap::NG require Lemonldap::NG::Portal::Menu; # Décommentez cette ligne si vous utilisez les capacités SOAP du portail require SOAP::Lite; </Perl>
Les agents (handlers) Lemonldap::NG utilisent un cache local pour stocker les sessions (pour 10 minutes). Ainsi, les modules Apache::Session ne posent pas de problèmes aux agents. En revanche, ce peut-être un frein pour le portail :
In “Apache::Session module” field, set “Apache::Session::Flex” and use the following parameters:
Store -> MySQL Lock -> Null Generate -> MD5 Serialize -> Storable DataSource -> dbi:mysql:sessions;host=... UserName -> ... Password -> ...
Apache::Session::Browseable est une surcouche d'autres modules Apache::Session qui ajoute des capacités d'indexation. Pour l'utiliser (avec MySQL par exemple), choisissez “Apache::Session::Browseable::MySQL” comme “Module Apache::Session” et utilisez les paramètres suivants :
DataSource -> dbi:mysql:sessions;host=... UserName -> user Password -> password Index -> ipAddr uid
Notez que Apache::Session::Browseable::MySQL n'utilise pas les verrous MySQL.
LDAP server can be a brake when you use LDAP groups recovery. You can avoid this by setting “memberOf” fields in your LDAP scheme:
dn: uid=foo,dmdName=people,dc=example,dc=com ... memberOf: cn=admin,dmdName=groups,dc=example,dc=com memberOf: cn=su,dmdName=groups,dc=example,dc=com
So instead of using LDAP groups recovery, you just have to store “memberOf” field in your exported variables. With OpenLDAP, you can use the memberof overlay to do it automaticaly.
ldapgroups -> memberOf
Pour l'instant, ldapgroups contient “cn=admin,dmdName=groups,dc=example,dc=com cn=su,dmdName=groups,dc=example,dc=com”
ldapgroups -> join(" ",($ldapgroups =~ /cn=(.*?),/g))
Maintenant, ldapgroups contient “admin su”
In lemonldap-ng.ini, set only modules that you will use. By default, configuration, sessions explorer and notifications explorer are enabled. Exemple :
[manager] enabledModules = conf, sessions
Once Manager is installed, browse enabled modules (configuration, sessions, notifications) and save the web pages respectively under manager.html
, sessions.html
and notifications.html
in the DocumentRoot
directory. Then replace this in Manager file of Apache configuration:
RewriteRule "^/$" "/psgi/manager-server.fcgi" [PT] # DirectoryIndex manager.html # RewriteCond "%{REQUEST_FILENAME}" "!\.html$" RewriteCond "%{REQUEST_FILENAME}" "!^/(?:static|doc|fr-doc|lib).*" RewriteRule "^/(.+)$" "/psgi/manager-server.fcgi/$1" [PT]
by:
# RewriteRule "^/$" "/psgi/manager-server.fcgi" [PT] DirectoryIndex manager.html RewriteCond "%{REQUEST_FILENAME}" "!\.html$" RewriteCond "%{REQUEST_FILENAME}" "!^/(?:static|doc|fr-doc|lib).*" RewriteRule "^/(.+)$" "/psgi/manager-server.fcgi/$1" [PT]
So manager HTML templates will be no more generated by Perl but directly given by the web server.