Maintenant qu'Apache est installé et en cours d'exécution, vous pouvez le configurer pour servir plusieurs domaines en utilisant des hôtes virtuels .
Créer la mise en page
Cet exemple utilise deux domaines :domaine1.com et domaine2.com.
-
Dans votre répertoire personnel, créez un dossier public_html :
cd ~ mkdir public_html
-
Pour chaque domaine que vous souhaitez héberger, créez un dossier avec un ensemble standard de sous-dossiers. Les commandes suivantes créent les dossiers public, private, log, cgi-bin et backup pour domaine1.com et domaine2.com :
mkdir -p public_html/domain1.com/{public,private,log,cgi-bin,backup} mkdir -p public_html/domain2.com/{public,private,log,cgi-bin,backup}
Créer index.html
Le contenu du dossier public dépend de vous, mais cet exemple utilise un fichier HTML très simple afin que vous puissiez vérifier le travail de l'hôte virtuel.
-
Pour chaque domaine, créez un fichier index.html :
nano public_html/domain1.com/public/index.html
-
Ajoutez le code suivant au fichier index.html :
<html> <head> <title>domain1.com</title> </head> <body> <h1>domain1.com</h1> </body> </html>
-
Répétez le processus afin d'avoir un fichier similaire pour domaine2.com.Remplacez toutes les instances de
domain1.com
avecdomain2.com
.
Définir les hôtes virtuels
Maintenant que vous avez une structure de base pour vos deux domaines, vous pouvez définir deux hôtes virtuels.
Revoir NameVirtualHost
Avec les hôtes virtuels, le paramètre NameVirtualHost prête souvent à confusion.
Chaque interface et port sur lequel Apache est configuré pour écouter nécessite une directive NameVirtualHost. Vous ne pouvez définir la directive qu'une seule fois par port.
Dans la disposition Apache pour le système d'exploitation Ubuntu, il existe une directive NameVirtualHost par défaut dans le ports.conf
fichier.
Exécutez la commande suivante pour consulter le contenu de ports.conf
:
cat /etc/apache2/ports.conf
Vous devriez obtenir le résultat suivant (sauf si vous avez déjà modifié le fichier) :
# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default
NameVirtualHost *:80
Listen 80
<IfModule mod_ssl.c>
# SSL name based virtual hosts are not yet supported, therefore no
# NameVirtualHost statement here
Listen 443
</IfModule>
Le paramètre par défaut de NameVirtualHost satisfait les exigences actuelles - Apache appliquera une logique et des paramètres d'hôte virtuel basés sur le nom pour les requêtes HTTP effectuées sur toute interface disponible (*) sur le port 80.
Remarque :Le placement de la directive NameVirtualHost par défaut dans « ports.conf » est nouveau dans la disposition Apache du système d'exploitation Ubuntu ; les versions précédentes plaçaient un paramètre similaire dans le vhost par défaut.
Définir des hôtes virtuels personnalisés
Vous êtes maintenant prêt à ajouter vos propres hôtes virtuels afin de pouvoir commencer à servir vos domaines.
Créez le fichier vhost pour le domaine 1 :
sudo nano /etc/apache2/sites-available/domain1.com.conf
Le contenu se présente comme suit :
# Place any notes or comments you have here
# It will make any customisation easier to understand in the weeks to come
# domain: domain1.com
# public: /home/demo/public_html/domain1.com/
<VirtualHost *:80>
# Admin email, Server Name (domain name) and any aliases
ServerAdmin [email protected]
ServerName domain1.com
ServerAlias www.domain1.com
# Index file and Document Root (where the public files are located)
DirectoryIndex index.html
DocumentRoot /home/demo/public_html/domain1.com/public
# Custom log file locations
LogLevel warn
ErrorLog /var/log/apache2/error-mydomainname.com.log
CustomLog /var/log/apache2/access-mydomainname.com.log combined
</VirtualHost>
Activer le site
Activez le site comme suit :
sudo a2ensite domain1.com
Le résultat de la commande est le suivant :
Site domain1.com installed; run /etc/init.d/apache2 reload to enable.
Exécutez la commande recommandée :
sudo /etc/init.d/apache2 reload
Naviguer vers le site
Pour tester le domaine sans créer de zone DNS et d'enregistrements sur certains serveurs de noms Internet, vous pouvez modifier le fichier '/etc/hosts' sur votre ordinateur local pour inclure certaines entrées mappant 'domaine1.com','domaine2.com' et le reste à l'adresse IP publique du serveur cloud de démonstration :
127.0.0.1 localhost
...
# entries related to the demo Cloud Server
123.45.67.890 domain1.com
123.45.67.890 www.domain1.com
123.45.67.890 domain2.com
...
L'emplacement du fichier "hosts" varie en fonction du système d'exploitation chargé sur votre ordinateur local.
Remarque : les entrées du fichier "hôtes" doivent être supprimées avant de tester et d'utiliser les zones DNS actives et les enregistrements créés sur les serveurs de noms Internet. Si vous ne les supprimez pas, vous risquez de prêter à confusion et de tester de manière inexacte les enregistrements DNS publics nouveaux ou modifiés.
Avec ces modifications apportées à des fins de test, vous pouvez accéder à votre site dans un navigateur Web sur votre ordinateur local et le contenu du fichier public/index.html est affiché.
Utiliser le ServerAlias
Notez que dans le fichier vhost, vous définissez un ServerAlias. Si vous avez correctement configuré le DNS, vous pouvez également utiliser cette adresse.
Nous parlerons de forcer une adresse ou l'autre dans un article ultérieur sur les règles de réécriture.
Répéter le processus pour l'autre domaine
Pour créer et activer domain2.com, répétez le processus comme suit :
-
Créez le fichier vhost :
sudo nano /etc/apache2/sites-available/domain2.com ... # Enter the details for domain2.com as per the example shown above
-
Activez le site et redémarrez Apache :
sudo a2ensite domain2.com ... sudo /etc/init.d/apache2 reload
-
Accédez au deuxième domaine :
https://domain2.com or https://www.domain2.com
Vous devriez voir le fichier d'index "domain2.com".
Afficher les fichiers journaux
Comme défini dans le fichier vhosts, chaque domaine a ses propres fichiers journaux.
Répertoriez les journaux de vos domaines :
ls /var/log/apache2/error-mydomainname.com.log
Le résultat est exactement comme prévu :
access.log error.log
Fichier vhost par défaut
Bien que vous ayez modifié l'hôte virtuel par défaut, vous l'avez laissé en place.
Si quelqu'un entre l'adresse IP du serveur cloud, il reçoit le contenu de ce fichier vhosts par défaut (si vous n'avez pas configuré de vhost distinct pour l'adresse IP).
Pourquoi sont-ils servis à partir de ce fichier vhost ?
Apache recherche les fichiers vhost activés par ordre alphabétique et s'il n'en trouve pas pour l'adresse IP ou le nom de domaine demandé, il sert le premier (par ordre alphabétique).
Si vous aviez désactivé ou supprimé le fichier vhost par défaut, alors le contenu de domaine1.com serait affiché (avant domaine2.com par ordre alphabétique).
C'est quelque chose à considérer lors de la planification de vos sites Web. Voulez-vous que le domaine particulier soit la valeur par défaut ? Souhaitez-vous que l'adresse IP ait un contenu complètement différent ?
Définir l'adresse e-mail de l'administrateur
Définissez l'adresse e-mail de l'administrateur du serveur. Cette adresse est utilisée si vous configurez le serveur pour qu'il vous contacte lorsque des erreurs se produisent. Il est également affiché dans ServerSignature si sa valeur est définie sur Email. (Voir la section Définir les pieds de page Apache .
ServerAdmin [email protected]
Définir le nom de domaine
Définissez le nom de domaine (ServerName) pour l'hôte virtuel. Vous pouvez avoir autant d'alias (ServerAlias) que nécessaire. Par exemple, vous pouvez faire pointer domaine.com et domaine.net vers le même contenu.
ServerName domain.com
ServerAlias www.domain.com
Remarque :Il ne s'agit pas d'une règle de réécriture, mais les domaines définis ici serviront le même contenu (en supposant que vous avez configuré le DNS pour qu'il pointe vers l'adresse IP de votre serveur cloud).
Définir le fichier d'index
Définissez le fichier d'index (la page d'accueil qui s'affiche lorsque l'adresse de domaine est saisie). Ceci est utile si vous souhaitez que l'utilisateur soit redirigé vers une autre page ou vers une page d'accueil non standard.
DirectoryIndex index.html
Remarque :Ce n'est pas une bonne méthode pour rediriger les utilisateurs car ils peuvent accéder directement à une page non spécifiée, telle que domaine.com/index.php, tandis que la valeur DirectoryIndex ne fonctionne que pour ceux qui entrent dans domaine.com.
Définir le chemin des documents
Définissez l'emplacement des fichiers publics du domaine. Utilisez un chemin d'accès absolu.
DocumentRoot /home/demo/public_html/domain.com/public
Définir les fichiers journaux
Définissez les niveaux de journalisation et l'emplacement des fichiers journaux des hôtes virtuels.
LogLevel warn
ErrorLog /var/log/apache2/error-mydomainname.com.log
CustomLog /var/log/apache2/access-mydomainname.com.log combined
Définir les documents d'erreur
Définissez le ErrorDocument, qui est utilisé pour tous les messages d'erreur standard.
ErrorDocument 404 /errors/404.html
ErrorDocument 403 /errors/403.html
Dans cet exemple, il existe un dossier « errors » dans le répertoire public. Chaque document d'erreur a été créé et placé dans le dossier des erreurs. Les chemins affichés sont relatifs au dossier DocumentRoot défini précédemment.
Si les messages d'erreur ne sont pas définis, Apache génère ses propres pages d'erreur. Les pages d'erreur personnalisées sont plus conviviales et peuvent être personnalisées autant ou aussi peu que vous le souhaitez.
Définir les pieds de page Apache
Définissez ServerSignature pour spécifier si les détails du serveur sont affichés dans les pages d'erreur ou les listes d'index générées par le serveur. Les options sont Activé, Désactivé et E-mail.
ServerSignature On
Le niveau de détail de la signature est configuré via ServerTokens, qui ne peut pas être défini dans le fichier Virtual Hosts. Pour Apachelayout du système d'exploitation Ubuntu, ceci est correctement défini dans "/etc/apache2/conf.d/security". Voir l'article Apache configuration #2 NEED LINK pour plus de détails.
Si ServerSignature est défini sur Email , l'e-mail ServerAdmin s'affichera.
Activer cgi-bin
Activez l'emplacement cgi-bin tel que défini par la disposition personnalisée des hôtes virtuels. Vous pouvez laisser cgi-bin à l'emplacement DocumentRoot si vous le souhaitez.
ScriptAlias /cgi-bin/ /home/demo/public_html/domain.com/cgi-bin/
<Location /cgi-bin>
Options +ExecCGI
</Location>
Définir les options du répertoire
Définissez les options pour le répertoire spécifié. L'exemple suivant active l'option FollowSymLinks pour le répertoire public du domaine.com.
Options FollowSymLinks
Voici d'autres options que vous pouvez définir :
Option de navigation dans les répertoires
Pour désactiver la navigation dans les répertoires, utilisez -Indexes. Pour activer la navigation dans les répertoires, utilisez +Index.
Options -Indexes
Option SSI
Activez ou désactivez les inclusions côté serveur. L'exemple suivant disablesit.
Options -Includes
Option de liens symboliques
Activez ou désactivez l'option pour suivre les liens symboliques. Soyez prudent avec cette option car elle peut entraîner des risques de sécurité (liaison par inadvertance aux dossiers de configuration).
Options -FollowSymLinks
Vous pouvez envisager d'utiliser la directive SymLinksIfOwnerMatch au lieu deFollowSymLinks. La directive SymLinksIfOwnerMatch permet de suivre les liens symboliques uniquement si le propriétaire du lien est identique au propriétaire du fichier ou du répertoire cible (en termes de propriété/permissions du système de fichiers Linux). Cela évite de nombreux risques de sécurité qu'une simple directive FollowSymlinks peut créer.
option .htaccess
Définissez AllowOverride sur None pour désactiver la prise en charge de .htaccess. Définissez-le sur Tous pour autoriser l'assistance.
AllowOverride None
Vous pouvez également spécifier les fonctionnalités .htaccess à activer, telles que :
AllowOverride AuthConfig Indexes
Les documentations Apachehtaccess et AllowOverride contiennent plus d'informations sur les différentes fonctionnalités.
N'oubliez pas de protéger spécifiquement votre fichier .htaccess. Vous pouvez le faire en le renommant en quelque chose d'obscur et en refusant l'accès au fichier à partir de sources externes :
AccessFileName .myobscurefilename
<Files ~ "^\.my">
<SatisfyAll>
Require all denied
</SatisfyAll>
</Files>
Remarque :L'exemple précédent est formaté pour Apache 2.4. Si vous utilisez 2.2, remplacez **
Aucune option
Spécifiez Aucun pour désactiver toutes les options disponibles.
Options None
Hiérarchie des options
Les directives d'options peuvent être définies par répertoire, comme illustré dans l'exemple suivant :
AllowOverride None
Options None
AllowOverride All
Le premier paramètre de répertoire désactiverait toutes les options et désactiverait la prise en charge de.htaccess pour tous les répertoires.
Cependant, le deuxième paramètre de répertoire remplacerait le premier et la prise en charge de allow.htaccess pour le répertoire domain.com/public.
Résumé
Le fichier d'hôtes virtuels est un outil facile à utiliser mais très puissant. Nous vous recommandons d'entrer un paramètre, puis de le tester. Entrez ensuite le paramètre suivant et testez, et ainsi de suite.
Après vous être familiarisé avec lui, vous verrez que vous avez un contrôle précis sur tous vos dossiers et fichiers Web.