Personal tools
You are here: Home GNU / Linux Debian 4.0 Etch Installer et configurer Apache2 sur Debian
Document Actions
  • Send this page to somebody
  • Print this page
  • Add Bookmarklet

Installer et configurer Apache2 sur Debian

by Pierre-Yves Landuré last modified 2011-12-05 15:35

Apache est un serveur HTTP très répandu. Il est connu pour sa modularité et le grand nombre de ses configurations possibles. Cet article à pour but de vous présenter la mise en place d'un serveur Apache 2 à la mode Debian. Il propose aussi d'accélérer la mise en place de quelques configurations basiques. Ce n'est pas le guide ultime pour Apache, mais il peut vous venir en aide :).

Ce guide est obsolète. Utilisez la nouvelle version sur le Help Desk Biapy:

Installer et configurer Apache 2 sur Debian

Ce guide a été testé sur les distributions suivantes :

  • Debian 5.0 Lenny
  • Debian 6.0 Squeeze

Administration simplifiée

J'ai écrit un script pour simplifier l'installation et l'administration d'Apache 2. Les guides présents sur ce site l'utilisent intensivement.

Mettez en place a2tools :

command wget "http://howto.landure.fr/gnu-linux/debian-4-0-etch/installer-et-configurer-apache-2-sur-debian-4-0-etch/a2tools" \
    --output-document="/usr/bin/a2tools"
command chmod +x "/usr/bin/a2tools"

Installation de Apache 2 avec support du PHP5

Installez le serveur Apache 2 à l'aide de a2tools :

command a2tools setup-apache2-php5

Remarque : vous pouvez aussi installer Apache 2 sans support du PHP :

command a2tools setup-apache2

Sécurisation de Apache 2 grâce à fail2ban

fail2ban est un outil qui surveille vos journaux d'erreurs. Il bannit automatiquement les adresses IP à l'origine d'attaques (Déni de Service, tentative de récupération de mot de passe par force brute, etc...). Pour faire en sorte que fail2ban protège votre serveur Apache 2 , lancez :

command a2tools setup-fail2ban

Administration quotidienne

Pour mettre en place un hôte virtuel servant un dossier, utilisez cette commande (adaptez les valeurs graissées à vos besoins):

command a2tools add-virtual-host "www.mon-domaine-exemple.com" "/opt/mon-dossier"

Pour mettre en place un hôte virtuel redirigeant vers un autre site, utilisez cette commande (adaptez les valeurs graissées à vos besoins):

command a2tools add-redirect "www.mon-domaine-exemple.com" "http://www.domaine-cible.com/"

Pour mettre en place un hôte virtuel mettant à disposition un site hébergé sur un autre serveur (en reverse proxy), utilisez cette commande (adaptez les valeurs graissées à vos besoins):

command a2tools add-reverse-proxy "www.mon-domaine-exemple.com" "http://www.mon-autre-serveur.com/"

Remarque : Sur le serveur "www.mon-autre-serveur.com", un hôte virtuel "www.mon-domaine-exemple.com" doit être présent.

Les commandes ci-dessus sont aussi disponible pour des hôtes virtuels en HTTPS, la syntaxe est similaire, avec en argument supplémentaire les clefs privés et publiques du certificat SSL :

command a2tools add-ssl-virtual-host "www.mon-domaine-exemple.com" "/opt/mon-dossier" \
        "/etc/openssl/PRIVATE_KEYS/www.mon-domaine-exemple.com_key.pem" \
        "/etc/openssl/CERTIFICATES/www.mon-domaine-exemple.com_cert.pem"
command a2tools add-ssl-redirect "www.mon-domaine-exemple.com" "http://www.domaine-cible.com/" \
        "/etc/openssl/PRIVATE_KEYS/www.mon-domaine-exemple.com_key.pem" \
        "/etc/openssl/CERTIFICATES/www.mon-domaine-exemple.com_cert.pem"
command a2tools add-ssl-reverse-proxy "www.mon-domaine-exemple.com" "http://www.mon-autre-serveur.com/" \
        "/etc/openssl/PRIVATE_KEYS/www.mon-domaine-exemple.com_key.pem" \
        "/etc/openssl/CERTIFICATES/www.mon-domaine-exemple.com_cert.pem"

Installation (sans a2tools)

L'installation d'Apache 2 se fait très simplement:

command apt-get install apache2

Installation de PHP5

Si vous souhaitez héberger des sites PHP, vous devez installer le module Apache PHP5. Pour ce faire, utilisez la commande suivante:

/usr/bin/apt-get install libapache2-mod-php5

Remarque: Normallement, le module PHP5 est activé par défaut, mais vous pouvez vous en assurer avec la commande:

/usr/sbin/a2enmod php5

Résolution des problèmes

Si lors de votre installation d'Apache 2, le message suivant s'affiche :

Setting Apache2 not to start, as something else appears to be using Port 80.
To allow apache2 to start, set NO_START to 0 in /etc/default/apache2.
Apache2 has been set to listen on port 80 by default, so please edit
/etc/apache2/ports.conf as desired. Note that the Port directive no longer works.

Suivi un peu plus loin du message :

* Not starting apache2 - edit /etc/default/apache2 and change NO_START to be 0.

