Serveur Web · 7 min read · Oct 08, 2025

Le cluster web parfaitement équilibré et à haute disponibilité avec 2 serveurs exécutant Xen sur Ubuntu 8.04 Hardy Heron - Page 2

7. Apache/PHP5/Ruby (web1, web2)

7.1 Installation du logiciel

Maintenant, nous installons Apache :

apt-get install apache2 apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-cert

Ensuite, nous installons PHP5 et Ruby (tous deux en tant que modules Apache) :

apt-get install libapache2-mod-php5 libapache2-mod-ruby php5 php5-common php5-curl php5-dev php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-mhash php5-ming php5-mysql php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl

7.2 Configuration d’Apache

Ensuite, nous éditons /etc/apache2/mods-available/dir.conf :

vi /etc/apache2/mods-available/dir.conf

et changeons la ligne DirectoryIndex :



          #DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
          DirectoryIndex index.html index.htm index.shtml index.cgi index.php index.php3 index.pl index.xhtml

Maintenant, nous devons activer certains modules Apache (SSL, réécriture, suexec et inclusion) :

a2enmod ssl
a2enmod rewrite
a2enmod suexec
a2enmod include

Rechargeons la configuration d’Apache :

/etc/init.d/apache2 force-reload

Nous allons ajouter quelques domaines dans le fichier de configuration vhost :

mkdir /var/www/example
mkdir /var/www/yoursite
mkdir /var/www/example/web
mkdir /var/www/example/ssl
mkdir /var/www/yoursite/web
mkdir /var/www/yoursite/ssl
echo “Include /etc/apache2/vhosts.conf” >> /etc/apache2/apache2.conf
vi /etc/apache2/vhosts.conf

Le fichier de configuration devrait ressembler à ceci :

#NameVirtualHost 192.168.1.106:80
#
#        ServerName localhost
#        ServerAdmin root@localhost
#        DocumentRoot /var/www/sharedip
#
#NameVirtualHost 192.168.1.107:80
#
#        ServerName localhost
#        ServerAdmin root@localhost
#       DocumentRoot /var/www/sharedip
#

###EXAMPLE.COM###

        ServerName example.com
        ServerAlias www.example.com
        DocumentRoot /var/www/example/web
        SetEnvIf Request_URI \.jpg dontlog
        SetEnvIf Request_URI \.gif dontlog
        SetEnvIf Request_URI \.css dontlog
        SetEnvIf Request_URI \.png dontlog
        SetEnvIf Request_URI \.txt dontlog
        CustomLog /var/log/apache2/example.com-access.log combined env=!dontlog
        ErrorLog /var/log/apache2/example.com-error.log
        Redirect /webmail http://www.example.com:81/squirrelmail
         Redirect /squirrelmail http://www.example.com:81/squirrelmail
        ErrorDocument 400 /error/invalidSyntax.html
        ErrorDocument 401 /error/authorizationRequired.html
        ErrorDocument 403 /error/forbidden.html
        ErrorDocument 404 /error/fileNotFound.html
        ErrorDocument 405 /error/methodNotAllowed.html
        ErrorDocument 500 /error/internalServerError.html
        ErrorDocument 503 /error/overloaded.html


        ServerName example.com
        ServerAlias www.example.com
        DocumentRoot /var/www/example/web
        SetEnvIf Request_URI \.jpg dontlog
        SetEnvIf Request_URI \.gif dontlog
        SetEnvIf Request_URI \.css dontlog
        SetEnvIf Request_URI \.png dontlog
        SetEnvIf Request_URI \.txt dontlog
        CustomLog /var/log/apache2/example.com-access.log combined env=!dontlog
        ErrorLog /var/log/apache2/example.com-error.log
        ErrorDocument 400 /error/invalidSyntax.html
        ErrorDocument 401 /error/authorizationRequired.html
        ErrorDocument 403 /error/forbidden.html
        ErrorDocument 404 /error/fileNotFound.html
        ErrorDocument 405 /error/methodNotAllowed.html
        ErrorDocument 500 /error/internalServerError.html
        ErrorDocument 503 /error/overloaded.html

