Vous êtes sur la page 1sur 11

Serveur Web : Apache

Un serveur LAMP est un serveur Web. Historiquement, l'acronyme « LAMP » fait référence
aux quatre composantes d'un tel serveur Web :
Linux : le système d'exploitation constituant la base du système. Ici, il s'agit d'Ubuntu.
Apache : le serveur HTTP qui gère la communication avec le client.
MySQL : le système de gestion de base de données.
PHP : le langage de script utilisé pour générer les pages dynamiques. (Voir : Python, Perl)
Avant de commencer :
sudo apt-get update && sudo apt-get upgrade
Pour empêcher le serveur apache de démarrer automatiquement lors du démarrage :
sudo update-rc.d -f apache2 remove ou bien :
sudo update-rc.d -f apache2 disable
Pour restaurer le serveur apache dans la liste de démarrage :
sudo update-rc.d apache2 defaults
Installation :
sudo apt-get install apache2 php mysql-server libapache2-mod-php php-mysql
sudo apt-get update
ou bien :
sudo apt-get install apache2
sudo apache2ctl configtest
sudo gedit /etc/apach2/apache2.conf
Test :
Dans un navigateur :
http://127.0.0.1/
http://localhost

Répertoire de base :
Nom Rôle

Apache's Portable Runtime Library, bibliothèque de fonctions


libapr1
standards portables.

apache2 Ce paquet contient le serveur.

1
Nom Rôle

apache2.2- Ce paquet contient les modules standards apache2, qui incluent le


common support SSL.

apache2-utils Outils pour serveurs web.




Le MPM (Multi-Processing Module), indispensable, est le moteur du serveur, la manière dont
il intercepte les requêtes. Il en existe plusieurs à vous de choisir en fonction de vos besoins
mais le mod-php5 ne supporte que le prefork :

Nom Commentaire

apache2- Modèle traditionnel pour Apache2 version sans thread, intercepte les requêtes à la manière
mpm- Apache 1.3, utile pour éviter la mise en thread pour la compatibilité avec les bibliothèques
prefork non-thread-safe. C'est le meilleur mpm pour isoler les requêtes.

apache2- Modèle à processus haute vitesse pour Apache2 version avec thread, il est considérablement
mpm-worker plus rapide que la version traditionnelle et c'est le MPM recommandé.

apache2-
Permet d'exécuter les scripts php avec les droits d'un utilisateur donné dans un virtualhost.
mpm-itk


Configuration :

Tous les fichiers de configuration de Apache2 sont dans le dossier /etc/apache2.

• httpd.conf est le fichier utilisé par apache1, il est conservé vide dans Apache2 pour
assurer la rétrocompatibilité. Il ne nous servira pas ;
• envvars est utilisé pour définir des variables d'environnement propres à Apache ;
• ports.conf contient la directive listen qui spécifie les adresses et les ports d'écoutes ;
• apache2.conf est le fichier principal de configuration c'est à partir de lui que tous les
autres fichiers sont chargés ;
• conf.d est un répertoire qui contient plusieurs petits fichiers qui seront analysés par
apache. Le seul fichier pour le moment est charset, qui spécifie l'encodage à utiliser par
défaut ;
• mods-available contient la liste des modules d'apache installés ;
• mods-enabled celle des modules activées ;
• sites-available contient la liste des hôtes virtuels installés ;
• sites-enabled celle des hôtes virtuelles activées.

Configuration des interfaces

