Apache 2

Apache peut héberger plusieurs sites web sur le même couple IP/port, par le mécanisme des hôtes virtuels. Après avoir vu la configuration de base d’Apache, puis celle d’un hôte virtuel, nous parlerons aussi de redirections, de contrôle de bande passante, etc.

Ce tutoriel est tenu à jour régulièrement. Dernière révision : 2 janvier 2017.

Les commandes préfixées d’un # sont à lancer en root. Les commandes préfixées d’un % sont à lancer en simple utilisateur.

Configuration de base

Tout d’abord, il faut installer Apache. Si vous en avez besoin, installez également PHP.

# apt-get install apache2 apache2-mpm-prefork apache2-utils libapache2-mod-php5 php5 php5-cli php5-mysql

Pour la configuration locale, il vaut mieux créer des fichiers à part. Sinon, pendant les mises à jour, APT va bloquer car un fichier du paquet a été modifié : vous devrez merger manuellement les nouveautés et vos modifications. Je vous recommande donc de créez /etc/apache2/conf-enabled/local. Pour ma part, j’y ai mis ceci :

# Limit the number of simultaneous and persistent connections
# to avoid saturation problems (voluntaries or not)
MaxClients 150
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
# Avoid a warning message when Apache start
ServerName localhost

Voici de quel message d’avertissement je parle, sachant qu’il n’apparait pas systématiquement.

# service apache2 restart
Forcing reload of apache 2.0 web server...apache2: Could not determine the server's fully qualified domain name,
using 127.0.0.1 for ServerName
apache2: Could not determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
.

Je vous conseille de faire un tour dans /etc/apache2/conf-enabled/security.conf. Pour citer le packageur Debian : “Changing the following options will not really affect the security of the server, but might make attacks slightly more difficult in some cases.”

Voici mes paramètres :

ServerTokens Prod
ServerSignature Off
TraceEnable Off
Header set X-Content-Type-Options: "nosniff"
Header set X-Frame-Options: "sameorigin"

Note : les deux dernières lignes demandent d’activer le mode headers.

# a2enmod headers

À ce stade, on a terminé la configuration de base. Avant d’aller plus loin, testez-là avec :

service apache 2 restart

et corrigez les éventuelles erreurs.

Configuration d’un site web

Il faut ensuite créer un fichier pour votre site, dans le répertoire /etc/apache2/sites-available/. Vous pouvez copier/coller l’exemple que je donne ci-dessous, ou encore dupliquer la config par défaut :

# cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/almin.tf.conf

Le « .conf » à la fin du fichier est nécessaire. Si vous ne le mettez pas, vous aurez cette erreur en lançant a2ensite :

# a2ensite almin.tf
ERROR: Site almin.tf does not exist!

Si vous voulez qu’Apache charge tous les fichiers présents, sans exiger une extension en « .conf », il faut éditer /etc/apache2/apache2.conf et remplacer cette ligne :

