Apache2

Configuration

Installation

Cette section explique comment installer Apache2 sur un système Debian/Ubuntu. Apache2 est un serveur web open-source qui permet d'héberger des sites web et des applications web.

# Installation d'Apache2
sudo apt update
sudo apt install apache2

# Vérification de l'installation
sudo systemctl status apache2

Configuration des sites

Cette section montre comment configurer un site web basique dans Apache2. Un VirtualHost permet d'héberger plusieurs sites web sur le même serveur, chacun avec sa propre configuration.

# Création d'un nouveau site
sudo nano /etc/apache2/sites-available/exemple.conf  # Exemple de configuration

# Contenu du fichier

    # Remplacez par votre nom de domaine
    ServerName www.exemple.com  # Nom de domaine principal
    DocumentRoot /var/www/exemple  # Répertoire des fichiers du site
    
    exemple>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    


# Activation du site
sudo a2ensite exemple.conf
sudo systemctl reload apache2

Configuration avancée des hôtes virtuels

Cette section présente une configuration complète d'un hôte virtuel avec des fonctionnalités avancées pour la sécurité, les performances et la maintenance.

# Configuration complète d'un hôte virtuel

    # Configuration de base
    ServerName www.exemple.com  # Définit le nom de domaine principal
    ServerAlias exemple.com  # Permet d'utiliser plusieurs noms de domaine
    ServerAdmin webmaster@exemple.com  # Email de contact
    DocumentRoot /var/www/exemple  # Répertoire des fichiers du site
    
    # Journalisation personnalisée
    ErrorLog ${APACHE_LOG_DIR}/exemple-error.log  # Logs des erreurs
    CustomLog ${APACHE_LOG_DIR}/exemple-access.log combined  # Logs d'accès
    
    # Options du répertoire
    exemple>
        Options Indexes FollowSymLinks MultiViews  # Options de navigation
        AllowOverride All  # Permet l'utilisation de .htaccess
        Require all granted  # Contrôle d'accès
        
        # Sécurité
        
            Header set X-Content-Type-Options "nosniff"  # Empêche le MIME-sniffing
            Header set X-Frame-Options "SAMEORIGIN"  # Protection contre le clickjacking
            Header set X-XSS-Protection "1; mode=block"  # Protection XSS
        
    
    
    # Redirection
    RedirectMatch 301 ^/ancien-article$ /nouvel-article  # Redirection permanente
    
    # Protection par mot de passe
    exemple/admin>
        AuthType Basic  # Type d'authentification
        AuthName "Zone Admin"  # Message d'authentification
        AuthUserFile /etc/apache2/.htpasswd  # Fichier des mots de passe
        Require valid-user  # Nécessite une authentification
    
    
    # Cache
    
        ExpiresActive On  # Active la gestion du cache
        ExpiresByType image/jpg "access plus 1 year"  # Cache des images
        ExpiresByType image/jpeg "access plus 1 year"
        ExpiresByType image/gif "access plus 1 year"
        ExpiresByType image/png "access plus 1 year"
        ExpiresByType text/css "access plus 1 month"  # Cache des fichiers CSS
        ExpiresByType application/javascript "access plus 1 month"  # Cache des fichiers JS
    
    
    # Compression
    
        AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript  # Compression des fichiers
    
    
    # PHP
    
        SetHandler application/x-httpd-php  # Configuration du traitement PHP
    
    
    # Protection contre les injections
    
        RewriteEngine On  # Active le moteur de réécriture
        RewriteCond %{REQUEST_METHOD} ^(HEAD|TRACE|DELETE|TRACK) [NC]  # Bloque les méthodes dangereuses
        RewriteRule ^(.*)$ - [F,L]  # Renvoie une erreur 403
    

  • ServerName : Définit le nom de domaine principal du site. C'est l'URL que les utilisateurs utiliseront pour accéder au site.
  • ServerAlias : Permet d'utiliser plusieurs noms de domaine pour le même site. Utile pour les domaines alternatifs ou les sous-domaines.
  • ServerAdmin : Email de l'administrateur du site. Utilisé dans les pages d'erreur par défaut.
  • DocumentRoot : Chemin vers les fichiers du site. C'est le répertoire racine où Apache cherche les fichiers à servir.
  • ErrorLog/CustomLog : Configuration des fichiers de logs pour le suivi des erreurs et des accès au site.
  • Options :
    • Indexes : Permet l'affichage du contenu des répertoires quand il n'y a pas de fichier index
    • FollowSymLinks : Permet de suivre les liens symboliques pour accéder aux fichiers
    • MultiViews : Permet la négociation de contenu (choix automatique de la langue, format, etc.)
  • AllowOverride : Permet l'utilisation de fichiers .htaccess pour la configuration au niveau du répertoire
  • Require : Contrôle d'accès pour définir qui peut accéder au site
  • Header : En-têtes de sécurité pour protéger contre diverses attaques web
  • RedirectMatch : Permet de rediriger les URLs vers d'autres emplacements
  • AuthType/AuthName : Configuration de l'authentification pour protéger des zones du site
  • Expires : Configuration du cache pour améliorer les performances
  • Deflate : Compression du contenu pour réduire la bande passante utilisée

