{{tag>tutoriel}} ====== Configuration d'hôtes virtuels sur Apache avec support automatique des sous-domaines, du SSL et de l'authentification ====== Les hôtes virtuels du serveur web Apache permettent d'héberger plusieurs domaines sur la même IP. Le champ //Host:// de la requête HTTP détermine l'hôte virtuel qui devra traiter la requête. La génération automatique des domaines est utile si les sont nombreux et sensiblement les mêmes, par exemple : NameVirtualHost 111.22.33.44 ServerName www.customer-1.com DocumentRoot /www/hosts/www.customer-1.com/docs ScriptAlias /cgi-bin/ /www/hosts/www.customer-1.com/cgi-bin ServerName www.customer-2.com DocumentRoot /www/hosts/www.customer-2.com/docs ScriptAlias /cgi-bin/ /www/hosts/www.customer-2.com/cgi-bin ServerName www.customer-N.com DocumentRoot /www/hosts/www.customer-N.com/docs ScriptAlias /cgi-bin/ /www/hosts/www.customer-N.com/cgi-bin L'idée de base est de remplacer la configuration statique par un mécanisme dynamique. Ainsi, * Le fichier de configuration est plus petit * Ajouter des serveurs virtuels revient à créer les répertoires appropriés dans le système de fichiers et les entrées dans le DNS sans reconfigurer ni redémarrer Apache. Un hôte virtuel est défini par : * son adresse IP * et le contenu de l'entête Host: de la requête HTTP. Pour cela, cette information est insérée dynamiquement dans le chemin d'accès du fichier utilisé pour satisfaire la demande. ===== Pré-requis ===== Il faut activer le module mod_vhost_alias par :USER@MACHINE:~$ sudo a2enmod vhost_alias ===== Première étape ===== Pour rendre dynamique un hôte virtuel, il faut modifier : * **UseCanonicalName Off** -> le nom du serveur est fourni par l'entête Host: de la requête. Si Apache ne trouve pas nom du serveur, c'est la valeur configurée avec ServerName qui est utilisée * **DocumentRoot** ==== Hôte virtuel dynamique simple ==== - **Cet extrait met en œuvre un hôte virtuel simple, mais d'une façon générique à l'aide de mod_vhost_alias** : ... # obtenir le nom du serveur à partir de l'en-tête Host: UseCanonicalName Off # ce format de journal peut être divisé par hôte virtuel sur la base du premier champ LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon CustomLog logs/access_log vcommon # inclure le nom du serveur dans les noms de fichiers VirtualDocumentRoot /www/hosts/%0/docs VirtualScriptAlias /www/hosts/%0/cgi-bin ... Le nom du serveur qui est inséré dans le nom de fichier est déduit de l'adresse IP de l'hôte virtuel. - **Un serveur de pages d'accueil virtuel** : c'est une adaptation du système ci-dessus pour créer des pages d'accueil. Des sous-chaînes du nom du serveur sont utilisées dans le nom du fichier de sorte que, par exemple les documents pour www.user.isp.com se trouvent dans /home/user/. ... # obtenir le nom du serveur à partir de l'en-tête Host: UseCanonicalName Off # ce format de journal peut être divisé par hôte virtuel sur la base du premier champ LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon CustomLog logs/access_log vcommon # include part of the server name in the filenames VirtualDocumentRoot /www/hosts/%2/docs # single cgi-bin directory ScriptAlias /cgi-bin/ /www/std-cgi/ - **Serveur virtuel basé sur l'IP plus efficace** : Amélioration des hôtes virtuels dynamiques simples. Pour éviter la recherche DNS pour transformer un nom en une adresse IP, on peut se baser sur les adresses IP elles-mêmes plutôt que sur les noms correspondants # obtenir le nom du serveur à partir du reverse DNS de l'adresse IP UseCanonicalName DNS # inclure l'adresse IP dans les journaux afin qu'ils puissent être scindés LogFormat "%A %h %l %u %t \"%r\" %s %b" vcommon CustomLog logs/access_log vcommon # inclure l'adresse IP dans les noms de fichiers VirtualDocumentRootIP /var/www/html/hosts/%0/docs VirtualScriptAliasIP /var/www/html/hosts/%0/cgi-bin ==== Plus d'un hôte virtuel sur le même serveur ==== Par exemple, une adresse IP pour les pages d'accueil des clients les et un autre pour les commerciaux avec : UseCanonicalName Off LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon Options FollowSymLinks AllowOverride All Options FollowSymLinks AllowOverride None ServerName www.commercial.isp.com CustomLog logs/access_log.commercial vcommon VirtualDocumentRoot /var/www/html/commercial/%0/docs VirtualScriptAlias /var/www/html/commercial/%0/cgi-bin ServerName www.homepages.isp.com CustomLog logs/access_log.homepages vcommon VirtualDocumentRoot /var/www/html/homepages/%0/docs ScriptAlias /cgi-bin/ /var/www/html/std-cgi/ ---- - **Sous-domaines par nom** : pour chaque domaine, on crée un fichier /etc/apache2/sites-available/domaineX.com - **en local, sous-domaines du localhost** : Exemple : sous-domaine doc.localhost, accessible localement sur le PC lui-même (localhost) ; cela permet de tester le serveur. Pour cela, * déclarer doc.localhost dans le fichier hosts : éditez avec les droits d'administration le fichier **/etc/hosts** pour lui ajouter la ligne :127.0.0.1 doc.localhost * Créez avec les droits d'administration le fichier **/etc/apache2/sites-available/doc.localhost** : ServerAdmin administrateur@domaine.fr UseCanonicalName Off LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon CustomLog logs/access_log vcommon ServerName doc.localhost DocumentRoot /home//www/doc - **sur le web : sous-domaines d'un domaine** : pour créer doc.mondomaine.com, sous-domaine de mondomaine.com, ServerAdmin administrateur@domaine.fr UseCanonicalName Off LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon CustomLog logs/access_log vcommon ServerName doc.mondomaine.com DocumentRoot /home//www/doc ServerName localhost ServerAlias *.localhost # DocumentRoot /home/nicolas/www VirtualDocumentRoot /home/nicolas/www/%-2 # # ServerName cloud.localhost # DocumentRoot /home/nicolas/www/cloud # - **Voici un exemple d'organisation** : * **config** -> Contiendra toute la configuration "magique": * **auth** -> liens symboliques vers les sous-domaines (subdir*) nécessitant une authentification. * **ssl** -> liens symboliques vers les sous-domaines (subdir*) nécessitant un accès SSL. * **logs** -> logs d'accès et logs d'erreur pour le domaine concerné * **www** -> racine de l'arborescence web où se trouveront nos pages et scripts éventuels et les sous-domaines (subdir*). mondomaine.tld/ |-- config | |-- auth | `-- ssl |-- logs | |-- access.log | `-- error.log `-- www |-- subdir1 |-- subdir2 |-- subdir3 `-- subdir4 - **Configuration du domaine mondomaine.com** : - Pour ce domaine, nous créons les 2 configurations suivantes dans le fichier /etc/apache2/sites-available/mondomaine.com # Configuration HTTP du domaine mondomaine.com ServerName mondomaine.com ServerAlias *.mondomaine.com ServerAlias *.mondomaine.net ServerAlias *.mondomaine.fr ServerAlias *.mondomaine.eu ServerAlias *.mondomaine.info ServerAdmin webmaster@mondomaine.com DocumentRoot /var/www/mondomaine.com/www/ Options FollowSymLinks AllowOverride None Options FollowSymLinks AllowOverride none Order allow,deny allow from all ########## Log Directives ErrorLog /var/www/mondomaine.com/logs/error.log CustomLog /var/www/mondomaine.com/logs/access.log vhost_combined # Configuration HTTPS du domaine mondomaine.com ServerName mondomaine.com ServerAlias *.mondomaine.com ServerAlias *.mondomaine.net ServerAlias *.mondomaine.fr ServerAlias *.mondomaine.eu ServerAlias *.mondomaine.info ServerAdmin webmaster@mondomaine.com DocumentRoot /var/www/mondomaine.com/www/ Options FollowSymLinks AllowOverride None Options FollowSymLinks AllowOverride none Order allow,deny allow from all ########## Log Directives ErrorLog /var/www/mondomaine.com/logs/error.log CustomLog /var/www/mondomaine.com/logs/access.log vhost_combined ########## SSL Directives SSLEngine on SSLCertificateFile /var/www/mondomaine.com/config/mondomaine.com.pem SSLCertificateKeyFile /var/www/mondomaine.com/config/mondomaine.com.pem SSLCACertificateFile /var/www/mondomaine.com/config/ca.crt - Activation du domaine mondomaine.com :USER@MACHINE:~$ sudo a2ensite mondomaine.com - Redémarrage d'Apache :USER@MACHINE:~$ /etc/init.d/apache restart - **Cas du vhost par défaut** : Pour gérer le cas d'une requête à destination d'un domaine qui n'est pas hébergé, un vhost par défaut est défini. Il est défini en premier - Créer un fichier /etc/apache2/site-available/0000-default en y ajoutant la configuration suivante : NameVirtualHost *:80 NameVirtualHost *:443 RewriteEngine on RewriteRule ^/(.*) http://www.mondomaine.com/$1 [R=301,L] On redirige tout le trafic vers le "vrai" domaine. Par exemple, toute requête vers http://ip_du_serveur, traitée par ce vhost, sera visiteur redirigée vers http://www.mondomaine.com/ - On active le vhost :USER@MACHINE:~$ a2ensite 0000-default - **Règles de comportement** : Nous souhaitons héberger le domaine mondomaine.com. - Nous devons rediriger mondomaine.com vers www.mondomaine.com. - Nous voulons pouvoir obtenir, le plus simplement possible, différents sous-domaines. Par exemple : * blog.domaine.com doit être accessible en HTTP ou en SSL. L'authentification est gérée par l'application elle-même. * webmail.domaine.com doit être obligatoirement en SSL. L'authentification est gérée par l'application elle-même. * protected.domaine.com ne sera accessible qu'après authentification, mais l'accès n'est pas forcé en SSL. * maitredumonde.domaine.com ne sera accessible qu'après authentification, mais l'accès est en plus forcé en SSL. - Comme nous avons également loué le domaine mondomaine.fr, il faut que les 2 pointent sur le même espace d'hébergement. - En ce qui concerne les alias de domaines (différentes extensions tld), il est nécessaire de modifier la configuration du vhost en ajoutant les directives ServerAlias. En effet, les domaines n’apparaissant ni en ServerName, ni en ServerAlias seront traités par le vhost par défaut. - **Utilisation des virtualhosts** ===== Autres étapes ===== ===== Conclusion ===== ===== Problèmes connus ===== ===== Voir aussi ===== * **(fr)** [[http://publications.jbfavre.org/web/vhosts-automatiques-avec-SSL-et-authentification|Configuration d'hôtes virtuels sur Apache avec support automatique des sous-domaines, du SSL et de l'authentification]] * **(en)** [[http://Article|Article]] ---- //Basé sur << [[http://publications.jbfavre.org/web/vhosts-automatiques-avec-SSL-et-authentification|Configuration d'hôtes virtuels sur Apache avec support automatique des sous-domaines, du SSL et de l'authentification]] >> par jbfavre.//