logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).


L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT → ODT PDF Export

Ceci est une ancienne révision du document !


Créer un site web avec apache2

Nota : Ce wiki est écrit par une débutante

Contributeurs, merci de compléter la partie sur la sécurité ! FIXME

Introduction

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 en vue de l'apprentissage; machine virtuelle qu'il faudra éteindre en dehors des TP, voire détruire plutôt que la laisser dans l'oubli sur un système. Dans tous les cas se documenter sur la sécurité.

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 web avant de vous lancer dans l’auto-hébergement ! 8-)

Pré-requis

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-MV-server”.

Ensuite, on configure le serveur ssh, en prenant le temps de le sécuriser en changeant le port 22, en désactivant PermitEmptyPasswords, et côté client en créant des clés assymétriques, afin de pouvoir par la suite, configurer le serveur web depuis le client ssh.

Installation d'apache

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 web page for this server.

The web server software is running but no content has been added, yet.

Comment apache est-il configuré ?

Afin de comprendre la mise en place d'un site web avec apache2, on va détailler la configuration par défaut d'apache.

  • Le répertoire /etc/apache2

L'installation d'apache a mis en place sur le système plusieurs sous-répertoires de /etc/apache2.

cd /etc/apache2/ && ls
apache2.conf  envvars  mods-available  ports.conf	sites-enabled
conf.d	      magic    mods-enabled    sites-available

Il est à noter que le fichier /etc/apache2/apache2.conf est l'équivalent du fichier httpd.conf des distributions Linux à base de RedHat.
Il inclut d'autres fichiers de configuration qu'on n'a pas besoin de modifier pour une utilisation simple et personnelle d'apache2.

Les quatre sous-répertoires à relever dans un premier temps pour comprendre le fonctionnement d'apache sont :

  1. /etc/apache2/mods-available/
  2. /etc/apache2/mods-enabled/
  3. /etc/apache2/sites-available/
  4. /etc/apache2/sites-enabled/
  • /etc/apache2/sites-available/ :

Ce répertoire contient des fichiers qui indiquent les sites hébergés par apache2.
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 qui le permet :

cd sites-available/ && less default
<VirtualHost *:80>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

On voit la ligne <Directory /var/www/>. C'est là le chemin du fichier qui contient le code html de la page d'accueil.

Vérifions cela.

cd /var/www && ls
index.html
less index.html
<html><body><h1>It works!</h1>
<p>This is the default web page for this server.</p>
<p>The web server software is running but no content has been added, yet.</p>
</body></html>

Donc le site “default” est configuré de sorte à mettre à disposition tout ce qui est dans /var/www. Mais ce n'est pas tout. Si la page d'accueil s'affiche sur le navigateur, c'est que le site de test de apache2 est activé. Cette activation dépend d'un lien symbolique entre un fichier du répertoire /etc/apache2/sites-enabled/ et un fichier du répertoire /etc/apache2/sites-available/default.

  • /etc/apache2/sites-enabled/ :

Ce répertoire contient des liens symboliques qui pointent vers des fichiers de /etc/apache2/sites-available.

cd /etc/apache2/sites-enabled/ && ls
000-default

Ce fichier est un lien symbolique : il pointe vers /etc/apache2/sites-available/default.

ls -l /etc/apache2/sites-enabled/000-default
lrwxrwxrwx 1 root root 26 sept. 19 06:06 /etc/apache2/sites-enabled/000-default -> ../sites-available/default
Pour l'instant, le serveur apache se contente d'envoyer du code HTML, CSS, javascript au navigateur, c'est-à-dire du code écrit dans un langage compris par le navigateur (côté client). Pour le PHP interprété par le serveur, il faudra mettre en place un module php. Pour mettre cela en place il faudra considérer cette fois les répertoires /etc/apache2/mods-available/ et /etc/apache2/mods-enabled/ dont il sera question plus bas.

Revenons sur la configuration par défaut d'apache2, et la mise en service de la page d'accueil.

