Apache : VirtualHost Simple (HTTPS)

Catégorie: Apache Conf | Langage: ApacheConf

Description

Configuration VirtualHost Apache de base pour servir un site (statique ou PHP) sur un domaine spécifique via HTTPS. Inclut la redirection automatique de HTTP vers HTTPS et des en-têtes de sécurité HTTP recommandés.

Points Clés : Remplacez example.com par votre nom de domaine et /path/to/your/site/public_html par le chemin réel vers vos fichiers. Les chemins des certificats SSL sont ceux typiquement générés par Certbot (Let's Encrypt). N'activez l'en-tête `Strict-Transport-Security` (HSTS) qu'après avoir vérifié que votre configuration HTTPS est stable et fonctionnelle.

Code

# /etc/apache2/sites-available/example.com.conf

# Redirection de HTTP (port 80) vers HTTPS (port 443)
<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com

    RewriteEngine On
    # Redirige toutes les requêtes vers HTTPS
    RewriteCond %{HTTPS} off
    RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301,L]
</VirtualHost>

# Configuration principale pour HTTPS (port 443)
<VirtualHost *:443>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /path/to/your/site/public_html # Chemin vers les fichiers du site

    # Activer SSL/TLS
    SSLEngine On
    # Chemins vers les certificats (générés par Let's Encrypt/Certbot typiquement)
    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
    # Inclure les paramètres SSL recommandés par Certbot/Mozilla
    Include /etc/letsencrypt/options-ssl-apache.conf

    # Fichiers journaux (logs)
    ErrorLog ${APACHE_LOG_DIR}/example.com-ssl-error.log
    CustomLog ${APACHE_LOG_DIR}/example.com-ssl-access.log combined

    # Configuration du répertoire racine du site
    <Directory /path/to/your/site/public_html>
        # Options de base : suivre les liens symboliques, désactiver le listage de répertoire
        Options FollowSymLinks -Indexes
        # Autoriser les directives dans les fichiers .htaccess (si besoin)
        # AllowOverride All
        # Autoriser toutes les requêtes entrantes
        Require all granted
    </Directory>

    # Ajout d'en-têtes de sécurité HTTP (bonnes pratiques)
    <IfModule mod_headers.c>
        Header always set X-Frame-Options "SAMEORIGIN"
        Header always set X-XSS-Protection "1; mode=block"
        Header always set X-Content-Type-Options "nosniff"
        Header always set Referrer-Policy "strict-origin-when-cross-origin"
        # Header always set Content-Security-Policy "default-src 'self'; script-src 'self'; object-src 'none';" # Exemple CSP (à adapter !)
        # Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" # Activer HSTS après tests !
    </IfModule>

    # Activer la compression Gzip pour améliorer les performances
    <IfModule mod_deflate.c>
        AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript application/json
    </IfModule>

</VirtualHost>

N'oubliez pas d'activer les modules Apache nécessaires (ssl, rewrite, headers, deflate) et le site (a2enmod module_name, a2ensite config_file), puis de recharger Apache (systemctl reload apache2).