Ce problème est dû au fait que votre système dispose déjà d'un serveur HTTP (par exemple, Lighttpd). Si c'est le cas, deux solutions s'offrent à vous:

  • Désinstaller Apache:
    /usr/bin/apt-get remove apache2-utils apache2.2-common
  • Désinstaller le serveur HTTP déjà présent sur le système, et une fois ceci fait, activez Apache:
    /bin/sed -i -e 's/^\(NO_START=\).*/\10/g' \
             /etc/default/apache2
    /etc/init.d/apache2 start

Mise en place de la mécanique des hôtes virtuels (sans a2tools)

Ce guide utilise des hôtes virtuels ciblant un port. Il est ainsi possible de faire des hôtes virtuels différents suivant que l'on y accède en SSL ou non. Cependant, pour ce faire, il est nécessaire de modifier la configuration par défaut de Apache 2.

Remarque: Les lignes de commandes suivantes sont adaptée uniquement si votre serveur Apache 2 écoute sur le port 80. C'est généralement le cas, sauf si vous avez modifié par vous même ce comportement.

En premier lieu, nous allons ajouter à notre configuration les lignes autorisant les hôtes virtuels sur le port 80:

if [ -z "$(/bin/grep 'NameVirtualHost.*:80' /etc/apache2/ports.conf)" ]; then
  /bin/sed -i -e '/Listen[\t ]*80/i\
NameVirtualHost *:80' /etc/apache2/ports.conf
fi

Nous attachons la configuration par défaut d'Apache 2 au port 80 et nous désactivons la ligne NameVirtualHost présente ce même fichier:

if [ -z "$(/bin/grep 'VirtualHost[ \t]*\*:80' /etc/apache2/sites-available/default)" ]; then
  /bin/sed -i -e 's/\(VirtualHost[ \t]*\*\)>/\1:80>/g' \
            -e 's/^\(NameVirtualHost.*\)$/#\1/g' \
         /etc/apache2/sites-available/default
fi

Sécurisation de l'installation (sans a2tools)

Protection contre diverses attaques à l'aide de Fail2Ban

Afin de sécuriser notre serveur Apache contre les scripts kiddies, nous installons fail2ban:

/usr/bin/apt-get install fail2ban

Nous le configurons pour surveiller les logs d'Apache pour contrer les attaques en force brutes de vos dossiers protectés par des mots de passes:

/bin/sed -i -e '/\[apache\]/, /filter/ {0,/^enabled.*/ s//enabled = true/ }' /etc/fail2ban/jail.conf

Nous le configurons aussi pour bloquer les recherches de failles de sécurités connues:

/bin/sed -i -e '/\[apache-noscript\]/, /filter/ {0,/^enabled.*/ s//enabled = true/ }' /etc/fail2ban/jail.conf

Et enfin, nous bloquons les attaques par overflow :

/bin/sed -i -e '/\[apache-overflows\]/, /filter/ {0,/^enabled.*/ s//enabled = true/ }' /etc/fail2ban/jail.conf

Il vous faut maintenant redémarrer fail2ban:

/etc/init.d/fail2ban restart

Remarque: Vous trouverez plus d'informations sur la sécurisation d'Apache 2 par Fail2Ban sur la page Fail2Ban sur le wiki Guiks.

Désactivation du dossier cgi-bin

Cela peut paraître brutal, mais il peut être intéressant de désactiver le dossier cgi-bin. De nos jour, il est de moins en moins utilisé. Si vous utilisez AWStats, je vous invite à suivre mon guide  Installer et configurer AWStats sur Debian 4.0 Etch.

Une fois AWstats ne nécessitant plus l'utilisation du dossier cgi-bin, utilisez les lignes de commandes suivantes pour désactiver ce dernier :

/bin/sed -i -e 's|^.*ScriptAlias.*/cgi-bin/.*$|#\0|' \
            -e '/Directory.*cgi-bin/,/\/Directory/s/^.*/#\0/' \
         /etc/apache2/sites-available/default{,-ssl}

Et rechargez la configuration d'Apache :

/etc/init.d/apache2 force-reload

Protection contre les recherches de vulnérabilités

Si vous utilisez un outil tel que LogWatch pour surveiller les journaux de vos serveurs, vous devriez être familier de ce message : "w00tw00t.at.ISC.SANS.DFind:)". Ce message est la signature du passage d'un scanner de vulnérabilités, et plus votre site a du succès, plus ce message apparait. En recherchant une solution pour contrer ce type d'attaque, j'ai découvert un article écrit par SpamCle@ner :

Linux : utiliser iptables pour bloquer les chaines de caractères

Cet article documente la construction d'un certain nombre de règles itpables (le pare-feu de Linux) pour protéger votre serveur Apache de certains scanners de vulnérabilités.

Si vous le souhaitez, vous pouvez aussi lire Sécuriser son site web des attaques de pirates et des hackers sur le forum OVH.

Pour mettre en place ces règles, en premier lieu, nous initialisons le script de configuration d'IpTables, si besoin :

if [ ! -e /etc/network/if-up.d/iptables ]; then
  echo '#!/bin/sh