C'est le fait de la présence de ce lien symbolique /etc/apache2/sites-enabled/000-default qui pointe vers le site déclaré, et correctement configuré, /etc/apache2/sites-available/default, qui quant à lui, attribue à apache la prise en charge du fichier de code web /var/www/index.html, qui active le site.

Pour activer un site ou le désactiver, il suffit donc de créer ou de supprimer le lien symbolique qui relie /etc/apache2/sites-enabled/000-default et /etc/apache2/sites-available/

Cela peut se faire avec les commandes ln -s et rm. Mais on utilise pour ce faire les utilitaires :

  • a2ensite : (apache2 enable site) : active un site,
  • a2dissite : (apache2 disable site) : désactive un site.

Méthode pour créer son site avec apache2

Cette configuration par défaut, indique donc comment s'y prendre pour créer un site web pris en charge par apache2.

  • D'abord, un fichier contenant le code source de la page web:

Il doit être créé dans /var/www/, mais on placera ce fichier de code, dans un dossier qu'il faudra créer dans /var/www/dossier-du-site/fichier.html.

  • Ensuite pour que apache gère ce site :

Il faudra créer un utilisateur dans la base de apache ainsi qu'un fichier correspondant à la page web de /var/www/dossier-du-site/fichier.html dans /etc/apache2/sites-available/dossier-du-site.

  • Enfin pour activer ce site :

Il faudra créer un lien symbolique dans /etc/apache2/sites-available/ pointant vers /etc/apache2/sites-available/dossier-du-site.

Puisque tout est bien clair, créons notre propre site web.

Configurations d'un site web

Création du site web dans /var/www/

  • On crée un dossier dans /var/www :

Par exemple “monsite.com” qui va pouvoir accueillir le site internet.

mkdir -p /var/www/monsite.com/public_html
  • On attribue à root les fichiers nouvellement créés :
chown -R $USER:$USER /var/www/monsite.com/public_html
  • On change les droits pour que le site puisse être lu par tous :
chmod -R 755 /var/www
  • On crée sa première page index.html
vim /var/www/monsite.com/public_html/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 !

  • On crée un VirtualHost d'apache pour ce site :
cp /etc/apache2/sites-available/default /etc/apache2/sites-available/monsite.com
vim /etc/apache2/sites-available/monsite.com

On inscrit ceci :

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName monsite.com
        ServerAlias www.monsite.com

        DocumentRoot /var/www/monsite.com/public_html
  <...>

On peut laisser le reste tel quel.

  • Activer ce site en créant un lien symbolique dans /etc/apache2/sites-enabled/
a2ensite monsite.com
  • Prendre en compte les modifications effectuées à Apache en le redémarrant :
service apache2 reload
  • Vérification :

Dans le navigateur : http://http://192.168.x.xx/monsite.com

Index of /monsite.com
[ICO]	Name	Last modified	Size	Description
[DIR]	Parent Directory	 	- 	 
[DIR]	public_html/	19-Sep-2014 16:38 	- 	 
Apache/2.2.22 (Debian) Server at 192.168.x.xx Port 80

Si on clique sur public_html/ on voit un problème d'encodage :

Bravo !

La mise en place d'un Virtualhost est réussie !

Cela va être vite corrigé !

Solutionner le 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.

  • Mais avant vérifions les locales générés sur le système.

Elles apparaissent quand on tape la commande :

grep -v "^#" /etc/locale.gen
fr_FR.UTF-8 UTF-8
  • Corriger le fichier /etc/apache2/conf.d/charset :
vim /etc/apache2/conf.d/charset

On dé-commente la ligne #AddDefaultCharset UTF-8

AddDefaultCharset UTF-8

Et on enregistre !

  • Corriger le fichier /etc/apache2/envvars :
vim /etc/apache2/envvars

Pour dé-commanter la ligne . /etc/default/locale

## Uncomment the following line to use the system default locale instead:
. /etc/default/locale
  • Faire prendre en compte les modifications à apache2 :
