17 décembre 2012

Personnaliser Apache sur AIX/LINUX


Dans cet article je  présente la mise en oeuvre complète d'Apache sur des plates-formes du  type IBM AIX. Cette mise en oeuvre comprend la compilation des sources Apache, la construction de la procedure d'installation, ainsi qu'un ensemble complet de paramètres et d'options permettant d'intégrer ce produit dans des architectures impliquant par exemple des serveurs d'application et exigeant des performances élevées.


Les tests sont effectués sur un Bull Escala PowerPC 4, muni du système AIX 5.2

Adresse IP

Système d'exploitation
 AIX 5.2
Processeur
Power 4  1,2Ghz
Mémoire
1Go
Place Disponible
34 Go

Pour des questions pratiques, j'ai choisi la release d’Apache 2.0.49. Celle-ci est téléchargée  depuis le site  d’Apache Foundation Software: http://httpd.apache.org/.

1.     Génération des binaires Apache 2




1.1     Installation du compilateur gnu-gcc


Le compilateur utilisé pour la création des binaires Apache est  le gcc-3.3.2.0, complété par flex-2.5.4 pour la partie PHP.

Le compilateur est téléchargé à partir du site bull: http://www.bullfreeware.com ou à partir du jeux de CD acquis auprès de Bull.



Les produits sont transférés sur AIX par FTP:





Les produits Bull sont livrés sous forme de .exe auto-décompressables . Chaque fichier auto-décompressable (.exe) contient un fichier backup AIX ou fichier bff (Backup File Format). Le fichier .bff extrait peut ensuite être installé à l’aide de l’outil SMIT. SMIT (System Management Interface Tool) est un logiciel d’administration système pour AIX.
gcc-3.3.2.0.exe

L’extraction du contenu du gcc-3.3.2.0.exe est effectuée dans le répertoire /usr/local, avec les commandes suivantes, exécutées sous le profil root:
            cd /usr/local
chmod +x gcc-3.3.2.0.exe
./ gcc-3.3.2.0.exe

A l’issu de ces deux commandes, on obtient le  fichier:
      gcc-3.3.2.0..bff
     
Pour installer le fichier bff, nous utilisons les commandes:

      rm –f .toc
      smit install_latest

Le programme smit demande de spécifier le répertoire contenant le fichier bff (.). L’action de la touche F4 permet ensuite d’afficher tous les modules installables contenus dans le “package”. La sélection d’un module s’effectue en actionnant la touche F7.
A l’issu de cette procedure, le compilateur gcc est installé sur l’AIX.



1.2     Compilation des modules pre-requis







Le module de compression  Zlib 1.2.1 est indispensable pour l’utilisation de mod-deflate.

Comme d’habitude, on décompresse zlib-1.2.1.tar et on le compile à partir de notre répertoire /usr/work.

tar xvf zlib-1.2.1.tar
cd zlib-1.2.1
make clean
./configure –s
make
mkdir /usr/work/apache/zlib-for-apache
mkdir /usr/work/apache/zlib-for-apache/lib
mkdir /usr/work/apache/zlib-for-apache/include
cp –p zlib.h zconf.h zutil.h  /usr/work/apache/zlib-for-apache/include
cp –p libz.a /usr/work/apache/zlib-for-apache/lib       

1.2.2     Openssl

Les sources  Openssl sont placés dans le répertoire /usr/work/openssl-0.9.7d
Compilation:

cd  /usr/work/openssl-0.9.7d
./configure
make
make install


1.3     Compilation du noyau Apache 2 et installation




La compilation s’effectue en trois phases:

-          La définition de l’environnement du binaire Apache: répertoire et modules;

-          La compilation;

-          L’installation.

L’environnement pré-requis est le suivant:
-          Espace disque pour Apache: 25 Mo;
-          Compilateur gcc;

Toutes les commandes lancées dans ce cadre sont effectuées à partir du répertoire des sources Apache 2:
 /usr/work/apache/httpd-2.0.49.

1.3.1     Définition de l’environnement

L’objet ici est de définir :

  •          Le répertoire d’exécution d’Apache 2;
  •           Les modules standards d’Apache compilés en statique.

./configure --prefix=/apache/apache_2.0.49 \
  --enable-access\
  --enable-auth \
 --enable-include \
 --enable-log_config \
 --enable-env \
 --enable-expires \
 --enable-setenvif \
 --enable-proxy \
 --enable-deflate \
 --with-z=/usr/work/apache/zlib-for-apache\
 --enable-proxy_connect \
 --enable-proxy_ftp \
 --enable-proxy_http \
 --enable-ssl \
 --enable-prefork \
 --enable-http_core \
 --enable-mime \
 --enable-status \
 --enable-autoindex \
 --enable-asis \
 --enable-info \
 --enable-cgi \
 --enable-negotiation \
 --enable-dir \
 --enable-imap \
 --enable-actions \
 --enable-userdir \
 --enable-alias \
 --enable-rewrite \
 --enable-so \
 --with-mpm=prefork