2
La spécification des interfaces sur lesquelles Apache2 écoutera les requêtes se fait
dans ports.conf avec la directive Listen.
Vous devez spécifier au moins le port. Apache écoutera alors sur toutes les interfaces.
Pour restreindre l'utilisation à une ou plusieurs interfaces il suffit de les spécifier, suivies du
port. Il faut une directive Listen par interface.
- Si le serveur est connecté avec une IP Internet et que l'on souhaite écouter sur cette
interface on ajoute la directive Listen IP_Internet.
- Si le serveur est connecté avec une IP locale et que l'on souhaite écouter sur cette interface
on ajoute la directive Listen IP_Locale.
- Si l'on souhaite écouter sur un certain port on rajoute :Le_Port . Il est aussi possible de ne
spécifier que le port Listen Le_Port.
Éditez le fichier /etc/apache2/ports.conf.(remplacer les X.X.X.X par l'ip de l 'interface
d'écoute )

#interface (local ou internet) connectée sur port standard


Listen X.X.X.X:80

# toutes les interfaces connectées sur port ssl


Listen 443

Fichier de configuration
Éditez le fichier /etc/apache2/apache2.conf.
Les explications des différentes lignes sont données ci-dessous :
ServerRoot "/etc/apache2" #Répertoire racine du serveur.
Timeout 300 #Délai d’attente dépassé en seconde.
KeepAlive off #Connexion persistante (plus d’une requête par connexion).
KeepAlive peut être utilisée pour empêcher tout client de consommer trop de ressources du
serveur.
MaxKeepAliveRequests 100 #Nombre maximum de demandes autorisées par
connexion persistante (0=non limité).
KeepAliveTimeout 15 #Nombre de secondes d'attente pour la prochaine requête d'un même
client sur une même connexion avant un timeout.

StartServers 5 # Nombre de processus serveurs fils à créer au démarrage.


MinSpareServers 5 # Nombre minimum de processus en attente d'intercepter des
requêtes.
MaxSpareServers 15 # Nombre maximum de processus en attente.
MaxClients 150 # Nombre maximum processus fils créés pour intercepter les requêtes
simultanément.
HostnameLookups Off # Active la résolution DNS pour les noms d'hôtes.
ErrorLog /var/log/apache2/error.log # chemin du fichier de log des erreurs du serveur.
Include /etc/apache2/ports.conf # Inclusion du fichier de configuration des adresses et
ports sur lesquels le serveur sera à l'écoute.
Include /etc/apache2/conf.d/ # Inclusion d'autres fichiers de configuration.
Include /etc/apache2/sites-enabled/ # inclusion des configurations des sites actifs.
Les directives <IfModule !nom.c> testent la présence du module afin de s'adapter aux
configurations.

3
Virtual hosts :
Éditez le fichier /etc/apache2/sites-available/default
L’hôte virtuel est compris dans un bloc <VirtualHost>, ces blocs définissent la "portée" de la
validité des directives qui y sont définies. Le * derrière VirtualHost définit ici que l’hôte
virtuel est valable pour toutes les IP sur lesquelles apache écoute.

NameVirtualHost *:80

<VirtualHost domain.info:80>
ServerName www.domain.info # ServerName définit le nom utilisé pour le vhost. Mettez
le nom de l'hôte du domaine.
ServerAlias domain.info *.domain.info # ServerAlias définit les autres sous-domaines pour
lesquels le serveur répondra.
ServerAdmin administrateur.web@domain.info #ServerAdmin vous permet de spécifier un
email à utiliser en cas de problème, sur une page d'erreur 404 par exemple.
DocumentRoot /var/www/htdocs # DocumentRoot définit le dossier racine dans lequel
seront stockés les fichiers du site.
# Directory définit les options par défaut du répertoire
<Directory /var/www/htdocs>
# FollowSymLinks permet de suivre les liens symboliques.
# Indexes autorise le listage de fichiers d'un répertoire qui ne contient pas d'index.
Options Indexes FollowSymLinks MultiViews
# AllowOverride permet de surcharger certaines options en utilisant des fichiers
.htaccess dans le répertoire du site.
AllowOverride None
# Droits par defaut
Order allow,deny
allow from all
# permet de rediriger les requêtes vers un fichier d'index précis
RedirectMatch ^/$ /index.php
</Directory>
ErrorLog /var/log/apache2/error.domain.info.log
CustomLog /var/log/apache2/access.domain.info.log combined
</VirtualHost>
Enregistrez les changements sous un autre nom (ex: nomduvhost).
Supprimer l'ancien lien symbolique de la configuration d'origine
sudo a2dissite default #Apache2 Disable Site
Il faut maintenant activer le vhost. Pour cela il faut créer un lien symbolique du fichier de
sites-available/ vers sites-enabled/.
En utilisant : sudo a2ensite nomduvhost
Cette méthode du lien symbolique permet de réaliser rapidement des changements dans la
configuration d'apache.

Éditez le fichier /etc/hosts et modifier la ligne avec nomduvhost le ServerName que vous
avez choisi :

4
127.0.0.1 localhost nomduvhost
Cela permettra à votre système de faire la correspondance entre le nom de l'hôte et votre
machine locale.

NB : Les pages à utiliser comme index sont spécifiées dans le module dir (mods-
available/dir.conf).

Exemple : Création de site virtuel :
Sous le répertoire /var/www, créer les répertoires des deux sites virtuels comme suit :
sudo mkdir -p /var/www/site1.com/public_html
sudo mkdir -p /var/www/site2.com/public_html

Attribuer les droits d’accès à un utilisateur normal :

sudo chown -R $USER:$USER /var/www/site1.com/public_html


sudo chown -R $USER:$USER /var/www/site2.com/public_html

Modifier les autorisations afin de garantir que l'accès en lecture est autorisé dans le répertoire
Web général et tous les fichiers et dossiers qu'il contient afin que les pages puissent être
diffusées correctement :
sudo chmod -R 755 /var/www

Créer un simple fichier html nommé index.html


gedit /var/www/site1.com/public_html/index.html
La même chose pour le deuxième site virtuel : site2.com.

Copier le fichier /etc/apache2/sites-available/000-default.conf sous le nom de site1.com.conf


Ouvrir le fichier avec les privilège root :
sudo gedit /etc/apache2/sites-available/site1.com.conf

/etc/apache2/sites-available/site1.com.conf
<VirtualHost *:80>
ServerAdmin webmaster@site1.com
ServerName site1.com
ServerAlias www.site1.com
DocumentRoot /var/www/site1.com/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

De même pour le site virtuel site2.com.

5
sudo cp /etc/apache2/sites-available/site1.conf /etc/apache2/sites-available/site2.com.conf

Editer le fichier site2.com.conf avec les privilège root :


/etc/apache2/sites-available/site2.com.conf
<VirtualHost *:80>
ServerAdmin webmaster@site2.com
ServerName site2.com
ServerAlias www.site2.com
DocumentRoot /var/www/site2.com/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

NB :
1. Hôtes virtuels basés sur le port : Il est possible d'utiliser des ports différents pour
chaque hôte virtuel.
<VirtualHost 192.168.1.1:80> et <VirtualHost 192.168.1.2:80> pour le deuxième site virtuel
et ajouter les deux adresses dans le fichier hosts.
2. Hôtes virtuels basés sur l’adresse IP : Dans le cadre de cette méthode, le Serveur est
soit doté de plusieurs interfaces réseau, soit de plusieurs adresses IP associées à une
seule interface réseau. Dans ce dernier cas, on parlera d'IP aliasing.
sudo ifconfig eth0 :0 192.168.1.2
<VirtualHost 192.168.1.1:80> et <VirtualHost 192.168.1.1:8080> pour le deuxième
site virtuel et ajouter Listen 8080 dans le fichier ports.conf.

Activation des sites virtuels :


sudo a2ensite site1.com.conf
sudo a2ensite site2.com.conf
Par la suite, désactiver le site virtuel par défaut : 000-default.conf
sudo a2dissite 000-default.conf

Redémarrer le serveur apache : sudo systemctl restart apache2


Ou sudo /etc/init.d/apache2 reload ou encore apache2ctl graceful

Fichier hosts :
Ajouter la résolution des noms dans le serveur DNS ou bien dans le fichier hosts :

sudo gedit /etc/hosts

6
127.0.0.1 (ou bien 192.168.1.1) site1.com
127.0.0.1 (ou bien 192.168.1.1) site2.com
Tester les deux sites virtuels :

http://site1.com
http://site2.com

Protection du répertoire : /var/www


Dans le fichier /etc/apache2/sites-available/000-default.conf
Ou, pour les versions plus anciennes : $ sudo gedit /etc/apache2/sites-available/default
Editez le fichier à la section <Directory /var/www> et changez :
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
en :
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.1 # local
Allow from 192.168.1.0/24 # reseau
</Directory>
Ainsi seule votre machine et celles du réseau 192.168.1.0 auront accès à ce répertoire.

Modifier le répertoire de travail


Créer le répertoire où nous voulons travailler. Par exemple :
$ mkdir /home/test/www
Ensuite attribuer les droits d’accès nécessaires :
sudo chown -R $USER:users /home/test/www
Ensuite on configure une redirection (un alias) pour qu’Apache puisse accéder à ce répertoire
sudo ln -s /home/test/www /var/www
Et on ajoute le code suivant à la ligne après la balise </Directory> :
## ZONE PUBLIQUE
Alias /public /home/test/www/public
<Directory /home/test/www>
Options Indexes FollowSymLinks MultiViews

7
AllowOverride All
Order allow,deny
Allow from all
</Directory>
## ZONE PRIVEE
Alias /private /home/test/www/private
<Directory /home/test/www>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order deny,allow
Deny from all
Allow from 127.0.0.1 # Local
Allow from 192.168.1.0/24 # Réseau
</Directory>
Il faut finalement ajouter un lien symbolique pour qu’Apache puisse voir ces dossiers depuis
la racine du serveur :
sudo ln -s /home/test/www/public /var/www/public
sudo ln -s /home/test/www/private /var/www/private

Modules Apache2
Les fonctionnalités étendues sont disponibles grâce aux modules qui peuvent être chargés
dans Apache2. Par défaut, un ensemble de modules de base est inclus dans le serveur au
moment de la compilation. Si le serveur est compilé pour utiliser les modules chargés
dynamiquement, alors ces derniers peuvent être compilés séparément et ajouté à tout moment
en utilisant la directive LoadModule. Sinon, Apache2 doit être recompilé pour ajouter ou
supprimer des modules.

Exemple : sudo apt install libapache2-mod-auth-mysql

Consultez le répertoire /etc/apache2/mods-available pour voir les modules supplémentaires.

L'utilitaire a2enmod permet d'activer un module : sudo a2enmod auth_mysql

sudo systemctl restart apache2.service

Sécurité d’apache :

Sécurité de base : Éditez le fichier /etc/apache2/apache2.conf

ServerSignature off
ServerTokens off

8
Éditez le fichier default
#Restreindre l'accès aux seuls fichiers du répertoire web
Options None
AllowOverride None
Options -Indexes # Empêcher le parcours d'un répertoire
Options -ExecCGI #Désactiver l'exécution de scripts CGI
Option -FollowSymLinks #Empêcher apache de suivre les liens symboliques

Sécurité des pages :


Création d’un administrateur web (webadmin) : sudo adduser webadmin
Et d’un groupe www-data : sudo addgroup www-data
Modification des propriétaires de tous les fichiers et dossiers du répertoire :
sudo chown -Rf webadmin :www-data /var/www
Répertoires lecture et exécution pour le group www-data et écriture pour le propriétaire :
sudo find /var/www -type d -exec chmod 750 {} \ ;
Fichiers lecture pour www-data et création pour le propriétaire :
sudo find /var/www -type f -exec chmod 640 {} \ ;

NB : s’il y a des messages d’erreurs éditez les fichiers :


tail –f /var/log/syslog
tail –f /var/log/apache2/access.log
tail –f /var/log/apache2/error.log

Sécuriser Apache2 avec SSL :


Activation du module SSL : sudo a2enmod ssl
Recharger la configuration d’apache : sudo service apache2 force-reload
Ou bien sudo /etc/init.d/apache2 force-reload
Installation du certificat : sudo apt-get install ssl-cert openssl
Création du certificat : sudo make-ssl-cert /usr/share/ssl-cert/ssleay.cnf
/etc/ssl/private/localhost.pem
sudo openssl req -x509 -nodes -days 365 -newkey rsa:1024 -out /etc/apache2/server.crt -
keyout /etc/apache2/server.key

Explications :

• -x509 -nodes donne le type de certificat voulu


• -days 365 indique la durée de validité (en jours) de votre certificat
• -newkey rsa:1024 demande une clé RSA de 1024 bits - d'après la doc apache, il est
déconseillé de créer une clé plus grosse pour des histoires de compatibilité

9
• -out /etc/apache2/server.crt est le chemin de votre certificat
• -keyout /etc/apache2/server.key est le chemin de la clé privée

Répondez alors aux questions posées :



Common Name (eg, YOUR name) []:
Ici, il convient de faire particulièrement attention à ce que vous allez entrer. Vous devez
indiquer le nom de domaine que vous désirez sécuriser. En ce qui nous concerne, il s'agit du
domaine : site1.com. Nous indiquons donc site1.com.

Sécuriser notre clé privée : sudo chmod o-rw /etc/apache2/server.key


Sécuriser le fichier du hôte virtuel :
Dans le fichier /etc/apache2/sites-available/site1.com.conf
<VirtualHost 192.168.1.1:80>
DocumentRoot /var/www/site1.com
ServerName site1.com
</VirtualHost>

Pour sécuriser cet Hôte Virtuel, nous allons donc devoir modifier ce fichier en y ajoutant un
hôte virtuel accessible sur le port 443, ce dernier contenant des directives particulières qui
sont les suivantes :
1. Directive SSLEngine :
Cette directive permet d'activer le moteur SSL au sein d'un hôte virtuel, Elle peut
prendre deux arguments –> on/off
2. Directive SSLCertificateFile :
Cette directive définit le certificat authentifiant le Serveur auprès des clients.
L'argument est le chemin d'accès au certificat. En ce qui nous concerne, le certificat se
trouve dans le répertoire /etc/apache2/
3. Directive SSLCertificateKeyFile :
Cette directive définit la clé privée du Serveur utilisée pour signer l'échange de clé
entre le client et le serveur. Elle prend en argument le chemin d'accès à la clé (fichier).
Dans notre cas, la clé se trouve dans le répertoire /etc/apache2/.

10
Ajouter une directive NameVirtualHost qui permettra que l'adresse nommée par le nom de
notre hôte virtuel accessible sur le port 443 soit résolue correctement. Nous rajouterons donc
cette directive (NameVirtualHost 192.168.1.1:443) au début de notre fichier de configuration.
Enfin, afin que les clients puissent continuer d'accéder au site Web en tapant une url de
type http et non https, nous allons modifier l'hôte virtuel accessible sur le port 80 en
remplaçant la directive DocumentRoot par une directive de redirection.
Voici donc le contenu de notre fichier une fois modifié :
NameVirtualHost 192.168.1.1:443
<VirtualHost 192.168.1.1:80>
ServerName site1.com/
Redirect / https://site1.com/
</VirtualHost>

<VirtualHost 192.168.1.1:443>
ServerName site1.com
DocumentRoot /var/www/site1.com
SSLEngine on
SSLCertificateFile /etc/apache2/server.crt
SSLCertificateKeyFile /etc/apache2/server.key
</VirtualHost>
Relancer le serveur : sudo /etc/init.d/apache2 reload

PhpMyAdmin : est une interface d'administration pour le SGBD MySQL. Il est écrit en
langage PHP et s'appuie sur le serveur HTTP Apache.
Il permet d'administrer les éléments suivants :

• les bases de données


• les tables et leurs champs (ajout, suppression, définition du type)
• les index, les clés primaires et étrangères
• les utilisateurs de la base et leurs permissions
• exporter les données dans divers formats (CSV, XML, PDF, OpenDocument, Word,
Excel et LaTeX)

sudo apt-get install phpmyadmin php-mbstring php-gettext


https://www.phpmyadmin.net

11