# IpTables rules.' | /usr/bin/tee /etc/network/if-up.d/iptables
fi
/bin/chmod +x /etc/network/if-up.d/iptables

Nous récupérons maintenant l'adresse IP Internet de notre serveur grâce à la commande suivante :

SERVER_IP=$(/usr/bin/wget -q http://www.monip.org/ -O- \
    | /bin/grep "IP :" | /usr/bin/cut --characters=-80 \
    | /bin/sed -e 's/^.* \(\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}\).*$/\1/')

Source : Merci au Labo Linux de Supinfo pour l'article Connaître son IP public derrière un routeur.

Vous pouvez maintenant ajouter les règles proposées par SpamCle@ner à votre configuration Iptables :

/bin/echo "
# Nettoyage pour éviter les chaines en doublon.

iptables -D w00t -m recent -p tcp --syn --dport 80 --set
iptables -D w00t -m recent -p tcp --tcp-flags PSH,SYN,ACK SYN,ACK --sport 80 --update
iptables -D w00t -m recent -p tcp --tcp-flags PSH,SYN,ACK ACK --dport 80 --update
iptables -D w00t -m recent -p tcp --tcp-flags PSH,ACK PSH,ACK --dport 80 --update \\
    -m string --to 70 --algo bm --string 'GET /w00tw00t.at.ISC.SANS.' -j DROP

# Si votre serveur dispose de plusieurs adresses IP, basez-vous sur le modèle suivant
# pour les prendre en compte.
#iptables -D w00t -m recent -p tcp --tcp-flags PSH,ACK PSH,ACK --dport 80 --update \\
#    -m string --to 700 --algo bm --string 'Host: xxx.xxx.xxx.xxx' -j DROP

iptables -D w00t -m recent -p tcp --tcp-flags PSH,ACK PSH,ACK --dport 80 --remove \\
    -m string --to 700 --algo bm --string 'Host: ${SERVER_IP}' -j DROP
iptables -D INPUT -p tcp -j w00t
iptables -X w00t

# création de notre chaîne w00t :
iptables -N w00t

# redirige les paquets TCP sur notre chaîne :
iptables -A INPUT -p tcp -j w00t

# recherche du premier SYN et création de la liste :
iptables -A w00t -m recent -p tcp --syn --dport 80 --set

# recherche du paquet SYN,ACK et mise à jour la liste :
iptables -A w00t -m recent -p tcp --tcp-flags PSH,SYN,ACK SYN,ACK --sport 80 --update

# recherche du paquet ACK et mise à jour la liste
iptables -A w00t -m recent -p tcp --tcp-flags PSH,SYN,ACK ACK --dport 80 --update

# recherche de la signature de DFind dans le prenier PSH+ACK.
# Si elle est présente, on DROP.
iptables -A w00t -m recent -p tcp --tcp-flags PSH,ACK PSH,ACK --dport 80 --update \\
    -m string --to 70 --algo bm --string 'GET /w00tw00t.at.ISC.SANS.' -j DROP

# recherche si le serveur a été accédé via son adresse IP.
# Si c'est le cas, on DROP.

# Si votre serveur dispose de plusieurs adresses IP, basez-vous sur le modèle suivant
# pour les prendre en compte.
#iptables -A w00t -m recent -p tcp --tcp-flags PSH,ACK PSH,ACK --dport 80 --update \\
#    -m string --to 700 --algo bm --string 'Host: xxx.xxx.xxx.xxx' -j DROP

# On supprime la liste pour ne pas filtrer les paquets suivants
iptables -A w00t -m recent -p tcp --tcp-flags PSH,ACK PSH,ACK --dport 80 --remove \\
    -m string --to 700 --algo bm --string 'Host: ${SERVER_IP}' -j DROP" \
    | /usr/bin/tee -a /etc/network/if-up.d/iptables

Une fois votre configuration préparée, il vous faut la mettre en place :

/etc/network/if-up.d/iptables

Ignorez les erreurs affichées par cette commande, elles sont du au code de suppression des règles existantes (qui en l'occurrence n'existent pas encore). Si vous l'exécutez une seconde fois, vous n'aurez plus de messages d'erreurs, mais ce n'est pas nécessaire. Vous pouvez vérifier que les régles ont bien été appliquées avec la commande :

iptables -L

Ces réglages seront maintenant chargés à chaque démarrage de votre système.

Par la suite,si vous souhaitez connaître le nombre d'attaques bloquées par ces règles, vous pouvez utiliser la commande suivante :

iptables -L w00t -nvx

Outils de configuration d'Apache 2 (sans a2tools)

L'installation d'Apache 2 fournie par le paquet Debian est particulièrement bien structurée. Voici une présentation succincte de l'architecture des fichiers et dossiers:

  • /etc/apache2/ports.conf : Ce fichier liste les ports sur lesquels écoute Apache 2. Par défaut, il ne s'agit que du port 80.
  • /etc/apache2/mods-available : Ce dossier contient la configuration des modules Apache 2 disponibles sur votre système.
  • /etc/apache2/mods-enable : Ce dossier contient la listes des modules Apache 2 activés sur votre système. Il s'agit en fait de liens symboliques vers le contenu du dossier mods-available.
  • /etc/apache2/sites-available : Ce dossier contient les hôtes virtuels (c.a.d. VirtualHosts) disponibles sur votre système.
  • /etc/apache2/sites-enabled : Ce dossier contient les hôtes virtuels actifs sur votre système. Il s'agit en fait de liens symboliques vers le contenu du dossier sites-available.