service apache2 reload
  • Vider le cache du navigateur :

Par exemple, avec iceweasel :
Outils → 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 !

Sécuriser son site

Ce n'est là qu'un minimum et non une sécurisation optimale. FIXME

Éditer le fichier /etc/apache2/conf.d/security

  • Il s'agit de diffuser le minimum d'information sur apache.
vim /etc/apache2/conf.d/security

Modifier ceci :

La ligne “ServerTokens OS” doit être commenté : #ServerTokens OS

Ajouter : ServerTokens Prod
Dé-commenter : ServerSignature Off

Et commenter : #ServerSignature On
Enfin vérifier que TraceEnable Off soit dé-commenté

et que #TraceEnable On soit commenté
  • On redémarre apache :
service apache2 restart

Limiter l'accès à toute l'arborescence du système Linux

  • Désactiver le site “sites-available/efault” :
a2dissite default
  • Ensuite on va modifier les directives du site “/etc/apache2/sites-available/monsite.com” :

Pour ce faire on le désactive d'abord :

a2dissite monsite.com

Et on recharge : service apache2 reload.

Puis on édite “/etc/apache2/sites-available/monsite.com”.

vim /etc/apache2/sites-available/monsite.com
<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName monsite.com
        ServerAlias www.monsite.com

        DocumentRoot /var/www/monsite.com/public_html
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/>
                Options -Indexes 
                Options -FollowSymLinks
                Options -Includes
                Options -ExecCGI
                Options MultiViews
                AllowOverride None
                Order deny,allow
                deny from all
                allow from 192.168.0.0/24
        </Directory>
Options -Indexes : Pour désactiver l'option permettant le parcours d'un répertoire
Options -FollowSymLinks : Pour désactiver l'option permettant apache de suivre des liens symboliques (qui pourrait permettre de quitter /var/www).
Options -Includes : Pour désactiver l'option permettant apache de faire des inclusions côté serveur.
Options -ExecCGI : Pour désactiver l'option permettant à apache l'utilisation de scripts CGI. La désactiver si on n'utilise pas de script CGI2).
  • On réactive le site :
a2ensite monsite.com

Et comme indiqué : service apache2 reload.

Développer son site web dans un /home/

Il n'est pas recommandé de travailler directement dans des répertoires du serveur. Un lien symbolique depuis le répertoire principal du serveur vers un répertoire du dossier personnel est mieux.

On désactive "monsite"

a2dissite monsite.com

Et on recharge : service apache2 reload.

Création d'un nouvel Virtualhost

  • Par exemple du nom de “web”
adduser --system web --ingroup www-data
  • On lui crée un mot de passe :
 passwd web
  • On crée les fichiers du site web, par exemple du nom de “pegaseous.com”:
mkdir -p pegaseous.com/public_htlm
  • On corrige l'appartenance et les droits :
chown -R root:www-data /home/web/ && chmod -R 755 /home/web/
  • On édite un index :
vim /home/web/pegaseous.com/public_htlm/index.html
  • On crée un lien symbolique vers /var/www :
ln -s /home/web/pegaseous.com/ /var/www/pegaseous.com
  • On édite un fichier /etc/apache2/sites-available/pegaseous.com :

Pour aller plus vite on peut se servir d'un fichier “sites-available” existant qu'on modifie. Par exemple celui du site “monsite.com”.

Si on a suivi le wiki du début :

cp /etc/apache2/sites-available/monsite.com /etc/apache2/sites-available/pegaseous.com

Si on a pas de fichier : vim /etc/apache2/sites-available/pegaseous.com et on y colle ce qui suit.

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName pegaseous.com
        ServerAlias www.pegaseous.com
 
        DocumentRoot /var/www/pegaseous.com
 
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/>
                Options -Indexes
                Options +FollowSymLinks
               Options -Includes
                Options -ExecCGI
                Options MultiViews
                AllowOverride None
                Order deny,allow
                deny from all
                allow from 192.168.0.0/24
        </Directory>
        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>
 
        ErrorLog ${APACHE_LOG_DIR}/error.log
 
        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
  • On active le site pegaseous.com :