Cette directive:
-Définit  /apache/apache_2.0.49  comme répertoire d’Apache 2. Il s’agit du répertoire dans lequel Apache 2 sera installé.
-Active le fonctionnement d’Apache avec les modules partagés (plug-in)

A l’issue de cette opération  (45 minutes), un fichier makefile est disponible pour la compilation.

1.3.2     Compilation.


Elle s’effectue avec la comande:

            make

La compilation peut durer de 10 à 15 minutes. A l’issu de celle-ci,  l’installation peut être lancée.


L'installation des binaires issus de la compilation est effectuée  avec la commande :

            make install

2.1     Répertoires principaux

L’arborescence des répertoires d’Apache se présente de la façon suivante:

Sous-répertoire

Apache_2.0.49/bin
Sous-répertoire des programmes.
Apache_2.0.49/conf
Sous-répertoire des fichiers de configuration.
Apache_2.0.49/error
Sous-répertoire des fichiers de message.
Apache_2.0.49/htdocs
Sous-répertoire des pages html d’Apache .
Apache_2.0.49/icons
Sous-répertoire des icônes utilisées dans Apache.
Apache_2.0.49/logs
Sous-répertoire des journaux d’accès et d’erreurs.
Apache_2.0.49/manual
Sous-répertoir des manuels d’Apache
Apache_2.0.49/modules
Sous –répertoire des modules dynamiques

Les fichiers de configuration:

Fichier
Objet
conf/httpd.conf
Contient les paramètres  de fonctionnement d’Apache
Conf/mime.types
Définit les associations types mimes –extension des fichiers que peut retourner le serveur

2.2     Démarrage d’Apache

A partir du sous répertoire bin d’Apache2, taper:

            ./apachectl start

Pour vérifier le démarrage d’apache, à partir d’Internet explorer ou tout autre navigateur, taper:

            http://nomserveur/

On peut aussi indiquer l’adresse IP du serveur abritant Apache 2.
Exemple:

            http://192.168.0.12

Apache doit retourner sa page d’accueil:


2.3     Arrêt Apache 2

A partir du sous répertoire bin d’Apache 2, taper:

            ./apachectl stop

2.4     Les modules apache 2 installés


Les modules ci-dessous sont ceux généralement retenus  en production. .


Module
Type
Fonction
http_core.c
Statique

mod_access.c
Statique
Gère le ccontrôle d'accès basé sur les noms d'hôtes ou les adresses IP du client.
Prefork.c
Statique

mod_actions.c
Statique
Permet l'exécution de scripts CGI basés sur un type de média particulier ou une méthode de requête HTTP
mod_alias.c
Statique
Permet l'intégration de diverses parties du système de fichiers dans l'arborescence de documents servis par le serveur, et intègre le mécanisme de re direction d'URL.
mod_auth.c
Statique
Permet une authentification des utilisateurs sur la base de fichiers texte.
mod_cgi.c
Statique
Il met en place le mécanisme qui permet l'exécution de scripts CGI. Tout fichier de type MIME application/x-httpd-cgi sera traité par ce module.
mod_deflate.c
Statique

mod_dir.c
Statique
Il gère la redirection d'URL avec "slash final" et renvoie l'index de répertoire.
mod_env.c
Statique
Il procure le mécanisme pour passer des variables d'environnement à des scripts CGI/SSI
mod_expires.c
Statique
Il gère la génération des champs d'en-tête Expires: en fonction de critères propres à l'utilisateur
mod_include.c
Statique
Il permet la composition dynamique de documents HTML par le serveur.
mod_info.c
Statique
Il permet d'obtenir une vue d'ensemble de la configuration courante du serveur dont la liste des modules installés et des directives des fichiers de configuration du serveur.
mod_log_config.c
Statique
Gère  l'enregistrement de la trace des requêtes reçues par le serveur
mod_mime.c
Statique
Donne à Apache la capacité de déterminer le type de document
mod_negotiation.c
Statique
Gère la négociation de contenu, ou plus précisément, la sélection de contenu. Celle-ci consiste en la sélection d'une version de document qui correspond le mieux aux possibilités du client, parmi un ensemble de documents.
mod_proxy.c
Statique
Ce module implémente un proxy/cache pour Apache

proxy_connect.c
Statique
Gère les fonctionnalités de proxy pour CONNECT.

