Aller au contenu

Création d'un virtualhost Apache2

Bannière CUB


Informations

  • Auteur : Louis MEDO
  • Date : 16/10/2026
  • Domaine : Exploitation service

1. Sommaire

2. Contexte

Un VirtualHost permet d'héberger plusieurs sites web sur une seule IP. Le serveur web aiguille la requête via l'en-tête ServerName. Sous Debian 13, les configurations sont dans /etc/apache2/sites-available/. Cette procédure intègre PHP-FPM, la redirection HTTPS automatique avec certificats TLS, et la sécurisation par VirtualHost. Les directives (comme AllowOverride pour le .htaccess) et les fichiers sensibles (comme les mots de passe) sont strictement isolés dans des dossiers dédiés à chaque site pour éviter une application globale ou une compromission croisée.

3. Prérequis

3.1. Activation des modules requis. Modules pour le proxy FPM, l'authentification, le contrôle d'accès et le TLS.

sudo a2enmod proxy_fcgi setenvif auth_basic authn_file authz_host ssl rewrite
sudo systemctl restart apache2
  • proxy_fcgi : Transfère les requêtes à PHP-FPM.
  • auth_basic / authn_file / authz_host : Gèrent l'authentification HTTP et le filtrage IP.
  • ssl : Active la prise en charge du protocole HTTPS (TLS).
  • rewrite : Permet la manipulation des URL (indispensable pour les redirections et les permaliens WordPress).

4. Modèles de configuration

4.1. Configuration WordPress avec Redirection HTTPS et TLS. Ce modèle redirige le trafic non sécurisé vers HTTPS et configure l'exécution FPM.

Isolation du .htaccess

On applique la directive AllowOverride All uniquement au <Directory /var/www/<fqdn>> spécifique de ce VirtualHost. Cela garantit que l'interprétation des .htaccess est strictement limitée au dossier du site et n'est pas activée de façon globale sur le serveur.

Créer le fichier de configuration :

sudoedit /etc/apache2/sites-available/<fqdn>.conf

Exemple de configuration :

<VirtualHost *:80>
    ServerName <sous-domaine>.dortmund.cub.sioplc.fr
    # Redirection permanente de tout le trafic HTTP vers HTTPS
    Redirect permanent / https://<sous-domaine>.dortmund.cub.sioplc.fr/
</VirtualHost>

<VirtualHost *:443>
    ServerName <sous-domaine>.dortmund.cub.sioplc.fr
    ServerAlias dortmund.cub.sioplc.fr
    DocumentRoot /var/www/<fqdn>

    # Configuration TLS
    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/moncertificat.crt
    SSLCertificateKeyFile /etc/ssl/private/macleprivee.key

    ErrorLog ${APACHE_LOG_DIR}/<sous-domaine>_error.log
    CustomLog ${APACHE_LOG_DIR}/<sous-domaine>_access.log combined

    # Isolation du répertoire pour autoriser le .htaccess localement
    <Directory /var/www/<fqdn>>
        Options FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    <FilesMatch \.php$>
        SetHandler "proxy:unix:/run/php/php8.4-fpm.sock|fcgi://localhost/"
    </FilesMatch>
</VirtualHost>
  • Redirect permanent / : Renvoie un code HTTP 301 pour forcer le navigateur à utiliser l'URL en HTTPS.
  • SSLEngine on : Active le chiffrement TLS pour ce VirtualHost spécifique.
  • SSLCertificateFile / SSLCertificateKeyFile : Définissent les chemins absolus vers le certificat public et la clé privée du site.

4.2. Configuration filtrage IPv4 et auth basic.

Sécurité des mots de passe

Le fichier d'authentification ne doit jamais être placé dans un dossier partagé. Créez un sous-dossier dédié au VirtualHost hors du DocumentRoot (ex: /etc/apache2/auth/<sous-domaine>/).

sudo apache2ctl configtest

Créer le fichier de configuration :

sudoedit /etc/apache2/sites-available/<fqdn>.conf

Exemple de configuration sécurisée TLS :

<VirtualHost *:80>
    ServerName <sous-domaine>.dortmund.cub.sioplc.fr
    # Redirection permanente de tout le trafic HTTP vers HTTPS
    Redirect permanent / https://<sous-domaine>.dortmund.cub.sioplc.fr/
</VirtualHost>

<VirtualHost *:443>
    ServerName <sous-domaine>.dortmund.cub.sioplc.fr
    DocumentRoot /var/www/<fqdn>

    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/moncertificat.crt
    SSLCertificateKeyFile /etc/ssl/private/macleprivee.key

    <Directory /var/www/<fqdn>>
        Options -Indexes
        AllowOverride None

        <RequireAll>
            # Filtrage IPv4
            Require ip 192.168.1.0/24 10.0.0.0/8

            # Authentification ciblée sur un fichier dédié au site
            AuthType Basic
            AuthName "Accès restreint"
            AuthUserFile /etc/apache2/auth/<sous-domaine>/.htpasswd
            Require valid-user
        </RequireAll>
    </Directory>
</VirtualHost>
  • Options -Indexes : Désactive le listing du contenu si aucun fichier d'index (ex: index.php) n'est présent.
  • <RequireAll> : Oblige la validation conjointe des conditions (bonne IP ET mot de passe correct).
  • AuthUserFile : Cible le fichier .htpasswd isolé spécifiquement pour ce site.

5. Déploiement

5.1. Génération du dossier dédié et du fichier de mots de passe.

sudo mkdir -p /etc/apache2/auth/<sous-domaine>/
sudo htpasswd -c /etc/apache2/auth/<sous-domaine>/.htpasswd <utilisateur>
  • mkdir -p : Crée l'arborescence de répertoires parentale dédiée au site de manière silencieuse.
  • htpasswd -c : Crée le fichier chiffré contenant les identifiants (-c pour "create").
  • <utilisateur> : Identifiant de l'utilisateur ajouté.

5.2. Activation du VirtualHost. Application de la configuration au serveur en production.

sudo a2ensite <fqdn>.conf
sudo apache2ctl configtest
sudo systemctl reload apache2
  • a2ensite : Active le VirtualHost en créant le lien symbolique de sites-available vers sites-enabled.
  • apache2ctl configtest : Valide la syntaxe des fichiers de configuration Apache avant application.
  • systemctl reload : Applique les nouveaux paramètres en douceur sans interrompre les connexions TCP actives.