Il y a évidement d'autres éléments de configuration, mais les 5 ci-dessus sont ceux qui nous intéressent.

Activer et désactiver les modules d'Apache 2

Apache 2 dispose de nombreux modules. Parmi les plus connus, nous trouvons:

  • php5 : Ce module permet l'utilisation du langage de programmation PHP.
  • rewrite : Ce module permet la réécriture d'URL, c'est à dire qu'il autorise la mise en place d'URL élégantes pour votre blog :).
  • proxy : Ce module est à la fois une source de failles de sécurité et un outil très pratique pour utiliser Apache 2 en devanture de plusieurs serveurs Web / machines.

Debian fournit 2 commandes simples d'emploi pour gérer les modules activés sur votre système:

  • La commande a2enmod permet d'activer un module. Par exemple, pour activer le module rewrite, utilisez:
    a2enmod rewrite
  • La commande a2dismod permet, elle, de désactiver un module précédement activé. Par exemple, pour désactiver le module rewrite, utilisez:
    a2dismod rewrite

Après avoir utilisé l'une ou l'autre de ces deux commandes, il vous faut penser à recharger la configuration d'Apache 2:

/etc/init.d/apache2 force-reload

Remarque: Vous pouvez obtenir la liste des modules disponibles sur votre système à l'aide le la commande:

find /etc/apache2/mods-available/ -name "*.load" \
    | cut --delimiter=/ --field=5 \
    | cut --delimiter=. --field=1 | more

De même, pour obtenir la liste des modules actifs sur votre système:

find /etc/apache2/mods-enabled/ -name "*.load" \
    | cut --delimiter=/ --field=5 \
    | cut --delimiter=. --field=1 | more

Activer et désactiver des sites Apache 2

Cette section ne vous sert pour l'instant à rien, mais vous servira dès que vous commencerez à créer des hôtes virtuels sur votre serveur Apache.

Remarque: Les commandes ci-dessous supposent que la configuration de l'hôte virtuel www.domain.com est stockée dans le fichier /etc/apache2/sites-available/www.domain.com

Debian fournit 2 commandes simples d'emploi pour gérer les sites (hôtes virtuels) activés sur votre système:

  • La commande a2ensite permet d'activer un site. Par exemple, pour activer le site www.domain.com, utilisez:
    a2ensite www.domain.com
  • La commande a2dissite permet, elle, de désactiver un site précédement activé. Par exemple, pour désactiver le site www.domain.com, utilisez:
    a2dissite www.domain.com

Après avoir utilisé l'une ou l'autre de ces deux commandes, il vous faut penser à recharger la configuration d'Apache 2:

/etc/init.d/apache2 reload

Mise en place du protocole HTTPS (sans a2tools)

Contrairement au protocole HTTP qui utilise le port 80 et transmet les données en clair sur le réseau, le protocole HTTPS utilise le port 443 et transmet les données aux travers d'une connexion sécurisée. HTTPS veut dire HTTP sur SSL. Le SSL ou Secure Socket Layer est un outil de cryptage des connexions. Le navigateur va d'abord ouvrir une connexion sécurisée à l'aide de SSL vers le serveur, puis y faire passer la requête HTTP. Cette dernière n'est donc pas lisible simplement par un tiers. C'est important pour éviter de vous faire voller vos informations personnelles (identifiants, comptes banquaires, numéro de carte de crédits, etc...).

Le SSL fonctionne sur un principe de clef publique / clef privée. Ce qui est chiffré à l'aide de la clef publique ne peut être lu qu'après déchiffrage par la clef privée, et inversement. Ainsi, seul le serveur HTTPS peut lire les données que vous protégez à l'aide de sa clef publique (c'est un peu plus complexe que cela, mais cette simplification vous donne une idée du principe).

Le couple clef publique / clef privée est appellé certificat SSL.

Tiers de confiance

Afin d'éviter que n'importe qui puisse créer un certificat SSL pour votre nom de domaine et par des moyens détourner rediriger le traffic de votre site Internet vers un site tiers dans un but de voler les informations de connexions de vos utilisateurs, la notions de tiers de confiance a été mise en place. Le tiers de confiance est là pour certifier que le certificat SSL présenté par un serveur HTTPS est valide et a été vérifié.

Pour ce faire, le tiers de confiance va "signer" votre certificat SSL à l'aide de sa clef privée. La signature consite à fournir une somme de contrôle vérifiable simplement à l'aide de la clef publique du tiers de confiance.

Les navigateurs Internet possèdent une liste de clefs publiques de tiers de confiances.

Il peuvent ainsi vérifier simplement la validité d'un certificat SSL, et décider des mesures à prendre si l'internaute visite un site dont le certificat n'est pas valide. Par exemple, Mozilla Firefox 3 va afficher à l'internaute une page d'avertissement lui demandant d'accepter explicitement le certificat SSL, avant d'accépter d'afficher le site web visité.