proxy_ftp.c
Statique
Gère les fonctionnalités de proxy pour ftp.
proxy_http.c
Statique
Gère les fonctionnalités de proxy pour http 0.x, 1.x.
mod_rewrite.c
Statique
Fournit un interpréteur de règles dont l'action est de réécrire "au vol" les URL requises.
mod_setenvif.c
Statique
Gère la définition des variables d’environnement d’après les informations du client
mod _so.c
Statique
Gère les fonctionnalités de chargement de modules dynamiques (EX ; plugin Web logic, PHP, etc)
mod _ssl.c
Dynamique
Gestion de la sécurisation SSL
mod_status.c
Statique
Le module d'état mod_status permet à l’ administrateur du serveur d’obtenir des informations statistiques sur le fonctionnement du serveur.
mod_userdir.c
Statique
Gère la définition de répertoires propres à un utilisateur.
mod_autoindex.c
Statique

mod_asis.c
Statique

mod_imap.c
Statique

php4_module
dynamique
Module PHP 4
mod_wl_20.so
dynamique
Connecteur WebLogic Server

3.     La configuration Apache 2

L'installateur Apache 2 met en place des paramètres  standards et minimum dans le fichier de configuration: httpd.conf. Le fichier de configuration est localisé dans le sous répertoire apache_2.0.49/conf.

3.1     Groupe et Utilisateurs Apache

Comme précisé ci-dessus, des utilisateurs et un groupe spécifiques sont dédies à Apache, pour des question de sécurités et d’homogénéité. Ces utilisateurs et groupes possèdent aussi un ‘ID’ bien définit.
Des utilisateurs et un groupe spécifiques sont dédies à Apache, pour des questions de sécurités et d’homogénéité. Ces utilisateurs et groupes possèdent un ‘ID’ bien défini. 

Groupe
Id
Utilisateurs du groupe
webgrp
2800
webadm


w3user

3.2     Configuration minimale ou standard

Les principaux paramètres à examiner après une installation standard sont listés ci-après. 

# Répertoire de base d’Apache 2
ServerRoot /apache/apache_2.0.49
# Enregistrement identifiant process
<IfModule !mpm_netware.c>
  PidFile logs/httpd.pid
</IfModule>
DocumentRoot /usr/local/apache2
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15

# Port d’écoute Apache
listen 80

#
# Dynamic Shared Object (DSO) Support
#
# A activer en fonction des besoins 
#
#
#--------------Added DSO ------------------
LoadModule access_module modules/mod_access.so
LoadModule actions_module modules/mod_actions.so
LoadModule alias_module modules/mod_alias.so
LoadModule asis_module modules/mod_asis.so
LoadModule auth_module modules/mod_auth.so
#LoadModule auth_anon_module modules/mod_auth_anon.so
#LoadModule auth_dbm_module modules/mod_auth_dbm.so
#LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule autoindex_module modules/mod_autoindex.so
#LoadModule cern_meta_module modules/mod_cern_meta.so
LoadModule cgi_module modules/mod_cgi.so
#LoadModule dav_module modules/mod_dav.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule dir_module modules/mod_dir.so
LoadModule env_module modules/mod_env.so
#LoadModule expires_module modules/mod_expires.so
#LoadModule file_cache_module modules/mod_file_cache.so
#LoadModule headers_module modules/mod_headers.so
LoadModule imap_module modules/mod_imap.so
LoadModule include_module modules/mod_include.so
#LoadModule info_module modules/mod_info.so
#LoadModule isapi_module modules/mod_isapi.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule mime_module modules/mod_mime.so
#LoadModule mime_magic_module modules/mod_mime_magic.so
LoadModule negotiation_module modules/mod_negotiation.so
#LoadModule rewrite_module modules/mod_rewrite.so
LoadModule setenvif_module modules/mod_setenvif.so
#LoadModule speling_module modules/mod_speling.so
#LoadModule status_module modules/mod_status.so
#LoadModule unique_id_module modules/mod_unique_id.so
LoadModule userdir_module modules/mod_userdir.so
#LoadModule usertrack_module modules/mod_usertrack.so
#LoadModule vhost_alias_module modules/mod_vhost_alias.so
#LoadModule ssl_module modules/mod_ssl.so

User nobody
Group nobody

ServerAdmin admin@cloud-france.com

# Nom du serveur ou adresse IP
ServerName srvr03:80

La signification de tous ces paramètres est fournie dans les manuels Apache 2 . On peut expliquer très succintement quelques uns des plus importants.

ServerRoot  /apache/apache_2.0.49

Cette option spécifie le répertoire principal d'Apache 2. Les différents composants sont placés dans les sous-répertoires du ServerRoot : bin pour les programmes, conf pour les fichiers de configuration, logs pour les journaux d'accès ou d'erreur, modules pour les modules dynamiques, man pour les pages de manuel, etc. Cette option prend comme valeur celle spécifiée pour le paramètre "--prefix" lors de la configuration de la compilation du noyau Apache.