a2ensite pegaseous.com

Et on recharge : service apache2 reload.

  • Enfin on teste tout ça

Au niveau du navigateur : http://ip-du-serveur/pegaseous.com

Index of /pegaseous.com
[ICO]	Name	Last modified	Size	Description
[DIR]	Parent Directory	 	- 	 
[DIR]	public_htlm/	20-Sep-2014 09:15 	- 	 

Si on clique sur : public_html

Bienvenue sur pegaseous.com

Site en cours de réalisation !
On peut réactiver “monsite” si on le souhaite.
Dans ce cas on peut accéder à “monsite” en tapant http://ip-du-serveur/monsite.com;
ou à “pegaseous.com” en tapant http://ip-du-serveur/pegaseous.com.

Il reste à ajouter un module par exemple pour le php.

Installer le module php

Installer libapache2-mod-php5

Ce paquet casse le MPM worker3) et engendre l'installation du MPM prefork4).

install libapache2-mod-php5

Une fois l'installation effectuée on peut vérifier que php5 est apparu dans /etc/apache2/mod-available.

ls -l /etc/apache2/mods-available/php5*
-rw-r--r-- 1 root root 898 août  21 10:49 /etc/apache2/mods-available/php5.conf
-rw-r--r-- 1 root root  59 août  21 10:49 /etc/apache2/mods-available/php5.load

Dans /etc/apache2/mod-enabled, se sont des liens symboliques qui activent ce module:

ls -l /etc/apache2/mods-enabled/php5*
lrwxrwxrwx 1 root root 27 sept. 20 11:40 /etc/apache2/mods-enabled/php5.conf -> ../mods-available/php5.conf
lrwxrwxrwx 1 root root 27 sept. 20 11:40 /etc/apache2/mods-enabled/php5.load -> ../mods-available/php5.load

→ Puisque les liens sont là, le module est activé.

Activer/désactiver un module

  • a2enmod : (apache2 enable module) : active un module apache2
  • a2dismod : (apache2 disable module) : désactive un module apache2

Si on active ou désactive un module ne pas oublier après l'opération de réactiver apache : service apache2 restart

Créer la page de test

mv /var/www/index.html /var/www/index.php
vim /var/www/index.php
<html>
 <body>
  <h1>It works!</h1>
  <p>This is the default web page for this server.</p>
  <?php
echo "La date du jour est " . date("d/m/Y") . "!\n";
  ?>
 </body>
</html>
  • Recharger apache :
service apache2 restart
  • Tester en tapant dans le navigateur :

http://ip-du-serveur/

It works!

This is the default web page for this server.
La date du jour est 20/09/2014! 

Puisque tout fonctionne pour utiliser php dans les autres sites, il n'y a qu'à modifier le nom de leur page d'index en index.ph et entrer du code php.

  • Par exemple pour “pegaseous” :
mv /home/web/pegaseous.com/public_htlm/index.html /home/web/pegaseous.com/public_htlm/index.php
vim /home/web/pegaseous.com/public_htlm/index.php
<html>
 <body>
 <h1>Bienvenue sur pegaseous.com</h1>
  <p>Site en cours de réalisation !</p>
<?php
echo "La date du jour est " . date("d/m/Y") . "!\n";
  ?>
 </body>
</html>
  • Recharger apache :
service apache2 reload
  • Tester en tapant dans le navigateur :

http://ip-du-serveur/pegaseous.com

et cliquer sur public_htlm/ :

Bienvenue sur pegaseous.com

Site en cours de réalisation !
La date du jour est 20/09/2014! 

Tous les outils sont en place pour apprendre les langages html et php ! 8-)

doc/reseau/apache2/tp01.1411226950.txt.gz · Dernière modification: 20/09/2014 17:29 par Hypathie

Pied de page des forums

Propulsé par FluxBB