Apache, est un logiciel de serveur HTTP produit par l'Apache Software Foundation. C'est le serveur HTTP le plus populaire du Web (Apache représente 50,93% des parts de marché). C'est un logiciel libre avec un type spécifique de licence, nommée licence Apache.
Pour l'installer vous devez vous connecter à votre serveur en utilisant La console de gestion, et taper cette commande :
apt-get install apache2 apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-cert
Pour plus d'informations sur l'installation de logiciels sur votre serveur, consultez : Installation et la désinstallation facile de paquets
Ensuite, nous allons installer PHP5 :
apt-get install libapache2-mod-php5 php5 php5-common php5-curl php5-dev php5-gd php5-idn php-pear php5-imagick php5-imap php5-json php5-mcrypt php5-memcache php5-mhash php5-ming php5-mysql php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl
Il vous sera demandé la question suivante :
Question Réponse Continue installing libc-client without Maildir support? ............................ YES
Maintenant nous allons éditer le fichier /etc/apache2/mods-available/dir.conf
Ce fichier peut être modifié avec un éditeur. Par exemple, si vous utilisez nano, tapez :
nano /etc/apache2/mods-available/dir.conf
Et ajoutez les lignes manquantes :
<IfModule mod_dir.c> DirectoryIndex index.html index.htm index.shtml index.cgi index.php index.php3 index.pl index.xhtml </IfModule>
Nous allons configurer Apache à l'écoute aussi sur le port 443 pour les connexions sécurisées HTTPS, allons éditer le fichier /etc/apache2/ports.conf
:
nano /etc/apache2/ports.conf
Et ajoutez les lignes manquantes :
Listen 80 Listen 443
Finalement nous habiliterons quelques modules nécessaires d'Apache :
a2enmod ssl a2enmod rewrite a2enmod suexec a2enmod include
Pour que Apache accepte les modifications dans la configuration, nous allons redémarrer le service :
/etc/init.d/apache2 force-reload
On configure ssl :
cp /etc/apache2/sites-available/default /etc/apache2/sites-available/ssl ln -s /etc/apache2/sites-available/ssl /etc/apache2/sites-enabled/ssl
Éditez le fichier de configuration /etc/apache2/sites-enabled/ssl
pour qu'il accepte les connections sur le port 443 :
NameVirtualHost *:443 <VirtualHost *:443> SSLEngine on SSLCertificateFile /etc/apache2/apache.pem (...les répertoires et autres configurations...)
Créez votre propre certificat SSL pour les connexions HTTPS :
openssl req $@ -new -x509 -days 3650 -nodes -out /etc/apache2/apache.pem -keyout /etc/apache2/apache.pem
chmod 600 /etc/apache2/apache.pem
Éditez le fichier de configuration /etc/apache2/sites-available/default
pour qu'il accepte les connections sur le port 80 :
NameVirtualHost *:80 <VirtualHost *:80> (...les répertoires et autres configurations...)
Puis redémarrez apache :
/etc/init.d/apache2 restart
Finalement placez vos fichiers .php ou .html dans /var/www
pour qu'ils deviennent le site de votre machine (celui disponible à l'adresse http://www.votreserveur.com/ ).
Si vous rencontrez un problème d'encodage des caractères de vos pages, par exemple les caractères accentués apparaissant sous la forme "�" (<?>), c'est probablement parce qu'Apache2 déclare dans les en-têtes HTTP qui accompagnent les pages visionnées un encodage par défaut en Unicode (UTF-8) :
Content-Type: text/html; charset=UTF-8
Tandis que les pages visionnées utilisent un autre encodage des caractères, comme par exemple Latin1 (ISO-8859-1). Même si vos documents indiquent le jeu de caractères utilisé, le paramètre donné par le serveur dans les en-têtes HTTP est prioritaire !
Pour corriger ce problème, il faudra éditer /etc/apache2/apache2.conf :
nano /etc/apache2/apache2.conf
Cherchez la ligne suivante :
#AddDefaultCharset ISO-8859-1
Décommentez-la en enlevant le # :
AddDefaultCharset ISO-8859-1
Pour ceux qui ont la locale iso-8859-15 (sinon vous pouvez faire "sudo dpkg-reconfigure locales" pour l'ajouter) et qui désirent l'utiliser par défaut, ajoutez un 5 en fin de ligne :
AddDefaultCharset ISO-8859-15
ainsi que la ligne suivante dans le paragraphe en-dessous :
AddCharset ISO-8859-15 .iso8859-15 .latin15 .fr
Il ne vous reste plus qu'à mettre "fr" en première position dans la ligne LanguagePriority (juste au-dessus), et à demander à apache de relire sa configuration :
/etc/init.d/apache2 reload
Il est également possible de s'affranchir detout encodage par défaut, de la manière suivante :
Cherchez la directive AddDefaultCharset
:
AddDefaultCharset ISO-8859-1
Remplacez l'attribut par la valeur Off
:
AddDefaultCharset Off
Là encore, on demandera à Apache de relire sa configuration :
/etc/init.d/apache2 reload
Maintenant, les en-têtes HTTP ne contiendront plus d'indication d'encodage des caractères. Attention : il faudra alors que chaque page indique l'encodage utilisé, car s'en remettre à la détection automatique par les navigateurs peut s'avérer assez aléatoire !
Le module Rewriting est très important pour le référencement Google.
Par exemple, au lieu d'avoir votre-site.com/voir_photos.php?id=1234 vous allez pouvoir formater l'URL de cette manière votre-site.com/voir_photos_superbe_motos_650_KLR,1234. Lorsqu'un internaute cliquera sur votre lien, Apache2 effectuera un remplacement, et récupèrera l'ID 1234 pour afficher correctement la page.
Par défaut, le mod_rewrite est livré avec Apache2. Il suffit juste de l'activer avec la commande :
a2enmod rewrite
Il faut maintenant éditer le fichier des VirtualHosts pour l'activer sur les sites.
nano /etc/apache2/sites-enabled/000-default
Puis ajouter la directive
AllowOverride all
Exemple :
<Directory /var/www/> # activation url rewriting AllowOverride all Options FollowSymLinks MultiViews Order allow,deny allow from all # This directive allows us to have apache2's default start page # in /apache2-default/, but still have / go to the right place RedirectMatch ^/$ /index.html </Directory>
Ainsi, dès qu'un site se situe dans le dossier ”/var/www” il sera possible de jouer avec les fichier .htaccess !
Le module SUPHP permet à Apache de se faire passer pour le propriétaire du fichier. Cela est très utile lorsque vous hébergez plusieurs sites et que chaque site appartient à un utilisateur Linux. Sans l'utilisation de ce module, il faut donner au groupe Apache les droits sur le dossier de l'utilisateur pour que la création d'un dossier avec la fonction mkdir sous PHP ne génère pas un erreur de type : permission denied !
Ainsi, votre dossier appartient à toto et lorsque toto se connecte par FTP, il transfère ses fichiers dans le dossier géré par Apache et lors des modifications telles que l'envoi d'images de vos internautes, les dossiers et fichiers seront la propriété de toto donc il n'y aura pas de soucis de permissions.
Par contre, SuPHP ne peut pas fonctionner avec le module PHP5, il faut utiliser PHP5 en CGI.
Pour l'installer tapez :
apt-get install libapache2-mod-suphp php5-cgi
Pour configurer les options de PHP, il faut modifier le fichier CGI :
nano /etc/php5/cgi/php.ini
Sous Apache2 il faut autoriser le VirtualHost du site Internet
nano /etc/apache2/sites-enabled/000-default Options ExecCGI
On vérifie la bonne description du module :
nano /etc/apache2/mods-enabled/suphp.conf
<IfModule mod_suphp.c> AddHandler x-httpd-php .php .php3 .php4 .php5 .phtml suPHP_AddHandler x-httpd-php suPHP_Engine on # # Use a specific php config file (a dir which contains a php.ini file) # suPHP_ConfigPath /etc/php4/cgi/suphp/ # # Tells mod_suphp NOT to handle requests with the type <mime-type>. # suPHP_RemoveHandler <mime-type> </IfModule>
Ensuite on configure le module avec son fichier de configuration :
nano /etc/suphp/suphp.conf [global] ;Path to logfile logfile=/var/log/suphp/suphp.log ;Loglevel loglevel=info ;User Apache is running as webserver_user=www-data ;Path all scripts have to be in ;docroot=/var/www docroot=/home/sites ;Path to chroot() to before executing script ;chroot=/mychroot ; Security options allow_file_group_writeable=false allow_file_others_writeable=false allow_directory_group_writeable=false allow_directory_others_writeable=false ;Check wheter script is within DOCUMENT_ROOT check_vhost_docroot=true ;Send minor error messages to browser errors_to_browser=false ;PATH environment variable env_path=/bin:/usr/bin ;Umask to set, specify in octal notation ;umask=0077 umask=0002 ; Minimum UID min_uid=1000 ; Minimum GID min_gid=1000 [handlers] ;Handler for php-scripts x-httpd-php=php:/usr/bin/php-cgi ;Handler for CGI-scripts x-suphp-cgi=execute:!self
On active le module SuPHP et on redémarre Apache2 :
a2enmod suphp /etc/init.d/apache2 restart
Ce module va empêcher / limiter les attaques DDOS en bloquant l'IP qui tente d'effectuer des milliers de requêtes sur le serveur pour mettre à genoux le serveur.
Le module sera téléchargé puis compilé avec “APXS2” :
cd /tmp wget http://www.zdziarski.com/projects/mod_evasive/mod_evasive_1.10.1.tar.gz tar xzf mod_evasive_1.10.1.tar.gz cd mod_evasive apt-get install apache2-prefork-dev apxs2 -i -a -c mod_evasive20.c
Nous allons maintenant créer un fichier qui contient le lien vers le module compilé pour qu'Apache2 puisse l'activer :
nano /etc/apache2/mods-available/mod_evasive.load # dans le nouveau fichier, coller cette ligne : LoadModule evasive20_module /usr/lib/apache2/modules/mod_evasive20.so
Puis nous l'activons :
a2enmod mod_evasive
Pour qu'Apache2 prenne en compte ce nouveau module, il va falloir le paramétrer :
nano /etc/apache2/apache2.conf
<IfModule mod_evasive20.c> DOSHashTableSize 3097 # Nbre d'affichage de la même page par IP : X DOSPageCount 2 # Nbre d'affichage du même site par IP : X DOSSiteCount 50 # Interval d'affichage de la même page par IP : X DOSPageInterval 1 # Interval d'affichage du même site par IP : X DOSSiteInterval 1 # Durée du blocus (exprimé en secondes) DOSBlockingPeriod 10 # Notification par adresse email pour être prévenu DOSEmailNotify adresse@email.com # nouveau dossier pour y placer le logs du module DOSLogDir "/var/log/apache2/evasive/" # Utlisation de iptables pour bannier l'IP qui tente de saturer le serveur #DOSSystemCommand "/sbin/iptables -I INPUT -s %s -j DROP" # Liste blanche permettant à une IP d'effecuer un nombre illimité de requètes #DOSWhiteLt 127.0.0.1 </IfModule>
# création du dossier pour les logs du mod Evasive mkdir /var/log/apache2/evasive # pensez à bien donner les droits au dossier sinon Apache2 nous pourra écrire dedans chown -R www-data:www-data /var/log/apache2/evasive # on relance Apache2 et aucune erreur ne doit apparaitre /etc/init.d/apache2 reload
Test du bon fonctionnement du module Evasive avec un fichier PERL : ce script va effectuer une cinquantaine de requêtes sur notre serveur Internet.
nano test_mod_evasive.pl #!/usr/bin/perl # test.pl: small script to test mod_dosevasive's effectiveness use IO::Socket; use strict; for(0..50) { my($response); my($SOCKET) = new IO::Socket::INET( Proto => "tcp", PeerAddr=> "127.0.0.1:80"); if (! defined $SOCKET) { die $!; } print $SOCKET "GET /?$_ HTTP/1.0\n\n"; $response = <$SOCKET>; print $response; close($SOCKET); }
# rendre le script exécutable chmod +x test_mod_evasive.pl # exécution du script ./test_mod_evasive.pl
Le résultat s'affichera dans la fenêtre et au bout d'une dizaine de ligne, il devrait y avoir d'écrit “HTTP/1.1 403 Forbidden” ou “HTTP/1.1 404 Not Found” preuve que le module fonctionne. Bien évidemment, sans le module activé, toutes les lignes auraient été “HTTP/1.1 200 OK” monopolisant les ressources de tout le serveur pour ce script !
Le module Cband est très pratique, surtout pour un site qui contient des vidéos ou des fichiers à télécharger : en effet, ce module va permettre de limiter la bande passante allouée par IP (donc pour chaque internaute) mais aussi par VirtualHost (donc par site Internet hébergé).
Par exemple, je peux allouer seulement 50 Mbits de bande passante pour toute ma plateforme Web, laissant ainsi de la marge pour les autres applications. Sans ce module, si une personne mal intentionnée lancent 1 ou plusieurs gros téléchargements de mes fichiers à partir d'un autre serveur dédié, il y a de fortes chances pour que ma plateforme soit saturée, or si la limite globale est de 50 MBits, cette personne plafonnera à 50 Mbits et mon serveur devrait rester en activité sans trop souffrir.
Installation du module en utilisant les paquets :
apt-get install libapache2-mod-cband
Activons le module avec
a2enmod cband
Il faut ensuite le référer dans le fichier de configuration d'Apache2 (par exemple tout en bas du fichier) :
nano /etc/apache2/apache2.conf
Il faut ajouter les 2 lignes suivantes :
CBandScoreFlushPeriod 1 CBandRandomPulse On
Puis redémarrer Apache2 :
/etc/init.d/apache2 force-reload
Nous allons éditer le fichier de configuration des VirtualHosts gérés par Apache2 :
nano /etc/apache2/sites-enabled/000-default
Voici un exemple de VirtualHost avec une limitation de la bande passante par client et globalement pour un site. Notre site est par exemple situé dans le dossier ”/var/www/lespotes”
ServerAdmin webmaster@localhost ServerName rxxxxx.ovh.net DocumentRoot /var/www/ # 90 Mbps pour Apache - 200 requetes/sec - 20 connexions simultanees CBandSpeed 90Mbps 200 20 # Par personne : 7 Mbps - 35 requetes/sec - 3 connexions simultanees CBandRemoteSpeed 7096 35 3 # affichage des stats de Cband # les stats seront visibles dans le dossier /var/www/administration/mod_cband_stats <Location /administration/mod_cband_stats> SetHandler cband-status </Location> # dossier sites <Directory /var/www/sites> # activation url rewriting AllowOverride all Options FollowSymLinks MultiViews Order allow,deny allow from all # This directive allows us to have apache2's default start page # in /apache2-default/, but still have / go to the right place RedirectMatch ^/$ /index.html </Directory>
Voici la liste des unités de mesures disponibles et comprises par le module Cband :
Vitesses de transfert:
Dans cet exemple, tous les sites Internet stockés dans le dossier ”/var/www” ne pourront pas dépasser les 90 Mbps de bande passante, les 200 requêtes par secondes et les 20 connexions simultanées. Lorsqu'un internaute ira sur votre site, il ne pourra pas télécharger à plus de 7 Mbps, 35 requêtes par secondes et les 3 connexions simultannées.
Aidez-nous à améliorer notre aide en notant cette page :