LoadModule
Les directives  LoadModule  permettent l'utilisation des modules dynamiques (ou Dynamic Shared Objects, DSO).

Listen 80

Cette directive spécifie le port sur lequel le serveur Apache attend des requêtes. 80 est la valeur par défaut et correspond à la valeur attribuée au service www par les instances de normalisation.
Remarque : Un programme devant utiliser un port  inférieur à 1024 doit être lancé avec les droits de root. Apache doit dont être lancé avec les droits de root, sachant que la sécurité d’accès aux pages web est garantie par le mécanisme de fonctionnement client/serveur d'Apache.

User nobody
Group nobody

Les directives User et Group permettent de spécifier un utilisateur et un groupe fictifs qui détermineront les droits d'accès du serveur Apache, le but étant de limiter les risques en cas d'intrusion par un pirate. En effet le  processus père Apache , tournant avec les droits root, attend des connexions sur le port 80. Lorsqu'une demande de connexion arrive, ce processus père crée un processus fils (tournant avec les droits nobody) qui va être chargé de satisfaire les demandes du client venant de se connecter. C'est donc un processus ayant des droits restreints qui va lire les fichiers et les envoyer au navigateur.

ServerAdmin admin@cloud-france.com

La directive ServerAdmin permet simplement de définir une adresse email qui sera affichée sur les pages générées par Apache (pages d'erreur, présentation de répertoire, etc.)

ServerName otr-srv-03 :80

Cette directive permet de forcer un nom d'hôte qui sera renvoyé au navigateur client, par exemple www plutôt que le nom d'hôte réel. Toutefois vous ne pouvez pas spécifier n'importe quel nom ; celui que vous avez choisi devra être défini dans le DNS local. Si ce n'est pas le cas, il faudra spécifier son adresse IP.

DocumentRoot /apache/apache_2.0.49

Cette option permet de spécifier dans quel répertoire sont stockées les pages présentes à la racine du site.


Les directives de configuration du serveur Apache sont enregistrées dans le fichier httpd.conf situé dans le sous-répertoire conf  de l’arborescence d’installation d’Apache (Exemple : /apache/apache_2.0.49/conf).  Le fichier httpd.conf contient des valeurs par défaut à adapter en fonction de l’environnement.


Voici les premières directives du fichier httpd.conf à ajuster:

ServerRoot   /apache/apache_2.0.49
PidFile /var/apache/run/httpd.pid
Listen 80
ServerAdmin  webmaster@cloud-france.com
ServerName  <Nom-serveur ou adresse-IP>
DocumentRoot  /appli/httpd/htdocs
<Directory  "/appli/httpd/htdocs">
Options Indexes FollowSymLinks
AllowOverride None
Order deny,allow
      Allow from all
</Directory>

3.3.1.1     Répertoire du serveur Apache

La directive ServerRoot permet d’indiquer le répertoire où est localisé le serveur Apache.

Exemple :

            ServerRoot   /apache/apache_2.0.49

Les différents composants d’Apache 2 sont placés dans les sous-répertoires du ServerRoot , en particulier: bin pour les programmes, conf pour les fichiers de configuration, logs pour les journaux d'accès ou d'erreur, modules pour les modules dynamiques.

3.3.1.2     Identificateur du process Apache


La directive PidFile permet de spécifier le nom complet d’un fichier devant recevoir l’identification du processus principal du serveur Apache. Cet identificateur est un numéro pouvant être utilisé pour tuer le processus Apache, avec la commande kill.

Exemple :

            PidFile /var/apache/run/httpd.pid


3.3.1.3     Ports d’écoute

La directive Listen ou Port permet de spécifier le port d’écoute du serveur Apache. Le port à utiliser est le port 80, spécifié avec la directive ‘Listen’. Il est préférable de choisir la directive Listen, car dans un cas où plusieurs ports sont spécifiés, les directives Listen fusionnent les ports d’écoute,. Par ailleurs,  il est possible de spécifier une adresse IP avec le port (ip:port) . Le port 443 est utilisé pour les connexions sécurisés SSL.

Exemples :

Listen 80
Listen 443 (port sécurisé HTTPS)


Remarque : Un programme devant utiliser un port  inférieur à 1024 doit être lancé avec les droits de root. Apache doit dont être lancé avec les droits de root, sachant que la sécurité d’accès aux pages web est garantie par le mécanisme de fonctionnement client/serveur d'Apache.

3.3.1.4     Adresse e-mail de l’administrateur

La directive ServerAdmin permet de spécifier l’adresse e-mail de L’administrateur du serveur afin que celui-ci puisse être contacté en cas de problème.

Exemple :

ServerAdmin webmaster@cloud-France.com

3.3.1.5     Nom du serveur

La directive ServerName permet de spécifier, soit le nom du serveur, soit son adresse IP. Dans le cas du nom du serveur, le nom indiqué doit être associé à une adresse IP (serveur DNS, ou fichier hosts).

 Exemples :

ServerName apache.cloud.net
ServerName 192.168.0.12
ServerName SRVR03

3.3.2     Répertoire d’accueil du serveur Principal


Même lorsqu’on héberge plusieurs sites web dans  la même instance Apache, il est indispensable de spécifier le répertoire d’accueil du serveur principal d’Apache, avec la directive ‘DocumentRoot’. Cette directive permet de restreindre les utilisateurs à l’arborescence spécifiée.

Exemple :

DocumentRoot /appli/httpd/htdocs

Le répertoire /appli/httpd/htdocs contient des fichiers index permettant de vérifier le fonctionnement du serveur Apache. Il est aussi fourni un fichier info.php permettant de vérifier le fonction d’Apache avec PHP, si ce dernier est est activé.

3.3.3     Utilisateur et groupe Apache


Les directives User et Group permettent de spécifier un utilisateur et un groupe qui détermineront les droits d'accès du serveur Apache, le but étant de limiter les risques en cas d'intrusion. En effet le  processus père Apache , tournant avec les droits root, attend des connexions sur le port 80. Lorsqu'une demande de connexion arrive, ce processus père crée un processus fils (tournant avec les droits User) qui va être chargé de satisfaire les demandes du client venant de se connecter. C'est donc un processus ayant des droits restreints qui va lire les fichiers et les envoyer au navigateur.

Exemple:
User  httpuser
Group  webgrp

3.4     Configuration optimisée

Les principales optimisations du serveur Apache concernent les délais de transaction client/serveur. Les optimisations visent donc à réduire les temps de réponse du serveur Apache, soit en utilisant une compression des flux (mod_deflate, anciennement mod_gzip), soit en modifiants les différents paramètres du fichier httpd.conf (processus pré-chargés, requêtes maximum par client, …), ou encore en jouant sur les caches comme avec mod_expires.

3.4.1     Les Modules d’optimisation

3.4.1.1     mod_expires

Cible : Sites avec de nombreux objets statiques (images, javascript, …) ayant une fréquence de mise à jour faible.
Gain : Nombre de Hits diminués

Le module statique apache “ Expires ” permet de ne plus émettre de requêtes vers le serveur pour récupérer un objet quand celui-ci est en cache dans le navigateur. Il y a ainsi économie des requêtes de type HTTP 304 (Not Modified).

    Exemple d’implémentation :

ExpiresActive On                                  # enable expirations

ExpiresByType image/gif A2592000       # expire GIF images after a
                                                                       #  month  in the client's cache

ExpiresByType text/html M604800         # HTML documents are good for
                                                                       #  a  week from the time they
                                                                       #  were  changed, period

Ces directives peuvent être implémentées au niveau d’un virtual-Host.

3.4.1.2     mod_deflate


Cible : Sites avec des flux réseaux élevés
Gain : Compression du trafic réseau  émis depuis le frontal HTTP .

Lorsqu’il est sollicité, ce module permet de compresser les données avant que celles-ci ne soient envoyées au navigateur. mod_deflate permet d'économiser de la bande passante, souvent de manière considérable. La contrepartie de cette compression est une forte charge CPU. mod_deflate remplace l'ancien module mod_gzip d'Apache 1.x. Pour que le serveur active la compression avec mod_deflate, il faut que le navigateur soit récent (Internet Explorer 5.01 au minimum avec http/1.1 d’activé).

SetOutputFilter DEFLATE

# Avec Netscape 4.x on ne compresse
# que les fichiers de type text/html
BrowserMatch ^Mozilla/4 gzip-only-text/html


# Avec Netscape 4.06-4.08 on ne
# compresse rien du tout
BrowserMatch ^Mozilla/4\.0[678] no-gzip


# Internet Explorer se fait passer pour
# Netscape mais on peut tout compresser
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html


#On ne compresse pas les images
SetEnvIfNoCase Request_URI \
\.(?:gif|jpe?g|png)$ no-gzip dont-vary


# On s'assure que les serveurs mandataires
# ne délivrent pas un contenu erroné
Header append Vary User-Agent env=!dont-vary


# On ajoute le ratio de compression dans les logs
DeflateFilterNote ratio
LogFormat '"%r" %b (%{ratio}n) "%{User-agent}i"' deflate


Pour voir le ratio de compression dans les logs d'Apache, changez la ligne

CustomLog logs/access_log common

par

CustomLog logs/access_log deflate.


En plus des gains apportés par les modules d’optimisation, les principales optimisations du serveur Apache concernent les délais de transaction client/serveur. Le simple fait de modifier certaines valeurs dans le fichier ‘httpd.conf’ peut grandement influencer le comportement du serveur. Les optimisations visent donc à réduire les temps de réponse du serveur Apache. Par défaut, dans le fichier ‘httpd.conf’ les valeurs de ces directives de connexion sont optimisées pour une machine comportant 512 mo de mémoire.

Sur AIX, Apache 2 met en œuvre un mécanisme  multi-process et multi-threads au sein de chaque process.




Les directives suivantes permettent d’exploiter cette caractéristique:

MaxClients

MaxRequestsPerChild

MaxSpareServers

MinSpareServers

StartServers

  MaxClients
La directive MaxClients indique le nombre limite de requêtes simultanées pouvant être acceptées par le serveur ; il représente le nombre maximum de processus serveur fils qui peuvent tourner à un instant donné. Les tentatives de connexions au delà de MaxClients sont normalement mises en attente ; une fois qu'un processus fils est libre à la fin d'une requête différente, la connexion en attente est traitée.

   MaxRequestsPerChild

La directive MaxRequestsPerChild indique le nombre limite de requêtes qu'un processus serveur fils peut traiter. Au-dessus de cette limite, le processus fils meurt. Si ce paramètre est fixé à 0, alors les processus fils ne meurent jamais.

Le fait de mettre ‘MaxRequestsPerChild’ à une valeur non nulle a deux conséquences bénéfiques :

  • Cela limite le volume de mémoire qu'un processus peut consommer et évite une saturation mémoire.
  • En donnant à un processus un temps de vie fini, le nombre total de processus impliqués dans le serveur décroît lorsque la charge du serveur retombe.

  MaxSpareServers

La directive MaxSpareServers indique le nombre maximal de processus fils en attente. Un processus en attente est un processus qui existe, mais qui ne traite pas de requête. S'il existe plus de processus fils  que la limite fixée par MaxSpareServers, alors le père viendra tuer les processus supplémentaires. (Fonctionnalité particulièrement utile dans   les environnements vraiment très chargés).

MinSpareServers

La directive ‘MinSpareServers’ indique le nombre minimum de processus fils en attente qu'un serveur pourra conserver. S'il existe moins de processus serveurs fils en attente, le processus père recréera des processus fils au rythme de 1 par seconde. (Fonctionnalité particulièrement utile dans   les environnements vraiment très chargés).

  StartServers

La directive ‘StartServers’ définit le nombre de processus fils créés dès le démarrage du serveur. Le nombre de ces processus est contrôlé dynamiquement en fonction de la charge.

Recommandations


Paramètre
Valeur
MaxSpareServers
MaxClients
MinSpareServers
MaxClients
StartServers
MaxClients

Pour une machine dédié uniquement à un serveur Apache, il est recommandé d’appliquer cette politique de paramétrage. Celle-ci vise à consacrer Apache à répondre exclusivement aux requêtes demandées et non pas à créer des processus pour s’adapter à la charge courante. Le paramétrage est déterminé pour profiter des ressources machines disponibles.

Pour un serveur doté de 512 Mo de RAM, le paramétrage sera le suivant :

MaxClients 50
MinSpareServers 50
MaxSpareServers 50
StartServers 50
MaxRequestsPerChild 10000

Pour un AIX  Power PC de 1,2 Ghz doté de 1 Go de RAM, le paramétrage pourra être le suivant :

MaxClients 250
MinSpareServers 250
MaxSpareServers 250
StartServers 250
      MaxRequestsPerChild 10000

4.     Les plug-ins

4.1      Définition

Les requêtes http émanant d’un navigateur sont reçues par le serveur Apache. Pour que celui-ci  puisse router à un processus quelconque (conteneur J2EE par exemple) les requêtes le concernant, il faut qu’il dispose d’un agent ou module capable de prendre en charge toute requête destinée à ce processus. Un tel agent est appelé plug-in ou connecteur. On parle de connecteur Apache-WebLogic, Apache-Tomcat, Apache-.NET  Le support de ce mécanisme de plug-in permet de placer Apache en frontal de divers moteurs de traitement de requêtes web.
Un  connecteur Apache se présente  sous la forme d’un Dynamic Shared Object, équivalent DLL de l’environnement Windows. Si celui-ci est obtenu sous un nom différent, ce qui est très souvent le cas (ex.: mod_wl_20_wls81.so, mod_jk_2.0.47.so), il faut le renommer en mod_wl_20.so, mod_jk.so.

4.2     Plug-in Weblogic

Le serveur HTTP Apache intervient comme point d’entrée pour les solutions d’accueil des applications client léger. Le plug-in Weblogic permet d’assurer le lien Apache-webLogic selon le schéma ci-dessous :







Les URL sans indication de port sont normalement réceptionnées par Apache, sur le port 80 (sauf indication contraire dans le fichier de configuration. En général on laisse Apache sur le port 80). L’adressage direct de WebLogic s’effectue par le biais du port 7101 ou 7001 pour l’instance d’administration.                                                                                                                 Le module d’extension mod_wl_20.so fourni avec la distribution WebLogic doit être copié dans le sous-répertoire  modules/ d’Apache. La séquence de directive suivante est ajoutée dans le fichier de configuration d’Apache, httpd.conf, après le chargement des différents modules DSO.

LoadModule weblogic_module modules/mod_wl_20.so
<IfModule mod_weblogic.c>
WebLogicHost srv-04
WebLogicPort 7101
MatchExpression *.jsp
</IfModule>

Dans cette séquence:

-          WebLogicHost  sépcifie le nom du serveur  hébergeant WebLogic;
-          WebLogicPort spécifie le port d’écoute du serveur WebLogic;
-          MatchExpression spécifie  le filtre permettant à Apache d’identifer les requêtes à router vers WebLogic.

Plusieurs filtres MatchExpression peuvent être spécifiés.

Si WebLogic est démarré, une URL du type http://srv-04/console/index.jsp doit afficher la pache d’accueil de WebLogic.
Par comodité, il est recommandé de placer la séquence de paramétrage du plug-in dans un fichier texte, weblogic.conf par exemple. Il faut ensuite placer une directive include dans le fichier de configuration Apache, à savoir httpd.conf. Exemple:

<IfModule mod_weblogic.c>
Include conf/weblogic.conf
</IfModule>

Le tableau ci-dessous fournit la matrice de compatibilité des versions de WebLogic avec Apache en terme de plug-in.

Version de WebLogic
Version d’Apache
Plug-in Apache-WebLogic
6.1 SP2, SP3
1.3.X
mod_wl.so ou mod_wl_ssl.so
6.1 SP4, SP5
1.3.X
mod_wl.so ou mod_wl_ssl.so
6.1 SP4, SP5
2.0.44 et supérieur
mod_wl_20.so ou mod_wl128.so
7.x et 8.x
2.0.44 et supérieur
mod_wl_20.so ou mod_wl128.so



4.3     Plug-in Tomcat

Le serveur d’application préconisé est WebLogic et il est recommandé aux applications fonctionnant avec Tomcat de migre vers webLogic.  Pour les applications en production qui ne peuvent pas migrer,  cette section présente un mode de mise en œuvre du bplug-in Tomcat avec Apache 2.0.49.

Le serveur HTTP Apache intervient comme point d’entrée pour les solutions d’accueil des applications client léger en environnement sécurisé. Le plug-in Tomcat permet d’assurer le lien Apache-Tomcat selon le schéma ci-dessous 
:



L’intégration de Tomcat avec le serveur Apache s’effectue en trois étapes, une fois Tomcat installé:
1). Mise en place du plug-in mod_jk;
2). Mise à jour du fichier de configuration du serveur Apache;
3). Configuration des processus worker.