### Décommentez cette partie si vous utilisez SSL sur cet hôte virtuel.
### N'oubliez pas de créer ou de copier les fichiers de certificat avant de redémarrer apache.
#
#
#        ServerName example.com
#        ServerAlias www.example.com
#        DocumentRoot /var/www/example/web
#        SetEnvIf Request_URI \.jpg dontlog
#        SetEnvIf Request_URI \.gif dontlog
#        SetEnvIf Request_URI \.css dontlog
#        SetEnvIf Request_URI \.png dontlog
#        SetEnvIf Request_URI \.txt dontlog
#        CustomLog /var/log/apache2/example.com-access.log combined env=!dontlog
#        ErrorLog /var/log/apache2/example.com-error.log
#        SSLEngine on
#        SSLCertificateFile /var/www/example/ssl/www.example.com.crt
#        SSLCertificateKeyFile /var/www/example/ssl/www.example.com.key
#        SSLCertificateChainFile /var/www/example/ssl/www.example.com.key.org
#        Redirect /webmail http://www.example.com:81/squirrelmail
#         Redirect /squirrelmail http://www.example.com:81/squirrelmail
#        ErrorDocument 400 /error/invalidSyntax.html
#        ErrorDocument 401 /error/authorizationRequired.html
#        ErrorDocument 403 /error/forbidden.html
#        ErrorDocument 404 /error/fileNotFound.html
#        ErrorDocument 405 /error/methodNotAllowed.html
#        ErrorDocument 500 /error/internalServerError.html
#        ErrorDocument 503 /error/overloaded.html
#
#

        ServerName example.com
        ServerAlias www.example.com
        DocumentRoot /var/www/example/web
        SetEnvIf Request_URI \.jpg dontlog
        SetEnvIf Request_URI \.gif dontlog
        SetEnvIf Request_URI \.css dontlog
        SetEnvIf Request_URI \.png dontlog
        SetEnvIf Request_URI \.txt dontlog
        CustomLog /var/log/apache2/example.com-access.log combined env=!dontlog
        ErrorLog /var/log/apache2/example.com-error.log
        Redirect /webmail http://www.example.com:81/squirrelmail
         Redirect /squirrelmail http://www.example.com:81/squirrelmail
        ErrorDocument 400 /error/invalidSyntax.html
        ErrorDocument 401 /error/authorizationRequired.html
        ErrorDocument 403 /error/forbidden.html
        ErrorDocument 404 /error/fileNotFound.html
        ErrorDocument 405 /error/methodNotAllowed.html
        ErrorDocument 500 /error/internalServerError.html
        ErrorDocument 503 /error/overloaded.html


        ServerName example.com
        ServerAlias www.example.com
        DocumentRoot /var/www/example/web
        SetEnvIf Request_URI \.jpg dontlog
        SetEnvIf Request_URI \.gif dontlog
        SetEnvIf Request_URI \.css dontlog
        SetEnvIf Request_URI \.png dontlog
        SetEnvIf Request_URI \.txt dontlog
        CustomLog /var/log/apache2/example.com-access.log combined env=!dontlog
        ErrorLog /var/log/apache2/example.com-error.log
        Redirect /webmail http://www.example.com:81/squirrelmail
         Redirect /squirrelmail http://www.example.com:81/squirrelmail
        ErrorDocument 400 /error/invalidSyntax.html
        ErrorDocument 401 /error/authorizationRequired.html
        ErrorDocument 403 /error/forbidden.html
        ErrorDocument 404 /error/fileNotFound.html
        ErrorDocument 405 /error/methodNotAllowed.html
        ErrorDocument 500 /error/internalServerError.html
        ErrorDocument 503 /error/overloaded.html

