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.
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.
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 :
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
Voici divers moyens de personnaliser le comportement d’Apache. Après avoir terminé vos modifications, demandez à Apache de recharger sa configuration :
# service apache2 reload
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
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
Il faut utiliser htpasswd :
% htpasswd /path/to/password_file USER
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
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>