Aller au contenu
Vie du geek le forum entre geek
Phobos

Installer le serveur WEB Apache

Messages recommandés

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.pemchmod 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.0nn";

$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.

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

×