###YOURSITE.COM###

        ServerName yoursite.com
        ServerAlias www.yoursite.com
        DocumentRoot /var/www/yoursite/web
        SetEnvIf Request_URI \.jpg dontlog
        SetEnvIf Request_URI \.gif dontlog
        SetEnvIf Request_URI \.css dontlog
        SetEnvIf Request_URI \.png dontlog
        SetEnvIf Request_URI \.txt dontlog
        CustomLog /var/log/apache2/yoursite.com-access.log combined env=!dontlog
        ErrorLog /var/log/apache2/yoursite.com-error.log
        Redirect /webmail http://www.yoursite.com:81/squirrelmail
         Redirect /squirrelmail http://www.yoursite.com:81/squirrelmail
        ErrorDocument 400 /error/invalidSyntax.html
        ErrorDocument 401 /error/authorizationRequired.html
        ErrorDocument 403 /error/forbidden.html
        ErrorDocument 404 /error/fileNotFound.html
        ErrorDocument 405 /error/methodNotAllowed.html
        ErrorDocument 500 /error/internalServerError.html
        ErrorDocument 503 /error/overloaded.html


        ServerName yoursite.com
        ServerAlias www.yoursite.com
        DocumentRoot /var/www/yoursite/web
        SetEnvIf Request_URI \.jpg dontlog
        SetEnvIf Request_URI \.gif dontlog
        SetEnvIf Request_URI \.css dontlog
        SetEnvIf Request_URI \.png dontlog
        SetEnvIf Request_URI \.txt dontlog
        CustomLog /var/log/apache2/yoursite.com-access.log combined env=!dontlog
        ErrorLog /var/log/apache2/yoursite.com-error.log
        ErrorDocument 400 /error/invalidSyntax.html
        ErrorDocument 401 /error/authorizationRequired.html
        ErrorDocument 403 /error/forbidden.html
        ErrorDocument 404 /error/fileNotFound.html
        ErrorDocument 405 /error/methodNotAllowed.html
        ErrorDocument 500 /error/internalServerError.html
        ErrorDocument 503 /error/overloaded.html

### Décommentez cette partie si vous utilisez SSL sur cet hôte virtuel.
### N'oubliez pas de créer ou de copier les fichiers de certificat avant de redémarrer apache.
#
#
#       ServerName yoursite.com
#        ServerAlias www.yoursite.com
#        DocumentRoot /var/www/yoursite/web
#        SetEnvIf Request_URI \.jpg dontlog
#        SetEnvIf Request_URI \.gif dontlog
#        SetEnvIf Request_URI \.css dontlog
#        SetEnvIf Request_URI \.png dontlog
#        SetEnvIf Request_URI \.txt dontlog
#        CustomLog /var/log/apache2/yoursite.com-access.log combined env=!dontlog
#        ErrorLog /var/log/apache2/yoursite.com-error.log
#        SSLEngine on
#        SSLCertificateFile /var/www/yoursite/ssl/www.yoursite.com.crt
#        SSLCertificateKeyFile /var/www/yoursite/ssl/www.yoursite.com.key
#        SSLCertificateChainFile /var/www/yoursite/ssl/www.yoursite.com.key.org
#        Redirect /webmail http://www.yoursite.com:81/squirrelmail
#         Redirect /squirrelmail http://www.yoursite.com:81/squirrelmail
#        ErrorDocument 400 /error/invalidSyntax.html
#        ErrorDocument 401 /error/authorizationRequired.html
#        ErrorDocument 403 /error/forbidden.html
#        ErrorDocument 404 /error/fileNotFound.html
#        ErrorDocument 405 /error/methodNotAllowed.html
#        ErrorDocument 500 /error/internalServerError.html
#        ErrorDocument 503 /error/overloaded.html
#
#

Les options “SetEnvIf Request_URI … “ et “env=!dontlog” sont là pour rendre les journaux plus propres, elles ne journaliseront pas l’accès aux images et aux fichiers css.

J’utilise les fichiers shareip d’ISPConfig et les pages d’erreur : ICI

Modifiez-les selon vos besoins.

Tout d’abord, installez wget :

apt-get install wget

cd /var/www
wget http://www.blogama.org/errorpages.tar.gz
tar -zxvf errorpages.tar.gz
rm -rf errorpages.tar.gz
chmod 755 /var/www/error/ -R
cp -av /var/www/error/ /var/www/example/web/
cp -av /var/www/error/ /var/www/yoursite/web/

Nous allons maintenant éditer le fichier /etc/apache2/sites-available/default afin qu’il ne journalise pas les requêtes ldirectord (le répartiteur de charge) :

mv /etc/apache2/sites-available/default /etc/apache2/sites-available/default.bak
vi /etc/apache2/sites-available/default

Et collez ceci :