La plupart des tiers de confiances, que l'on apelle le plus souvent des autorités de certification sont des sociétés commerciales. Parmis elles, on peut citer:

La signature d'une autorité de certification est payante.

Cependant, si vos moyens sont limités, deux choix s'offrent à vous:

  • Utiliser l'autorité de certification gratuite CaCert : C'est ce que je recommande, bien que cette autorité ne soit pas reconnue nativement par les navigateurs.
  • Devenir votre propre autorité de certification.

Limitation

Les clefs SSL sont liées à un nom de domaine. La connexion SSL est établie AVANT que le nom de domaine utilisé pour obtenir l'adresse IP du serveur soit donné à Apache 2 par la requête HTTP qui circule sur cette connexion. Ceci a pour conséquence qu'il est impossible à Apache 2 d'utiliser plusieurs certificats SSL sur une seule et même adresse IP et port.

Si votre serveur ne possède qu'une seule adresse IP, vous devez créer un certificat SSL multi-domaine.

Dans le cas ou votre serveur possède plusieurs adresses IP Internet, vous pouvez associer un certificat à chaque IP. C'est bien évidement la solution à préférer. On parle alors de domaine virtuel basé sur l'IP. Pour les utiliser c'est très simple, il suffit d'utiliser une adresse IP à la place de l'étoile dans la balise <VirtualHost> :

<VirtualHost une.adresse.ip.quelconque:443>

Remarque: Dans le futur, cette limitation va disparaître avec la disparition de versions anciennes de Safari et d'Internet Explorer. Les nouvelles fonctionnalités prévues pour le SSL permettrons en effet d'avoir plusieurs certificats SSL sur une seule et même IP.

Mise en place de la mécanique HTTPS

En premier lieu, nous faisons en sorte qu'Apache 2 écoute sur le port 443:

if [ -z "$(/bin/grep 'Listen.*443' /etc/apache2/ports.conf)" ]; then
/bin/echo "# Listen on the HTTPS port if the needed module is available.
<IfModule mod_ssl.c>
  Listen 443
</IfModule>" | /usr/bin/tee -a /etc/apache2/ports.conf
fi

Et nous mettons en place la configuration nécessaire à l'utilisation d'hôte virtuels sur le port 443 (ce qui pour bien faire nécessite un certificat Wildcard, dont nous parlerons plus tard).

if [ -z "$(/bin/grep 'NameVirtualHost.*:443' /etc/apache2/ports.conf)" ]; then
  /bin/sed -i -e '/Listen[\t ]*443/i\
NameVirtualHost *:443' /etc/apache2/ports.conf
fi

Nous activons le mod_ssl si ce n'est déjà fait:

/usr/sbin/a2enmod ssl

Nous rechargeons la configuration d 'Apache 2 pour prendre en compte ces modifications:

/etc/init.d/apache2 force-reload

Source: Merci à Dr4gOoN (webmestre du site Mangakyou) sur irc.freenode.net#debian-facile pour m'avoir indiqué la possibilité de tester la présence du mod_ssl dans ports.conf.

Création du certificat SSL

Pour créer votre (ou vos) certificats SSL, je vous conseille de suivre mon guide:

Créer un certificat SSL multi-domaines

Remarque: Afin de ne pas avoir à recréer un certificat SSL à chaque fois que vous ajoutez un sous-domaine, je vous conseille de créer votre certificat SSL avec un Joker. Par exemple, j'ai moi-même créé mon certificat SSL pour être valide pour les domaines suivants:

  • landure.fr
  • *.landure.fr
  • landure.com
  • *.landure.com
  • etc...

Une fois le certificat SSL créé, nous le plaçons dans le dossier de la configuration Apache, afin de le retrouver simplement:

/bin/mkdir --parent /etc/apache2/ssl
/bin/cp /etc/openssl/PRIVATE_KEYS/https_key.pem /etc/apache2/ssl
/bin/cp /etc/openssl/CERTIFICATES/https_cert.cert /etc/apache2/ssl

Une fois ceci fait, nous plaçons des droits adéquoits sur les fichiers:

/bin/chown root:root /etc/apache2/ssl/https_key.pem
/bin/chown root:root /etc/apache2/ssl/https_cert.cert
/bin/chmod go-rw /etc/apache2/ssl/https_key.pem

Création d'hôtes virtuels (c.a.d. de sites) (sans a2tools)

Les plus novices d'entre vous ne le savent peut être pas, mais un même serveur Web (c'est à dire Apache, par exemple) peut héberger plusieurs sites Internet avec des domaines différents. Ainsi, configuré correctement, une installation Apache 2 peut héberger des sites sur plusieurs domaines (par exemple, www.les-chats-sont-des-branleurs.fr, www.chatons-mignons.com et howto.landure.fr :D).

L'hébergement de plusieurs sites / nom de domaines sur un seul serveur, et donc une seule adresse IP est rendue possible par la technique dite des "hôtes virtuels" (aussi connu sous le nom de Virtual Hosting). C'ête technique est utilisable à partir du moment ou vous possédez un nom de domaine et des sous-domaines.