4.3.1     Configuration


La configuration du connecteur a pour but d’indiquer à celui-ci la localisation des différents worker process et d’identifier précisément à quel worker process router les requêtes. La configuration doit aussi préciser le niveau de log  et l’emplacement des logs.
La mise en place  s’effectue en copiant le module jk dans le répertoire adéquat et en créant un lien symbolique mod_jk.so:

cp mod_jk-2.0.42.so   /apache/apache_2.0.49/modules
            ln –s mod_jk-2.0.42.so  mod_jk.so

4.3.2     Mise à jour du fichier de configuration du serveur Apache

           
Cette mise à jour consiste à indiquer au serveur Apache:
                        1°) Comment charger le connecteur jk ( directive LoadModule );
                        2°)  Quelles URL transmettre au connecteur Tomcat (directive JkMount ).
Ainsi, pour transmettre à Tomcat toutes les URL contenant “/jsp/”, ou “/servlet”, les directives seront les suivantes:

           JkMount /jsp/*.jsp ajp13
           JkMount /servlet/*.jsp ajp13

Ces informations sont en général placées dans le fichier de configuration Apache-Tomcat nommé mod_jk.conf. Le fichier mod_jk.conf est placé dans le sous répertoire conf du répertoire de Tomcat et une directive include introduite à la fin du fichier de configuration du serveur Apache:

            Include  /tomcat/conf/mod_jk.conf

Pour générer automatiquement  mod_jk.conf, il faut insérer cette séquence dans le  fichier server.xml

<Listener className="org.apache.ajp.tomcat4.config.ApacheConfig"
            modJk="/etc/httpd/modules/mod_jk.so" jkDebug="info"
            jkLog="/tomcat/logs/mod_jk.log" />


  Définition

Un “worker process” est une instance de Tomcat assurant le traitement de servlets et de JSP. Dans les configurations courantes, on définit un seul worker process. Mais on peut définir  plusieurs process workers pour assurer la répartion de charges (load-balancing)

Configuration

La configuration des “processus worker” est spécifiée dans un fichier de configuration nommé workers.properties. Celui-ci est  localisé dans le sous répertoire conf/jk/ du répertoire d’installation de Tomcat
Les trois informations à préciser dans workers.properties sont:
-          Le répertoire racine de Tomcat;
-          Le répertoire racine du jdk Java;
-          Le séparateur de fichier  “/” ou “\”.

Exemple:
workers.tomcat_home=/tomcat
workers.java_home=/usr/local/jdk


Une fois les configurations effectuées, Tomcat et Apache peuvent être démarrés, dans l’ordre suivant:
    1) Tomcat
    2) Apache

Apache devant router vers WebLogic et Tomcat les mêmes types de fichier, la desserte de WebLogic et de Tomcat par un même serveur Apache n’est pas conseillée, bien que possible.

5.1     Plug-in .NET

Le serveur d’application préconisé est WebLogic et il est recommandé aux applications fonctionnant avec Tomcat de migre vers webLogic.  Pour les applications en production qui ne peuvent pas migrer,  cette section présente un mode de mise en œuvre du bplug-in Tomcat avec Apache 2.0.49.

Pour des raisons de sécurité et en substitution à IIS, le serveur HTTP Apache peut intervenir  comme point d’entrée pour les solutions d’accueil des applications client léger .NET. Le plug-in Proxy d’Apache permet d’assurer le lien Apache-.NET selon le schéma ci-dessous :




La séquence de directives suivante est ajoutée dans le fichier de configuration d’Apache, httpd.conf, après le chargement des différents modules DSO (Dynamic Shared Objects).


LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule rewrite_module modules/mod_rewrite.so
ProxyPass /aspnet http://192.168.0.111:8081
ProxyPassReverse /aspnet http:// 192.168.0.111:8081

Dans cette séquence, ProxyPass spécifie  le filtre permettant à Apache d’identifer les requêtes à router vers .NET (ici, toutes les requêtes commençant par /aspnet). Exemple:

            http://sysref3/aspnet/index.aspx

6.     Intégration de PHP  4.3.6


Les fichiers sources compressés  de php4 sont  placés dans /usr/work/php4  (php-4.3.6.tar).

Décompression des fichiers:

            Tar –xvf  php-4.3.6.tar

Placement dans le répertoire des sources de php4:

cd  /usr/work/php4/php-4.3.6


Configuration de la compilation de php:


./configure --prefix=/php/php-4.3.6 –-with-apxs2=/apache/apache-2.0.49/bin/apxs2 –-with-config-file-path=/php/php-4.3.6 –-with-mysql


Les directive de préparation de la compilation sont expliquées dans les lignes qui suivent.

--prefix=/php/php-4.3.6:  spécifie le répertoire de php.

–-with-apxs2=/apache/apache-2.0.49/bin/apxs2 : Spécifie que php sera installé comme module dynamique (DSO).

–-with-config-file-path=/php/php-4.3.6 : indique le répertoire dans lequel php trouvera son fichier de configuration php.ini.

–-with-mysql : Indique que php supportera les bases mysql.

Lancement de la compilation:

      make

A ce stade, Apache doit être arrêté s’il est actif:

      cd /apache/apache-2.0.49/bin
      ./apachectl stop


Lancement l’installation:

      make install

7.     intégration de mysql

La version de mysql est la 4.0.20 pour Aix 5.2 sur power pc, téléchargée à partir du site de téléchargement IBM.

Le fichier /mysql/bin/mysql_config  contient les informations de configuration de mysql.

Paramètres de démarrage:

/mysql/support-files/mysql_server

      datadir=/mysql/data
      basedir=/mysql
      bindir=./bin

/etc/my.cnf




Aucun commentaire :

Bibliographie

  • ASP.NET Data Web Controls(Scott Michell)
  • Building Custom PHP Extensions(Blake Schwendiman)
  • Développer avec CORBA en JAVA ET C++(David Acremann)
  • Java Native Interface(Sheng Liang)
  • Mastering WebLogic Server(Gregory Nyberg; Robert Patrick)
  • Oracle Database 10g RAC on Linux(Julian Dyke; Steve Shaw)
  • Test Process Improvement(Martin Pol)
Back to top