NameVirtualHost *

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/
        
                Options FollowSymLinks
                AllowOverride None
        
        
                Options FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        
        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        
        ErrorLog /var/log/apache2/error.log
        # Les valeurs possibles incluent : debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn
        #CustomLog /var/log/apache2/access.log combined
        SetEnvIf Request_URI "^/ldirectord\.php$" dontlog
        SetEnvIf Request_URI "token" dontlog
        SetEnvIf Remote_Addr "127\.0\.0\.1" dontlog
        SetEnvIf Request_URI \.ico dontlog
        CustomLog /var/log/apache2/access.log combined env=!dontlog
        ServerSignature On
    Alias /doc/ "/usr/share/doc/"
    
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    

Maintenant, nous allons ouvrir quelques ports dans apache qui seront utilisés plus tard :

vi /etc/apache2/ports.conf

Listen 80
Listen 81
Listen 10001
Listen 20001

    Listen 443

Le port 10001 et 20001 seront utilisés pour la surveillance. Le port 81 sera pour le webmail.

Nous devons redémarrer apache pour appliquer les modifications que nous avons apportées :

/etc/init.d/apache2 restart

7.3 Préparation des nœuds apache pour l’équilibrage de charge

Enfin, nous devons configurer nos nœuds de cluster Apache web1.example.com et web2.example.com pour accepter les requêtes sur les adresses IP virtuelles 192.168.1.106 et 192.168.1.107.

apt-get install iproute

Ajoutez ce qui suit à /etc/sysctl.conf :

vi /etc/sysctl.conf

# Activer la configuration de l'option arp_ignore
net.ipv4.conf.all.arp_ignore = 1
# Lorsqu'une requête arp est reçue sur eth0, ne répondre que si cette adresse est
# configurée sur eth0. En particulier, ne pas répondre si l'adresse est
# configurée sur lo
net.ipv4.conf.eth0.arp_ignore = 1
# Idem pour eth1, ajoutez pour toutes les interfaces ARPing
#net.ipv4.conf.eth1.arp_ignore = 1

# Activer la configuration de l'option arp_announce
net.ipv4.conf.all.arp_announce = 2
# Lors de l'envoi d'une requête ARP via eth0, utilisez toujours une adresse qui
# est configurée sur eth0 comme adresse source de la requête ARP. Si cela
# n'est pas défini, et que des paquets sont envoyés via eth0 pour une adresse qui est sur
# lo, et qu'une requête arp est requise, alors l'adresse sur lo sera utilisée.
# Comme l'adresse IP source des requêtes arp est entrée dans le cache ARP sur
# la destination, cela a pour effet d'annoncer cette adresse. Ce n'est
# pas souhaitable dans ce cas car les adresses sur lo sur les serveurs réels devraient
# être annoncées uniquement par le directeur linux.
net.ipv4.conf.eth0.arp_announce = 2
# Idem pour eth1, ajoutez pour toutes les interfaces ARPing
#net.ipv4.conf.eth1.arp_announce = 2

Ensuite, exécutez ceci :

sysctl -p

Ajoutez cette section pour l’adresse IP virtuelle à /etc/network/interfaces :

vi /etc/network/interfaces

auto lo:0
iface lo:0 inet static
 address 192.168.1.106
 netmask 255.255.255.255
 pre-up sysctl -p > /dev/null
auto lo:1
iface lo:1 inet static
 address 192.168.1.107
 netmask 255.255.255.255
 pre-up sysctl -p > /dev/null

Ensuite, exécutez ceci :

Veuillez noter : après l’étape suivante, vous obtiendrez probablement cette erreur : SIOCSIFFLAGS : Impossible d’assigner l’adresse demandée

C’est un bug normal et vous pouvez l’ignorer.

ifup lo:0
ifup lo:1

Si vous changez l’IP à un stade ultérieur, il est recommandé de faire ifup lo:0 puis ifdown lo:0 puis à nouveau ifup lo:0

Enfin, nous devons créer le fichier ldirectord.php. Ce fichier est demandé par les deux nœuds de répartiteur de charge de manière répétée afin qu’ils puissent voir si les deux nœuds Apache fonctionnent toujours avec MySQL. Je suppose que le document racine du site web principal apache sur web1 et web2 est /var/www, donc nous créons le fichier /var/www/ldirectord.php :

vi /var/www/ldirectord.php

et copiez ceci :

Plus tard, nous configurerons MySQL avec un accès local à l’utilisateur “ldirectord”, pour l’instant le fichier ne fonctionnera pas.

Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.