Personellement, j'aime multiplier les sous-domaines car cela raccourcis les URL, et vous permet d'avoir des points d'accès sympatiques. Vous pouvez par exemple configurer votre serveur Apache pour héberger les sites suivants:

  • www.mon-domaine.fr : Votre site internet.
  • blog.mon-domaine.fr : Votre blog.
  • stats.mon-domaine.fr : Vos statistiques.
  • pma.mon-domaine.fr : Votre installation de PHPMyAdmin.
  • etc.mon-domaine.fr : etc...

C'est ce type de configuration que je vais présenter dans cette section :). Je n'aborderais pas dans cette sections les paramètres applicables aux "sous-dossiers" des domaines (par exemple: http://www.mon-domaine.fr/stats/, http://www.mon-domaine.fr/phpmyadmin/, etc...).

Hôte virtuel proposant un dossier

C'est la configuration que la plupart d'entre vous utiliseront. Il s'agit d'assigner un domaine particulier à un dossier de votre système de fichier. Je ne vais pas entrer dans les détails, je vais simplement faire en sorte que vous ayez rapidement une configuration fonctionnelle, même si basique.

En premier lieu, renseignez le nom de domaine de votre hôte virtuel (remplacez la valeur en gras):

SITE_HOSTNAME=www.mon-domaine.fr

Maintenant, renseignez le dossier que vous souhaitez voir assigné à ce domaine (remplacez la valeur en gras):

SITE_PATH=/var/www/www.mon-domaine.fr/

Une fois ceci-fait, téléchargez le modèle de configuration de votre hôte virtuel:

  • Pour HTTP:
    /usr/bin/wget http://howto.landure.fr/gnu-linux/debian-4-0-etch/installer-et-configurer-apache-2-sur-debian-4-0-etch/path-virtual-host-template \
        --output-document=/etc/apache2/sites-available/${SITE_HOSTNAME}
  • Pour HTTPS:
    /usr/bin/wget http://howto.landure.fr/gnu-linux/debian-4-0-etch/installer-et-configurer-apache-2-sur-debian-4-0-etch/ssl-path-virtual-host-template \
        --output-document=/etc/apache2/sites-available/${SITE_HOSTNAME}

Et appliquez vos paramètres à ce modèle:

/bin/sed -i -e "s/SITE_HOSTNAME/${SITE_HOSTNAME}/g" \
            -e "s|SITE_PATH|${SITE_PATH}|g" \
         /etc/apache2/sites-available/${SITE_HOSTNAME}

Une fois ceci fait, vous trouverez le fichier correspondant à votre hôte virutel dans le dossier /etc/apache2/sites-available:

ls /etc/apache2/sites-available

Remarque: vous pouvez souhaitez modifier la configuration par défaut que je propose en éditant le fichier décrivant votre hôte virtuel:

vim /etc/apache2/sites-available/${SITE_HOSTNAME}

Pour activer votre nouvel hôte virtuel, utilisez la commande d'activation d'un site:

a2ensite ${SITE_HOSTNAME}

Une fois ceci fait, TESTEZ que votre configuration Apache 2 est correcte:

apache2ctl -t

Si cette commande ne vous signale pas d'erreur fatale (vous pouvez ignorer les avertissement), vous pouvez recharger la configuration de votre serveur Apache 2:

/etc/init.d/apache2 reload

Hôte virtuel en façade d'un autre serveur (c.a.d. utiliser Apache comme reverse proxy)

Cette configuration est particulièrement adaptée si vous disposez de plusieurs serveur Web sur votre réseau local, et que vous ne disposez que d'une seule adresse IP accessible depuis Internet. Le principe est d'utiliser Apache comme serveur mandataire préconfigurer pour accéder aux serveurs Web du réseau local. Ainsi, vous accédez à tous vos serveurs Web via le port 80, et cela à pour avantage de centraliser la gestion des statistiques sur une seule et même machine.

L'inconvénient de cette configuration est que si le serveur gérant les hôtes virtuels en façade tombe, tous les serveurs qui sont "derrière" lui ne sont plus accessible. Personnellement, je trouve que les avantages surpassent largement les inconvénients.

Pour utiliser ce type de configuration, vous devez en premier lieu activer les modules proxy_http et rewrite d'Apache 2:

a2enmod proxy_http
a2enmod rewrite

Une fois ceci fait, renseignez le nom de domaine de votre hôte virtuel (remplacez la valeur en gras):

SITE_HOSTNAME=www.mon-domaine.fr

Maintenant, renseignez l'URL de l'application Web présente sur votre réseau local que vous souhaitez voir disponible depuis votre serveur Apache 2 (remplacez la valeur en gras):

SITE_BEHIND=http://my.local-server.lan/some-webapp/

Une fois ceci-fait, téléchargez le modèle de configuration de votre hôte virtuel:

  • Pour HTTP:
    /usr/bin/wget http://howto.landure.fr/gnu-linux/debian-4-0-etch/installer-et-configurer-apache-2-sur-debian-4-0-etch/proxy-virtual-host-template \
        --output-document=/etc/apache2/sites-available/${SITE_HOSTNAME}
  • Pour HTTPS:
    /usr/bin/wget http://howto.landure.fr/gnu-linux/debian-4-0-etch/installer-et-configurer-apache-2-sur-debian-4-0-etch/ssl-proxy-virtual-host-template \
        --output-document=/etc/apache2/sites-available/${SITE_HOSTNAME}

Nettoyez un peu vos paramètres de façons à maximiser vos chances que ca marche du premier coup. Pour ce faire, exécutez ces lignes de commande:

SITE_BEHIND=$(/bin/echo "${SITE_BEHIND}/" \
             | /bin/sed -e 's|//$|/|')
SITE_BEHIND_URI=$(/bin/echo "${SITE_BEHIND}" \
             | /bin/sed -e 's|[^:]*://[^/]*\(/.*\)/$|\1|')

Et appliquez vos paramètres à ce modèle:

/bin/sed -i -e "s/SITE_HOSTNAME/${SITE_HOSTNAME}/g" \
            -e "s|SITE_BEHIND_URI|${SITE_BEHIND_URI}|g" \
            -e "s|SITE_BEHIND|${SITE_BEHIND}|g" \
         /etc/apache2/sites-available/${SITE_HOSTNAME}

Une fois ceci fait, vous trouverez le fichier correspondant à votre hôte virutel dans le dossier /etc/apache2/sites-available:

ls /etc/apache2/sites-available

Remarque: vous pouvez souhaitez modifier la configuration par défaut que je propose en éditant le fichier décrivant votre hôte virtuel:

vim /etc/apache2/sites-available/${SITE_HOSTNAME}

Pour activer votre nouvel hôte virtuel, utilisez la commande d'activation d'un site:

a2ensite ${SITE_HOSTNAME}

Une fois ceci fait, TESTEZ que votre configuration Apache 2 est correcte:

apache2ctl -t

Si cette commande ne vous signale pas d'erreur fatale (vous pouvez ignorer les avertissement), vous pouvez recharger la configuration de votre serveur Apache 2:

/etc/init.d/apache2 reload

Remarque: La configuration ainsi obtenu correspond à environ 50% des cas: ceux ou ça marche bien tout seul. Dans les autres cas, le fichier décrivant l'hôte virtuel contient 2 solutions alternatives qui peuvent faire l'affaire. Vous devez l'éditer pour choisir celle qui convient le mieux à votre besoin:

vim /etc/apache2/sites-available/${SITE_HOSTNAME}

Résolution des problèmes

Corriger l'alerte de sécurité d'Internet Explorer 6

Dans certains cas (sites Dupral, Symfony et Rails derrière un Reverse Proxy HTTPS), l'erreur suivante peut apparaître dans Internet Explorer 6 :

Alerte de sécurité : Vous allez être redirigé vers une connexion non sécurisée. Les informations que vous allez envoyer peuvent être redirigées vers un site non sécurisé. Voulez-vous continuer ?

Cette alerte de sécurité est due a une redirection de HTTPS vers HTTP. Elle apparaît lorsque vous utilisez un ReverseProxy HTTPS devant un site HTTP. Pour palier à ce problème, beaucoup de sites reconnaissent l'entête HTTP X_FORWARDED_PROTO. Pour la mettre en place, commencez par activer le module "headers" d'apache :

/usr/sbin/a2enmod headers

Et ajoutez les lignes suivantes à votre ReverseProxy Apache 2 :

     # Fix for https redirection problem.
      RequestHeader set X_FORWARDED_PROTO 'https'

Une fois ceci fait, rechargez la configuration de votre serveur Apache 2 :

/etc/init.d/apache2 force-reload

Source : Merci à Slaptijack pour son article Apache, SSL, Rails and a broken redirect.

Pour aller plus loin

Mise en place de statistiques de fréquentation

Actuellement, j'utilise 2 outils pour obtenir des statistiques de fréquentation.

Héberger un serveur Subversion derrière un reverse proxy

Pour réaliser cela, je vous conseille (pour le moment) de lire l'article de Silmor : Subversion behind an Apache Reverse Proxy.

Rendre son site accessible depuis plusieurs noms de domaines

Il est important qu'un site Internet soit facile d'accès pour les internautes. Je vais prendre pour exemple mon site. Il est accessible, entre autre, avec les URL suivantes:

Et pourtant, le site qui s'affiche est toujours: http://howto.landure.fr/.

Cette multitude d'URL permet un accès rapide au site, il suffit de taper landure.fr dans la barre d'adresse du navigateur pour arriver directement sur la page d'accueil. Pour obtenir ce type de résultats, deux solutions s'offrent à vous.

ATTENTION: Les solutions décrites ici supposent que vous avez configuré vos noms de domaines correctement, de manière à ce qu'ils pointent tous vers votre serveur Apache 2. Si vous ne savez pas de quoi je parle, et bien, commencez par apprendre ce qu'est un nom de domaine avant d'utiliser les configurations ci-dessous.

Solution simple : le site est affiché sur plusieurs noms de domaines

Si vous ne souhaitez pas disposer d'une URL unifiée pour votre site, il vous suffit d'utiliser la directive Apache ServerAlias en plus de la directive ServerName. Pour ce faire vous devez modifier le fichier de votre hôte virtuel présent dans le dossier /etc/apache2/sites-available.

Par exemple, pour mon site cela pourrait donner:

ServerName howto.landure.fr
ServerAlias landure.fr www.landure.fr docs.landure.fr
ServerAlias landure.com www.landure.com docs.landure.com howto.landure.com
ServerAlias landure.org www.landure.org docs.landure.org howto.landure.org

Cependant, si vous avez beaucoup de noms de domaines possibles, je vous encourage à utiliser le caractère * comme "Joker". Cela simplifie beaucoup l'affaire:

ServerName howto.landure.fr
ServerAlias landure.* *.landure.*

Solution un peu moins simple : Créer un hôte virtuel secondaire redirigant vers l'hôte virtuel principal

Cette solution vous permet d'obtenir une URL unifiée pour votre site. C'est la solution que je préfère personnelement. Elle utilise un hôte virtuel très simple, la solution de ServerAlias décrite ci-avant, et une directive Redirect avec l'option permanent (pour signaler à Google que la redirection n'est pas temporaire, mais bien la pour durer, c'est mieux pour le référencement).

Pour l'utiliser, il vous suffit d'ajouter le VirtualHost suivant à la fin de du fichier de configuration de l'hôte virtual principal (que vous trouverez dans le dossier /etc/apache2/sites-available). N'oubliez pas de remplacer les valeurs en gras qui correspondent à mon site par celle correspondant au votre :

<VirtualHost *:80>
  # Note that the server name IS NOT the redirect target one.
  ServerName landure.fr

  # The ServerAlias line that catch every thing.
  ServerAlias landure.* *.landure.*

  # Theses lines only apply of the rewrite module is enabled.
  # This is a security enhancement recommanded by the nessus tool.
  <IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{REQUEST_METHOD} ^{TRACE|TRACK}
    RewriteRule .* - [F]
  </IfModule>

  # Redirect every body to the right site.
  # Note the "permanent" : It is good for search engine optimization :D.
  Redirect permanent / http://howto.landure.fr/

</VirtualHost>

Article en cours de rédaction

Au fur et à mesure de mes besoins, je compte bien ajouter les problèmatiques de limitation d'accès aux contenus fournis par Apache, ainsi que l'utilisation du protocole HTTPS. Cependant, j'ai d'abord écrit ce guide pour servir de base à mon guide d'installation d'un serveur Subversion qui est en cours de rédaction. Veuillez donc en excuser les manques. Et revenez surveiller l'évolution de cet article :D.

Références

Remerciements

Attachments

Remerciements

Posted by Jérôme at 2009-07-28 12:46
Merci pour tous ces tutos
Heureuse découverte pour se créer un serveur et un FTP sécurisé pour y tester torrentflux
J'en profite pour vous poser une question :
Connaissez-vous par hasard un ou des fournisseurs low cost (ex: kimsufi) à l'étranger ;-) ?
Ca pourrait même être une rubrique sur votre pour ceux voulant louer un serveur low cost pour s'amuser à découvrir Debian (ou autre distrib)
C'est juste une suggestion :-)
Merci encore pour votre superbe site :-)


