Les modules indispensables pour Apache 1/2

Posté par seiyar81 le 27 novembre 2009 | Laisser un commentaire (0)
apache

EDIT : Un bug d’affichage (dû à une balise mal fermée :s) cachait une bonne partie de l’article.

Apache est aujourd’hui et depuis longtemps le serveur HTTP le plus utilisé dans le monde ! Loin devant IIS le serveur de Microsoft, et ses autres concurrents.

D’après Netcraft en Novembre 2009 parmi le million de sites le plus visités :
Apache 67.00%
Microsoft 17.75%
nginx 3.87%
Google 1.98%

Gratuit et open-source son succès tient sûrement à sa stabilité, au fait qu’il soit disponible pour plusieurs OS, et surtout à sa grande modularité !
En effet de très nombreux modules sont disponibles afin de lui rajouter des fonctions, d’améliorer sa sécurité, de l’optimiser etc…
Je vais donc vous présenter les modules qui, selon-moi, sont quasi-indispensables de nos jours pour un serveur Apache.

Je prend ici l’exemple d’un serveur Apache version 2.2.9 tournant sous Debian.

En premier lieu s’il n’est pas déjà installé : le module php5_module si votre serveur est destiné à héberger des pages php pour Apache.

sudo apt-get install php5
// Vous pouvez également rajouter ceci
// php5-dev php5-gd php5-mysql php5-pear 

a2enmod php5
// a2dismod pour décharger un module

/etc/init.d/apache2 restart

Ensuite on peut activer le module deflate_module qui va nous permettre de compresser sans perte soit les pages ou bien les fichiers css et javascript. Un gain de 20 à 40% est alors enregistré, toutefois au dépend des ressources système.
Le module deflate dépend du module headers.

// On active les deux modules
a2enmod headers
a2enmod deflate

Vous pouvez ensuite placer cette configuration dans vos Virtual Host ou vos Directory.

   SetOutputFilter DEFLATE

   # example of how to compress ONLY html, plain text and xml
   # AddOutputFilterByType DEFLATE text/plain text/html text/xml

   # Don't compress binaries
   SetEnvIfNoCase Request_URI \.(?:exe|t?gz|zip|iso|tar|bz2|sit|rar)$ no-gzip dont-vary

   # Don't compress images
   SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|jpg|ico|png)$  no-gzip dont-vary

   # Don't compress PDFs
   SetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary

   # Don't compress flash files (only relevant if you host your own videos)
   SetEnvIfNoCase Request_URI \.flv$ no-gzip dont-vary

   # Netscape 4.X has some problems
   BrowserMatch ^Mozilla/4 gzip-only-text/html

   # Netscape 4.06-4.08 have some more problems
   BrowserMatch ^Mozilla/4\.0[678] no-gzip

   # MSIE masquerades as Netscape, but it is fine
   BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

   # Make sure proxies don't deliver the wrong content
   Header append Vary User-Agent env=!dont-vary

   # Setup custom deflate log
   DeflateFilterNote Input instr
   DeflateFilterNote Output outstr
   DeflateFilterNote Ratio ratio
   LogFormat '"%r" %{outstr}n/%{instr}n %{ratio}n%%' DEFLATE
   CustomLog /var/log/apache2/deflate_log DEFLATE

   # Add file types
   AddOutputFilterByType DEFLATE text/php text/HTML text/txt text/css text/javascript

Affichez quelques pages via votre navigateur et vous verrez que les types de fichiers concernés sont bien compressés.

Un autre module qui va nous permettre de réduire la bande passante utilisée par le serveur : expires_module. Ce module permet de contrôler l’en-tête HTTP Expires. Ainsi lorsqu’une ressource est demandée au serveur et qu’elle est disponible dans le cache du client il ne la demandera pas au serveur à moins que la date ai expirée.

Une configuration classique :

  
       ExpiresActive on 
       ExpiresByType image/jpg "access 1 month"
       ExpiresByType image/gif "access 1 month"
       ExpiresByType image/png "access 1 month"
       ExpiresByType application/x-shockwave-flash "access 1 month"
       ExpiresByType text/html "access 1 day"
       ExpiresDefault "access 2 days" 
  

Les images de types jpg, gif et png ont une date d’expiration d’un mois, les pages html d’un jour et tous les autres types de ressources 2 jours.
Les types MIME sont listés dans le fichier /etc/mime.types.

Maintenant un module qui va contrôler les requêtes effectuées et bannir les IP qui abusent : mod_evasive.

L’installation :

// Choississez le dossier d'installation
cd dossier_installation
wget http://www.zdziarski.com/projects/mod_evasive/mod_evasive_1.10.1.tar.gz
tar-zxvf mod_evasive_1.10.1.tar.gz 
cd mod_evasive
// Compilation du module
apxs2 -cia mod_evasive20.c

// Activation, change selon l'emplacement et l'organisation de vos fichiers de configuration
cd /usr/local/conf/
vim httpd.conf
// Ajoutez ceci
LoadModule evasive20_module   modules/mod_evasive20.so

Un exemple de configuration :


        DOSHashTableSize 3097

        # Nbre d'affichage de la même page par IP
        DOSPageCount 10

        # Nbre d'affichage du même site par IP
        DOSSiteCount 50

        # Interval d'affichage de la même page par IP
        DOSPageInterval 1

        # Interval d'affichage du même site par IP
        DOSSiteInterval 1

        # Durée du blocus (exprimé en secondes)
        DOSBlockingPeriod 5

        # Notification par adresse email pour être prévenu
        DOSEmailNotify mail@domain.com

        # Nouveau dossier pour y placer le logs du module
        DOSLogDir "/var/log/apache2/evasive/"

        # Utlisation d'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
        DOSWhiteList 127.0.0.1

Et un petit /etc/init.d/apache2 restart pour redémarrer le serveur.

Dans la prochaine partie j’ajouterai d’autres modules et complèterai peut-être la configuration des modules de cet article.

Bonne configuration.

Catégorie: Apache, Internet, Linux | Laisser un commentaire (0)


Laissez un commentaire