Ce tuto est une maj de celui d'hypathie (https://debian-facile.org/doc:reseau:apache2:tp01),merci a elle , pour Apache 2.4
Ce qui est mis en œuvre ici concerne une utilisation d'un serveur apache sur un réseau local qui ne pointe pas un nom de domaine acquis mais fictif.
Avant tout, il faut savoir que monter un serveur web pour de l'auto-hébergement présente des risques. Vous courrez par exemple le risque de donner un accès à tout votre réseau local à un pirate qui chercherait à prendre la main sur votre identité pour commettre des attaques illégales en votre nom.
Ce wiki a pour objet de proposer une initiation à apache2, et déploie son installation sur une machine virtuelle. Si vous choisissez de déployer ce qui suit sur une machine réelle faisant office de serveur personnel en vue d'auto-hébergement, l'auteur et debian-facile décline toute responsabilité sur les conséquences fâcheuses qui pourraient en découler.
Prenez le temps d'apprendre à sécuriser un serveur avant de vous lancer dans l’auto-hébergement !
Créons une machine virtuelle pour s'exercer à mettre en place un serveur web.
Cette machine virtuelle doit être configurée côté réseau avec un accès par pont.
Pour faire tout comme en “vrai”, lors de son installation on a dé-sélectionné le choix de l'installation d'un “environnement de bureau”, on n'a pas sélectionné “serveur web”. On a simplement choisi les “outils debian”, et “serveur ssh”.
Après l'installation du système, la première chose à faire est de fixer l'IP de ce système virtuel. Par exemple, 192.168.x.xx.
Puis de relever son hostname, par exemple “debian-VM-server”.
Ensuite, on configure le serveur ssh, afin de pouvoir par la suite, configurer le serveur web depuis le client ssh.
apt-get update && apt-get install apache2
Après l'installation le serveur est fonctionnel. Si tout s'est bien passé, en tapant dans son navigateur http://192.168.x.xx/
, il doit s'afficher ceci:
It works! This is the default welcome page used to...
Afin de comprendre la mise en place d'un site web avec apache2, on va détailler la configuration par défaut d'apache.
L'installation d'apache a mis en place sur le système plusieurs sous-répertoires de /etc/apache2.
ls /etc/apache2/
apache2.conf ports.conf envvars magic conf-available conf-enabled mods-available mods-enabled sites-available sites-enabled
4 Fichiers:
apache2.conf: configuration générale du serveur (droits par défaut, emplacement et format des logs,PID, etc…) ainsi que des liens (commande “Include”) vers d'autres fichiers (configuration spécifique, sites et modules)
ports.conf: ports sur lesquels le serveur écoute
envvars: variables d'environnement par defaut
magic: sert au module mime_magic
6 Répertoires:
Les 3 répertoires “*.available” qui contiennent les éléments disponibles (respectivement, la configuration, les sites et les modules) et les 3 répertoires “*.enabled” qui contiennent les éléments activés sur le serveur.
Ce répertoire contient les fichiers (un par site) définissant (chemin des fichiers, droits, etc…) les différents sites disponibles.
Puisque après l'installation, il a été possible d'afficher une page web d'accueil, c'est que ce répertoire contient un fichier vhost décrivant le site par défaut:
ls /etc/apache2/sites-available/
000-default.conf default-ssl.conf
vu que l'on a affiché la page http://192.168.x.x/
et pas https://192.168.x.x
(version SSL du site), c'est donc le vhost 000-default.conf (version classique du site par défaut) qui a été utilisé par apache pour afficher la page.
regardons son contenu:
vi /etc/apache2/sites-available/000-default.conf
<VirtualHost *:80> # The ServerName directive sets the request scheme, hostname and port that # the server uses to identify itself. This is used when creating # redirection URLs. In the context of virtual hosts, the ServerName # specifies what hostname must appear in the request's Host: header to # match this virtual host. For the default virtual host (this file) this # value is not decisive as it is used as a last resort host regardless. # However, you must set it for any further virtual host explicitly. #ServerName www.example.com ServerAdmin webmaster@localhost DocumentRoot /var/www/html # Available loglevels: trace8, ..., trace1, debug, info, notice, warn, # error, crit, alert, emerg. # It is also possible to configure the loglevel for particular # modules, e.g. #LogLevel info ssl:warn ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined # For most configuration files from conf-available/, which are # enabled or disabled at a global level, it is possible to # include a line for only one particular virtual host. For example the # following line enables the CGI configuration for this host only # after it has been globally disabled with "a2disconf". #Include conf-available/serve-cgi-bin.conf </VirtualHost> # vim: syntax=apache ts=4 sw=4 sts=4 sr noet
On voit la ligne <DocumentRoot /var/www/html>
. C'est donc là que le serveur apache va aller chercher les fichiers du site par défaut (fichier index.html, index.php, etc…) et afficher ce qu'il trouve.
Vérifions cela.
ls /var/www/html/
index.html
Si vous regardez le contenu du fichier index.html (je ne met pas le contenu de ce fichier ici, il est trop grand) vous verrez une longue page html, avec le code correspondant a ce que vous affiche apache quand vous visitez la page http://192.168.x.x/
.
Donc le vhost “000-default.conf” défini le site par défaut qu'apache affiche quand vous essayez d’accéder au serveur.
Mais ce n'est pas tout!
Si la page d'accueil s'affiche sur le navigateur, c'est que le site par défaut d'apache2 est activé.
En effet, si vous regardez cette fois dans le répertoire “sites-enabled”, vous y trouverez un fichier “000-default.conf”.
Ce répertoire contient des liens symboliques qui pointent vers des fichiers de /etc/apache2/sites-available.
ls /etc/apache2/sites-enabled/
000-default.conf
Ce fichier est un lien symbolique : il pointe vers “/etc/apache2/sites-available/00-default.conf”
ls -l /etc/apache2/sites-enabled/
total 0 lrwxrwxrwx 1 root root 35 oct. 17 13:44 000-default.conf -> ../sites-available/000-default.conf
Pour activer/désactiver un site, il suffit donc de créer/supprimer le lien symbolique qui relie “/etc/apache2/sites-enabled/xxx.conf” avec “/etc/apache2/sites-available/xxx.conf”
Cela se fait avec les utilitaires fournis par apache:
a2ensite xxx.conf
: (apache2 enable site) : crée le lien symbolique /etc/apache2/sites-enabled/xxx.conf et donc active le site xxx.conf,a2dissite xxx.conf
: (apache2 disable site) : supprime le lien symbolique, et donc désactive le site xxx.conf.Il faut ensuite recharger (reload) apache pour qu'il prenne en compte la modification.
les utilitaires a utiliser sont a2enconf
, a2disconf
, a2enmod
et a2dismod
a2*
, apache vous dit “To activate the new configuration, you need to run: service apache2 reload
”
Vu que nous somme sous Debian JESSIE, et donc sous systemd, mieux vaut prendre l'habitude d'utiliser systemctl reload apache2.service
plutôt.
Voila un petit résumé de la façon (en gros) donc apache vous sert un site, mettons le site www.debian.com:
1) vous tapez dans votre navigateur l'adresse http://www.debian.com
2) votre navigateur demande au DNS l’adresse IP du domaine debian.com, puis envoi une requête HTTP a l'adresse IP correspondante.
3) apache reçoit la requête, vérifie si le site demandé existe (lien vers le vhost dans /etc/apache2/sites-enable/),si oui il passe au traitement du fichier correspondant,sinon il vous affiche le site par défaut (ou une erreur 404 si pas de site par défaut).
4) apache traite le fichier /etc/apache2/sites-availables/debian.com.conf, vérifie les droits, l’existence des fichiers/dossiers indiqués:
si quelque chose bloque, vous aurez une erreur. (4xx si le pb vient de vous, 5xx si c'est le serveur qui plante)
5) enfin si tout est ok, apache vous affiche le site demandé.
Puisque tout est bien clair, créons notre propre site web.
192.168.x.x www.monsite.com
Avec bien entendu le vhost qui va bien
en cas de problèmes d’accès, voir la section “Précisions sur le fonctionnement des virtualhosts” plus bas
Donc pour commencer, allez donc ajouter dans votre fichier hosts (/etc/hosts sous debian, C:\Windows\System32\drivers\etc\hosts sous windows 7) la ligne qui va bien.
Ce qui a pour conséquence qu'en activant le vhost, votre site est bien accessible par http://192.168.x.x/monsite.com, ce qui semble indiquer que tout fonctionne, or c'est faux!
en effet, désactivez le vhost, et vous verrez que votre site http://192.168.x.x/monsite.com est toujours fonctionnel.
car en fait, avoir mis le site sous /var/www/html/ fait qu'il est servi par le vhost par defaut (000-default.conf) et pas par le vhost monsite.com.conf.
Du coup toutes les éventuelles directives de sécurité que vous auriez mis dans le vhost monsite.com.conf ne sont pas prise en compte, puisque le vhost lui-même n'est pas utilisé.
Alias /monsite.com /var/www/monsite.com
–> dit a apache que pour un accès à http://192.168.x.x/monsite.com c'est le repertoire /var/www/monsite.com qui doit étre servi, et pas le repertoire /var/www/html/monsite.com.
cela permet, en définissant une section <Directory> dans le vhost 000-default.conf, de donner a son site d'autres directives de sécurité que celle définies pour le site par défaut.
mais c'est pas franchement propre comme façon de faire .
Par exemple “monsite.com” qui va pouvoir accueillir le site internet.
mkdir /var/www/monsite.com/
vi /var/www/monsite.com/index.html
Contenant par exemple le code suivant:
<html> <body> <h1>Bravo !</h1> <p>La mise en place d'un Virtualhost est réussie !</p> </body> </html>
On enregistre !
vi /etc/apache2/sites-available/monsite.com.conf
Contenant:
<VirtualHost *:80> ServerAdmin webmaster@localhost ServerName monsite.com ServerAlias www.monsite.com DocumentRoot /var/www/monsite.com </VirtualHost>
http://monsite.com
ou http://www.monsite.com
a2ensite monsite.com
systemctl reload apache2.service
Dans le navigateur : http://www.monsite.com
Bravo ! La mise en place d'un Virtualhost est réussie !
Ça ne fonctionne pas? vérifiez votre fichier hosts !
Bon, il y a encore un petit problème d'encodage
On va forcer l'encodage au niveau du serveur apache. Il suffit que tous les fichiers utilisent le même encodage utf8.
Elles apparaissent quand on tape la commande :
grep -v "^#" /etc/locale.gen
fr_FR.UTF-8 UTF-8
vi /etc/apache2/conf-available/charset.conf
On dé-commente la ligne #AddDefaultCharset UTF-8
AddDefaultCharset UTF-8
Et on enregistre !
vi /etc/apache2/envvars
On dé-commente la ligne . /etc/default/locale
## Uncomment the following line to use the system default locale instead: . /etc/default/locale
Et on enregistre !
systemctl reload apache2.service
Par exemple, avec iceweasel :
Historique → Supprimer l'historique récent
Et quand on recharge la page le problème est réglé :
Bravo ! La mise en place d'un Virtualhost est réussie !
Nous allons modifier la page de notre site monsite.com, en y ajoutant du code php.
Premièrement, il faut modifier l'extension du fichier index.html pour indiquer a apache qu'il contient du php:
mv /var/www/monsite.com/index.html /var/www/monsite.com/index.php
Ensuite, ajoutons le code php:
vi /var/www/monsite.com/index.php
<html> <body> <h1>Bravo !</h1> <p>La mise en place d'un Virtualhost est réussie !</p> <?php echo "La date du jour est " . date("d/m/Y") . "!\n"; ?> </body> </html>
Et enfin recharger apache :
systemctl reload apache2.service
Bravo ! La mise en place d'un Virtualhost est réussie !
Ben??? Rien n'a changé? En plus le problème d'encodage est revenu?
Bravo, finement observé, ça prouve que vous suivez bien!
En fait, dans une installation basique d'apache, le module php n'est pas activé, en fait il n'est même pas disponible (vous pouvez vérifier en listant le contenu du répertoire “mods-available”, pas de php )
Donc apache ignore le code php dans notre fichier (et se plante a nouveau sur l'encodage, me demandez pas pourquoi, aucune idée )
On va donc installer php
Ce paquet casse le MPM worker1) et engendre l'installation du MPM prefork2).
(c'est hypathie qui le dit,moi pas savoir, moi bêtement recopier )
apt-get install libapache2-mod-php5
Une fois l'installation effectuée on peut vérifier que php5 est apparu dans /etc/apache2/mod-available.
ls /etc/apache2/mods-available/php5*
/etc/apache2/mods-available/php5.conf /etc/apache2/mods-available/php5.load
Normalement l'activation du module php s'est faite automatiquement, pour le vérifier il suffit de regarder dans le répertoire “mods-enabled”
ls /etc/apache2/mods-enabled/php*
/etc/apache2/mods-enabled/php5.conf /etc/apache2/mods-enabled/php5.load
Ca roule!
s'il fallait l'activer manuellement:
a2enmod php5
Si on active ou désactive un module manuellement ne pas oublier après l'opération de réactiver apache : systemctl reload apache2.service
Donc on relance apache
systemctl reload apache2.service
Plus qu'a vider a nouveau le cache du navigateur, recharger la page, et là :
Bravo ! La mise en place d'un Virtualhost est réussie ! La date du jour est 18/10/2016!
Youpie, ca fonctionne!
merveilleux, on vient de passer 10 mn pour apprendre comment insérer une date dans un site web
Voila, tout le bordel nécessaire pour faire un zoli site sur des chatons en html et php est installé, amusez-vous!
Quelques explications sur les virtualhosts. Ça peut vous éviter de vous arracher les cheveux comme moi avant d'arriver a comprendre pourquoi apache vous sert le site par défaut sur certaines adresses, et votre beau site tout neuf sur d'autres .
Généralités:
Les virtualhosts apache, c'est une méthode pour héberger plusieurs sites web sur la même machine physique. Je ne traiterais que des virtualhosts par nom, les virtualhosts par IP faisant intervenir des notions de réseau plus poussées.
En gros, quand vous tentez de vous connecter a un site web (par exemple www.debian.com), le client (vous) utilise le DNS (ou le fichier hosts en cas de test sur une machine virtuelle) pour obtenir l'IP correspondant au domaine debian.com , puis il envoi une requête HTTP sur le port 80 de l'IP correspondante.
Cette requête contient (entre autre) un champ “Host” (dans l’en-tête de la requête) correspondant au nom du serveur demandé.
ce champ est rempli a partir de l'URL que vous avez tapé, par exemple:
URL http://www.debian.com --> champ host rempli avec www.debian.com
URL http://192.168.x.x --> champ host rempli avec 192.168.x.x
https://fr.wikipedia.org/wiki/Hypertext_Transfer_Protocol#/media/File:Requ%C3%AAte_HTTP.png
https://openclassrooms.com/courses/les-requetes-http
c'est la valeur de ce champ qu'apache va utiliser pour savoir quel site servir. Apache va parcourir ses différents fichiers vhost pour rechercher les directives “ServerName” et “ServerAlias” et servir le répertoire correspondant (défini par “DocumentRoot” dans le vhost).
Du coup, si vous avez besoin d’héberger plusieurs sites, c'est simple:
dans votre DNS, faite pointer chaque site sur l'IP de votre serveur.
puis au niveau apache, un fichier vhost par site pour indiquer a apache quel dossier servir pour chaque site.
Voila, vous avez les bases pour utiliser apache en mode “test” sur une VM.
Si vous voulez passer votre site en prod, il y a beaucoup plus de choses a régler.
renseignez-vous sur le SSL, la configuration d'un firewall, et la sécurisation d'un serveur apache.
Bon courage!