un petit tuto contre le DDOS ?

Posted by Gonzague at 2009-09-09 23:37
Hey

Je me disais que ça servirait sûrement un tuto contre les DDOS. Notamment les denis de service sur Apache quand un petit malin lance un AB contre ta machine :P

merci !

superbe article

Posted by Sacha at 2009-10-19 16:31
génial super cette article, tu mérite d'être dans mes favoris toi ;)

HTTP vers HTTPS automatiquement

Posted by Max at 2012-01-30 17:10
Tout d'abord merci pour le tuto

et ensuite je me demandais comment peut-on faire pour que apache passe automatiquement en https ?

Merci d'avance

https automatique

Posted by Lone Wolf at 2012-01-30 18:15
Bonjour,

personnellement, je met en place une redirection http vers https :

a2tools add-redirect www.monsite.com https://www.monsite.com/

Bonne continuation.

https automatique

Posted by Max at 2012-02-03 10:26
Merci pour ta réponse

et merci pour les tutos qui m'ont déjà aidé pas mal

Bonne continuation également

Toujours d'actualité ?

Posted by memento at 2013-03-04 02:46
Bonjour,
Tout d'abord pour ce superbe site.
Par contre j'ai vu ton édito au début de la page, par rapport à l'obsolescence du tuto.

Pourrais-tu me dire à quel point le tutoriel est obsolète ?
Par exemple, tes scripts portant sur la sécurité, les routines du genre bail2ban : puis-je toujours les utiliser ?

Merci d'avance !
Et bonne soirée.

Memento

correction

Posted by memento at 2013-03-04 02:47
je voulais dire merci* pour ce superbe site ! ;)

obsolescence

Posted by Lone Wolf at 2013-03-04 07:57
bonjour,

merci à toi :D.

pour ce qui est de obsolescence de ce site, elle est assez importante. La plupart des informations récentes et de nombreuses corrections de bugs et améliorations sont disponibles sur http://howto.biapy.com/ . Notamment une version très largement améliorée du script a2tools.

Sincèrement,
Pierre-Yves Landuré

BlogBang
Navigation
 

Powered by Plone CMS, the Open Source Content Management System

This site conforms to the following standards:

Wikio