Apache2 – hôtes virtuels

1 février 2022

Mise en contexte

Imaginez un seul serveur Web (apache2) qui loge (host) une multitude de sites web avec des noms de domaine différents.

Par exemple, le même serveur publiant les sites abc.def, def.org, 420-3c3.info et tropcool.infini.

Ces sites répondants à la même adresse IP.

Nous parlons ici d’hôtes Web virtuels.

Apache2 propose des fichiers de configuration pour implémenter ce type de scénario.

Ces fichiers sont situés dans le dossier ‘/etc/apache2/sites-available/‘.

Voici la marche à suivre…


Action 1.0 – Créer un répertoire pour les documents du nouveau site Web virtuel:

sudo mkdir -p /var/www/site1.abc/public_html

Action 1.1 – Créer une page d’accueil pour le nouveau site:

sudo nano /var/www/site1.abc/public_html/index.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Bienvenue à site1.abc</title>
  </head>
  <body>
    <h1><center>Bienvenue sur le site 'site1.abc'</center></h1>
  </body>
</html>

Action 1.2 – Changer le propriétaire du dossier et de son contenu pour l’utilisateur d’apache2:

sudo chown -R www-data: /var/www/site1.abc

NOTE: L’utilisateur et le groupe associés à l’application apache2 est défini dans le fichier /etc/apache2/envvars

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

Action 1.3 – Créer le fichier suivant:

sudo nano /etc/apache2/sites-available/site1.abc.conf

# Listen 80
# Listen 8080
# <VirtualHost *>

<VirtualHost *:80>
    ServerName site1.abc
    ServerAlias www.site1.abc
    ServerAdmin webmaster@site1.abc
    DocumentRoot /var/www/site1.abc/public_html

    <Directory /var/www/site1.abc/public_html>
        Options -Indexes +FollowSymLinks
        AllowOverride All
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/site1.abc-error.log
    CustomLog ${APACHE_LOG_DIR}/site1.abc-access.log combined
</VirtualHost>

NOTE: Les fichiers du dossier /etc/apache2/sites-available/ renseignent sur les sites disponibles sur le serveur apache local. Par contre, il faudra les activer grâce à des liens dans le dossier /etc/apache2/sites-enabled/.

1.3.b – Explication des directives du fichier précédent:

VirtualHost *:80Le service https accepte toutes les requêtes, sur le port 80, de toutes adresses IP de son serveur hôte .

Exemple pour un serveur avec deux adresses IP:

Listen 80
<VirtualHost 192.168.0.2>
DocumentRoot « /www/exemple1 »
ServerName www.exemple.com
</VirtualHost>

<VirtualHost 192.168.0.3>
DocumentRoot « /www/exemple2 »
ServerName www.exemple.org
</VirtualHost>
ServerNameRenseigne le nom de domaine (DNS) à utiliser pour afficher le site web.

Note: Pour un test local, renseigner le fichier ‘hosts’
ServerAliasRenseigne les sous domaines de ServerName.

Par exemple, www.mondomaine.com
DocumentRootRenseigne le dossier racine du site Web.
<Directory>…</Directory>Permet de renseigner des règles locales d’accès aux ressources du site web.

Exemple:

<Directory /var/www/site1.abc/public_html>
Options -Indexes +FollowSymLinks
AllowOverride All
</Directory>
Options
(-+)IndexesPrévient ou permet l’affichage des fichiers du dossier.
(-+)FollowsSymLinksPrévient ou permet de suivre les liens symboliques.
AllowOverridePermet la modification de la configuration globale d’Apache2 via le fichier .htaccess
RequirePrécise l’accès aux ressources.

Exemples:

Require all granted
Require not ip 10.252.46.165
Require not host gov

<If « %{HTTP_USER_AGENT} == ‘BadBot' »>    …..Require all denied
</If>
ErrorLog
CustomLog

Renseigne le chemin d’accès des fichiers ‘log’

Exemple:

ErrorLog ${APACHE_LOG_DIR}/site1.abc-error.log

Note: La variable d’environnement APACHE_LOG_DIR
est définie dans le fichier /etc/apache2/envvars

Référence: Apache2


Action 1.4 – Créer un lien symbolique pour activer le site:

sudo a2ensite site1.abc
# Ou bien, manuellement avec:
sudo ln -s /etc/apache2/sites-available/site1.abc.conf /etc/apache2/sites-enabled/

NOTE: La commande a2ensite permet de créer le lien symbolique dans le répertoire /etc/apache2/sites-enabled/ directement à partir du nom de domaine du site.

Action 1.5 – Vérifier la syntaxe des fichiers de configuration d’apache2

sudo apachectl configtest

Action 1.6 – Redémarrer le service pour activer les modifications:

sudo systemctl restart apache2

Action 1.7 – Il ne reste plus qu’à tester le nouveau site virtuel:

NOTE: Vous devez avoir renseigner un nom de domaine dans votre fichier ‘hosts’ local pour pouvoir utiliser ‘site1.abc’ dans l’adresse du fureteur.


1.8 – Laboratoire

Créer un site web de type ‘hôte virtuel

  1. qui répond au nom de domaine ‘siteweb.maison‘,
  2. est accessible via les ports 88 et 8080,
  3. dont l’adresse IP du serveur Linux est renseignée dans la directive <VirtualHost>,
  4. dont le site Web n’est pas être accessible à partir de l’adresse IP de votre voisin de gauche,
  5. dont le contenu du site est localisé dans le dossier /var/www/siteweb.maison/html/,
  6. dont la liste des noms des fichiers du dossier
    /var/www/siteweb.maison/html/telechargement soit affichée dans le fureteur.
    • Note: À vous de créer ce dossier et d’y ajouter les fichiers lisezmoi.txt et apropos.html.

Voici une capture d’écran du résultat obtenu à partir de l’URL: http://siteweb.maison:88/

Note: l’URL de l’image est : http://ve2cuy.com/420-4d4b/wp-content/uploads/2021/02/tube-chat-png.png

Voici une capture d’écran du résultat obtenu à partir de l’URL: http://siteweb.maison:88/telechargement/


Étape 1.9 – Dossier du site Web à l’extérieur de ‘/var/www

Il est possible de localiser le dossier d’un site web de type ‘hôte virtuel’ à l’extérieur de la structure par défaut du service Apache2.

Par contre, il sera nécessaire de renseigner les paramètres d’accès de ce site web dans le fichier de configuration générale d’Apache2, soit le fichier /etc/apache2/apache2.conf.

Par exemple,

# Sets the default security model of the Apache2 HTTPD server. It does
# not allow access to the root filesystem outside of /usr/share and /var/www.
# The former is used by web applications packaged in Debian,
# the latter may be used for local directories served by the web server. If
# your system is serving content from a sub-directory in /srv you must allow
# access here, or in any related virtual host.
<Directory />
        Options FollowSymLinks
        AllowOverride None
        Require all denied
</Directory>

<Directory /usr/share>
        AllowOverride None
        Require all granted
</Directory>

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

# Exemple d'un dossier web à l'extérieur de la structure par défaut d'Apache2
<Directory /siteweb/>
        Options -Indexes FollowSymLinks
        AllowOverride all
        Require all granted
</Directory>

Note: Le bloc précédent est un extrait du fichier de configuration du service Apache2, situé dans le dossier /etc/apache2.


2 – Laboratoire

Il faut proposer le site web de la cie-abc.tropcool sous wordpress version 5 latest via l’URL:

http://cie-abc.tropcool


Document rédigé par Alain Boudreault – aka ve2cuy – version 2021.09.21.01