IncludeOptional sites-enabled/*.conf

par :

IncludeOptional sites-enabled/*

Mais d’une part, comme indiqué plus haut, ça gênera à la prochaine mise à jour. D’autre part, a2ensite ne marchera toujours pas, vous devrez placer les fichiers directement dans /etc/apache2/sites-enabled/ (ou faire vous-même les liens entre /etc/apache2/sites-available/ et /etc/apache2/sites-enabled/).

Note : il ne faut pas d’espaces entre les < > et VirtualHost ou Directory, mais sinon ces mots entre crochets sont confondus avec des tags HTML.

< VirtualHost *:80>
    ServerName almin.tf
    ServerAdmin webmaster@almin.tf
    DocumentRoot /srv/www/almin.tf/
    < Directory /srv/www/almin.tf/>
        Require all granted
        Options -Indexes +SymLinksIfOwnerMatch +MultiViews
    < /Directory>
    LogLevel warn
    CustomLog /var/log/apache2/almin-access.log combined
    ErrorLog /var/log/apache2/almin-access.log
< /VirtualHost>

On peut activer ou désactiver une option en la faisant précéder d’un « + » ou d’un « – ». Par exemple « +Indexes » autorisera le listage des répertoires, « -Indexes » l’interdira. Auparavant, l’absence de signe valait implicitement un « + ». Désormais (depuis jessie), si vous mettez un « + » ou « – » devant une option, vous devez aussi préfixer les autres options.

Parmi les options possibles, on peut citer :

  • L’option +SymLinksIfOwnerMatch fait la même chose que +FollowSymLinks : Apache va suivre les liens symboliques. Je conseille la première option, qui contrôle en plus à qui appartient le lien et la cible.
  • L’option +MultiViews gère la négociation de contenus, par exemple en redirigant une requête pour index.html vers index.html.en ou index.html.fr selon la langue signalée par le navigateur, ou encore en se basant sur des en-têtes similaires à celles du mail.

Dans votre fichier, vous pouvez rajouter autant de sections VirtualHost que nécessaire en changeant ServerName (le nom de domaine du site) et DocumentRoot (la localisation du contenu sur le FS). Je vous recommande de faire un fichier par site différent, pour que ça soit plus clair. Ceci dit, ça peut être intéressant de regrouper dans un seul fichier plusieurs VirtualHost concernant le même site.

Une fois que vous avez terminé la configuration de votre site, on l’active :

# a2ensite almin.tf
# service apache2 reload

Configurations diverses

Voici divers moyens de personnaliser le comportement d’Apache. Après avoir terminé vos modifications, demandez à Apache de recharger sa configuration :

# service apache2 reload

Redirections

On peut rediriger le trafic d’un domaine vers un autre. Par défaut, la redirection est temporaire (code 302). Pour signaler aux moteurs de recherche et aux navigateurs que la redirection est permanente, on peut rajouter « 301 » ou « permanent ».

Cette section redirige de www.almin.tf/* vers almin.tf, en supprimant de l’URL le chemin (la partie droite) :

< VirtualHost *:80>
    ServerName www.almin.tf
    ServerAdmin webmaster@almin.tf
    RedirectMatch permanent ^.*$ http://almin.tf/
    LogLevel warn
    CustomLog /var/log/apache2/www-almin-access.log combined
    ErrorLog /var/log/apache2/www-almin-error.log
< /VirtualHost>

Rediriger seulement le trafic d’un répertoire vers un autre :

    Redirect /rep/ http://almin.tf/autre_rep/

Rediriger en changeant de site mais en conservant le chemin, c’est-à-dire renvoyer de site1.tld/chemin vers site2.tld/chemin :

    RedirectMatch ^/(.*)$ http://site2.tld/$1

Contrôle de bande passante

Il faut installer le module correspondant :

# apt-get install libapache2-mod-bw

Pour limiter la bande passante consommée par Apache à 1 Mbit/s :

    BandwidthModule On
    ForceBandWidthModule On
    BandWidth all 1048576

Protéger un répertoire par un mot de passe

Il faut utiliser htpasswd :

% htpasswd /path/to/password_file USER

Répertoires utilisateurs

Si vous souhaitez permettre aux utilisateurs de disposer d’une adresse http://site.tld/~utilisateur/ qui contiendra les fichiers qu’ils auront placés dans un répertoire ~/public_html :

# a2enmod userdir

Répertoire virtuel avec index

Pour permettre de lister le contenu d’un répertoire sans afficher son chemin complet dans l’URL (pour des raisons de sécurité, ou simplement pour le côté pratique) :

    Alias /rep_virtuel /srv/www/chemin/rep_réel
    < Directory /srv/www/chemin/rep_réel>
        Options +Indexes
    < /Directory>
, 25 septembre 2006. Catégorie: Hébergement.

À propos de l’auteur, Almic