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 = 2Ensuite, 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/nullEnsuite, 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.
Recevez de nouveaux articles dans votre boîte de réception.
Aucun spam. Désabonnez-vous à tout moment.