Configuration SSL

Génération d'un certificat auto-signé

# Génération du certificat auto-signé
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/private/apache-selfsigned.key \
-out /etc/ssl/certs/apache-selfsigned.crt

# Les informations demandées :
# Country Name (2 letter code) [AU]: FR
# State or Province Name: Votre_Region
# Locality Name: Votre_Ville
# Organization Name: Votre_Organisation
# Organizational Unit Name: Votre_Service
# Common Name: localhost
# Email Address: votre@email.com

Configuration du VirtualHost SSL

# Création du fichier de configuration SSL
sudo nano /etc/apache2/sites-available/default-ssl.conf

# Contenu du fichier
<VirtualHost *:443>
    ServerName localhost
    DocumentRoot /var/www/html
    
    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
    SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key
    
    <Directory /var/www/html>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

Activation du SSL

# Activation du module SSL
sudo a2enmod ssl

# Activation du site SSL
sudo a2ensite default-ssl.conf

# Redémarrage d'Apache
sudo systemctl restart apache2

Points importants

  • Les certificats auto-signés ne sont pas reconnus comme fiables par les navigateurs
  • Idéal pour le développement et les environnements internes
  • Les certificats expirent après 365 jours
  • Nécessite une configuration manuelle du renouvellement

Débogage

Vérification des services

# Vérification d'Apache
sudo systemctl status apache2

# Vérification des logs
sudo tail -f /var/log/apache2/error.log
sudo tail -f /var/log/apache2/access.log

Problèmes courants

  • Problèmes de permissions
  • Erreurs de configuration
  • Problèmes de SSL
  • Problèmes de performance

Bonnes Pratiques

  • Maintenir Apache à jour
  • Configurer la sécurité (SSL, pare-feu)
  • Surveiller les logs
  • Configurer les sauvegardes
  • Documenter les procédures

FAQ

  1. Vérification des permissions :
    # Vérifier les permissions du dossier
    ls -la /var/www/html
    
    # Vérifier le propriétaire
    stat /var/www/html
    
    # Corriger les permissions si nécessaire
    chown -R www-data:www-data /var/www/html
    chmod -R 755 /var/www/html
  2. Vérification de la configuration Apache :
    # Vérifier le VirtualHost
    cat /etc/apache2/sites-available/*.conf
    
    # Vérifier les directives Directory
    <Directory /var/www/html>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
  3. Vérification des logs :
    # Logs d'erreur Apache
    tail -f /var/log/apache2/error.log
    
    # Logs d'accès
    tail -f /var/log/apache2/access.log
  1. Vérification du statut :
    # Vérifier l'état du service
    systemctl status apache2
    
    # Vérifier les erreurs de démarrage
    journalctl -xe
  2. Vérification de la configuration :
    # Tester la configuration
    apache2ctl -t
    
    # Vérifier les modules
    apache2ctl -M
    
    # Vérifier les ports
    netstat -tulpn | grep apache
  3. Vérification des logs :
    # Logs système
    tail -f /var/log/syslog
    
    # Logs Apache
    tail -f /var/log/apache2/error.log
  4. Actions correctives :
    • Redémarrer Apache : systemctl restart apache2
    • Vérifier les conflits de ports
    • Vérifier les permissions des fichiers de configuration
    • Vérifier l'espace disque