WIKI LWS - L'hébergeur Web accessible à tous WIKI LWS - L'hébergeur Web accessible à tous

Installer le serveur WEB Apache

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

Redémarrer Apache

Pour que Apache accepte les modifications dans la configuration, nous allons redémarrer le service :

/etc/init.d/apache2 force-reload

Créer son site

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/ ).

Problème d'encodage d'apache2

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

Encodage par défaut en Latin1 (ISO-8859-1)

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

Aucun encodage par défaut

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 !

Modules d'Apache

Mod Rewriting

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 !

Mod SuPHP

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 

Mod Evasive

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 !

Mod Cband

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:

  • kbps
  • Mbps
  • Gbps
  • La valeur par défaut est kbps.

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.

Articles, vidéos et guides en lien avec cette rubrique

Cette page d'aide vous a-t-elle été utile ?

Aidez-nous à améliorer notre aide en notant cette page :

 stars  21 votes (Details)
apache2_et_php_http.txt · Dernière modification: 2012/12/18 17:38 (modification externe)
 
Sauf mention contraire, le contenu de ce wiki est placé sous la licence suivante : CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki