Guide complet du serveur web Ubuntu | Apache + SSL + Optimisation [Débutant]

目次

1. Introduction

Qu’est‑ce qu’un serveur Web Ubuntu ?

Un serveur Web est un système qui délivre des sites Web sur Internet. Les logiciels de serveur Web populaires incluent Apache, Nginx et LiteSpeed, mais le plus largement utilisé sur Ubuntu est Apache.
Ubuntu est léger, très stable et open source, ce qui en fait un choix populaire tant pour les particuliers que pour les entreprises. Il est particulièrement adapté à la création d’une pile LAMP (Linux, Apache, MySQL/MariaDB, PHP), couramment utilisée pour héberger des sites Web et des applications Web.

À qui s’adresse ce guide ?

Cet article est destiné aux débutants qui configurent un serveur Web pour la première fois. Il fournit un guide étape par étape sur l’installation d’Apache sur Ubuntu, la configuration d’hôtes virtuels, la mise en place de certificats SSL, l’optimisation des performances et le renforcement de la sécurité.

Ce que vous apprendrez

  • Comment configurer un serveur Web sur Ubuntu (installation et configuration d’Apache)
  • Mise en place d’hôtes virtuels pour gérer plusieurs sites Web
  • Installation de certificats SSL gratuits avec Let’s Encrypt
  • Renforcement de la sécurité et optimisation des performances du serveur
  • Dépannage des problèmes courants de serveur Web

2. Installation et configuration initiale d’Ubuntu

Exigences du système

Pour exécuter Ubuntu en tant que serveur web, les spécifications système minimales suivantes sont recommandées :

ComponentExigences minimalesExigences recommandées
OSUbuntu 22.04 LTSUbuntu 22.04 LTS
CPU1 GHz ou plus2 GHz ou plus
Mémoire512MB2 Go ou plus
Stockage10 Go ou plus20 Go ou plus
RéseauInternet connectionConnexion à haute vitesse recommandée

Téléchargement et installation d’Ubuntu

Vous pouvez télécharger Ubuntu depuis le site officiel : https://ubuntu.com/download/server. Une fois que vous avez obtenu le fichier ISO, vous pouvez l’installer en utilisant VirtualBox ou VMware pour un environnement virtuel, ou sur un serveur dédié ou VPS.

Étapes d’installation :

  1. Créer le support d’installation
  • Utiliser une clé USB (avec des outils comme Rufus)
  • Monter le fichier ISO dans une machine virtuelle
  1. Suivre l’assistant d’installation
  • Définir la langue sur l’anglais
  • Vérifier la connectivité réseau
  • Configurer le nom d’utilisateur et le mot de passe
  • Installer le serveur SSH (optionnel, peut être fait plus tard)
  1. Terminer la configuration du système d’exploitation et redémarrer
  2. Se connecter et commencer la configuration initiale

Configuration initiale de base

Après l’installation, effectuez les étapes de configuration initiale suivantes :

  1. Mettre à jour les paquets du système
sudo apt update && sudo apt upgrade -y

→ Cela garantit que les correctifs de sécurité et les mises à jour logicielles sont appliqués.

  1. Définir le fuseau horaire
sudo timedatectl set-timezone America/New_York

→ Définissez le fuseau horaire en fonction de l’emplacement de votre serveur.

  1. Activer le pare-feu
sudo ufw enable

→ Cela protège le serveur contre les accès non autorisés.

  1. Configurer SSH (pour la gestion à distance)
  • Vérifier si SSH est activé :
    sudo systemctl status ssh
  • Si ce n’est pas activé, démarrez-le :
    sudo systemctl enable --now ssh

Une fois ces paramètres initiaux appliqués, le serveur Ubuntu est prêt à être configuré en tant que serveur web.

3. Installation et configuration d’Apache

Qu’est-ce qu’Apache ?

Apache (officiellement Apache HTTP Server) est un logiciel serveur web open source connu pour sa stabilité, son évolutivité et sa sécurité. Environ 30 % des serveurs web dans le monde utilisent Apache.

Fonctionnalités clés :

  • Gratuit et open source
  • Architecture modulaire pour une personnalisation facile
  • Prend en charge SSL/TLS pour des connexions HTTPS sécurisées
  • Prise en charge des hôtes virtuels pour gérer plusieurs sites web

Installation d’Apache

Sur Ubuntu, Apache peut être installé facilement en utilisant le gestionnaire de paquets apt.

Installer Apache

Exécutez les commandes suivantes pour installer Apache :

sudo apt update
sudo apt install apache2 -y

Vérifier l’installation

Après l’installation, vérifiez la version d’Apache :

apache2 -v

Exemple de sortie :

Server version: Apache/2.4.52 (Ubuntu)
Server built:   2023-07-01T12:34:56

Si vous voyez ce message, Apache est installé avec succès.

Démarrage, arrêt et redémarrage d’Apache

Apache est géré à l’aide de la commande systemctl.

Démarrer Apache

sudo systemctl start apache2

Activer Apache au démarrage

sudo systemctl enable apache2

Vérifier le statut d’Apache

Pour confirmer qu’Apache fonctionne :

sudo systemctl status apache2

Si Apache fonctionne, vous verrez un statut « active (running) ».

Redémarrer ou arrêter Apache

Si vous devez redémarrer Apache après avoir modifié la configuration :

sudo systemctl restart apache2

Pour arrêter temporairement Apache :

sudo systemctl stop apache2

4. Configuration des hôtes virtuels (Gestion de plusieurs sites Web)

Qu’est-ce qu’un hôte virtuel ?

Un hôte virtuel est une fonctionnalité qui permet à un seul serveur Apache d’héberger plusieurs domaines (ou sous‑domaines). Par exemple, un serveur unique peut héberger à la fois example.com et test.com.

Il existe deux types d’hôtes virtuels :

  1. Hôte virtuel basé sur le nom
  • Héberge plusieurs sites sur la même adresse IP
  • La façon la plus courante de gérer plusieurs sites web
  1. Hôte virtuel basé sur l’IP
  • Chaque site se voit attribuer une adresse IP différente
  • Nécessite plusieurs interfaces réseau sur le serveur

Typiquement, l’hébergement virtuel basé sur le nom est utilisé.

Étapes pour configurer les hôtes virtuels

1. Créez des répertoires pour chaque site

Chaque hôte virtuel nécessite un répertoire dédié pour stocker les fichiers de son site web.

sudo mkdir -p /var/www/example.com/public_html
sudo mkdir -p /var/www/test.com/public_html

2. Changez le propriétaire des répertoires

Pour garantir qu’Apache puisse accéder aux fichiers, définissez le propriétaire sur www-data.

sudo chown -R www-data:www-data /var/www/example.com/public_html
sudo chown -R www-data:www-data /var/www/test.com/public_html

3. Créez un fichier HTML de test

Pour vérification, créez un index.html fichier pour chaque site.

echo "<h1>Welcome to example.com</h1>" | sudo tee /var/www/example.com/public_html/index.html
echo "<h1>Welcome to test.com</h1>" | sudo tee /var/www/test.com/public_html/index.html

4. Créez les fichiers de configuration des hôtes virtuels

Les configurations des hôtes virtuels sont stockées dans /etc/apache2/sites-available/.

Configuration pour example.com

Créez et éditez un fichier de configuration :

sudo nano /etc/apache2/sites-available/example.com.conf

Ajoutez la configuration suivante :

<VirtualHost *:80>
    ServerAdmin admin@example.com
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/public_html

    <Directory /var/www/example.com/public_html>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/example.com_error.log
    CustomLog ${APACHE_LOG_DIR}/example.com_access.log combined
</VirtualHost>

Configuration pour test.com

sudo nano /etc/apache2/sites-available/test.com.conf

Ajoutez le contenu suivant :

<VirtualHost *:80>
    ServerAdmin admin@test.com
    ServerName test.com
    ServerAlias www.test.com
    DocumentRoot /var/www/test.com/public_html

    <Directory /var/www/test.com/public_html>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/test.com_error.log
    CustomLog ${APACHE_LOG_DIR}/test.com_access.log combined
</VirtualHost>

5. Activez les hôtes virtuels

Une fois les fichiers de configuration créés, activez‑les avec a2ensite.

sudo a2ensite example.com.conf
sudo a2ensite test.com.conf

Test de la configuration d’Apache

Vérifiez les erreurs de syntaxe :

sudo apachectl configtest

Si la sortie est :

Syntax OK

Redémarrez Apache pour appliquer les changements :

sudo systemctl restart apache2

6. Test local (édition du fichier hosts)

Pour vérifier que les hôtes virtuels fonctionnent correctement, éditez votre fichier local hosts.

sudo nano /etc/hosts

Ajoutez les lignes suivantes :

127.0.0.1 example.com
127.0.0.1 test.com

Après avoir enregistré, ouvrez un navigateur et saisissez :

http://example.com/

Si vous voyez ** »Welcome to example.com »**, la configuration est réussie.

5. Activation du SSL/TLS (HTTPS)

Qu’est-ce que SSL/TLS ?

SSL (Secure Sockets Layer) et TLS (Transport Layer Security) sont des technologies de chiffrement qui sécurisent les communications sur Internet.

Avantages de SSL/TLS :

Chiffre les communications (réduit les risques de vol de données et de falsification)
Améliore le référencement SEO (Google privilégie les sites HTTPS dans les résultats de recherche)
Évite les avertissements du navigateur (les sites HTTP peuvent afficher « Non sécurisé »)
Sécurise les paiements en ligne et les identifiants de connexion

Utiliser Let’s Encrypt pour un SSL gratuit

Let’s Encrypt est une autorité de certification qui fournit des certificats SSL gratuits. Nous utilisons certbot pour le configurer facilement.

Installer Certbot

sudo apt update
sudo apt install certbot python3-certbot-apache -y

Configurer automatiquement SSL pour Apache

sudo certbot --apache -d example.com -d www.example.com

Vérifier que HTTPS fonctionne

Après l’installation, vérifiez :

https://example.com/

Si vous voyez une **icône de cadenas** dans le navigateur, SSL fonctionne.

6. Améliorer la sécurité du serveur Web

Configuration d’un pare-feu (UFW)

Activer le pare-feu et ouvrir les ports nécessaires

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp   # SSH
sudo ufw allow 80/tcp   # HTTP
sudo ufw allow 443/tcp  # HTTPS
sudo ufw enable

Protection de SSH

Modifier le port SSH

sudo nano /etc/ssh/sshd_config

Modifier :

Port 2222  # Change 22 to a custom port

Redémarrer SSH :

sudo systemctl restart ssh

7. Optimisation des performances

Optimisation d’Apache

Par défaut, Apache n’est pas toujours optimisé pour gérer un trafic élevé efficacement. Vous pouvez ajuster les paramètres suivants pour améliorer les performances.

Optimisation du MPM (Multi-Processing Module)

Le MPM (Multi-Processing Module) détermine la façon dont Apache traite les requêtes.

Vérifiez la configuration actuelle du MPM :

apachectl -M | grep mpm

Exemple de sortie :

mpm_prefork_module (shared)

Si vous voyez mpm_prefork_module, envisagez de passer à mpm_event pour de meilleures performances.

Passer au MPM Event :

sudo a2dismod mpm_prefork
sudo a2enmod mpm_event
sudo systemctl restart apache2

Activation de KeepAlive

KeepAlive permet des connexions persistantes, réduisant le nombre de nouvelles requêtes.

Modifiez le fichier de configuration d’Apache :

sudo nano /etc/apache2/apache2.conf

Ajoutez ou modifiez les paramètres suivants :

KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5

Redémarrez Apache :

sudo systemctl restart apache2

Exploiter la mise en cache

L’utilisation de la mise en cache côté navigateur et côté serveur réduit les requêtes redondantes, améliorant les temps de réponse.

Activer mod_expires pour la mise en cache du navigateur

sudo a2enmod expires
sudo systemctl restart apache2

Modifiez le fichier de configuration de votre hôte virtuel :

sudo nano /etc/apache2/sites-available/example.com.conf

Ajoutez :

<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault "access plus 1 month"
    ExpiresByType image/jpg "access plus 1 year"
    ExpiresByType image/jpeg "access plus 1 year"
    ExpiresByType image/png "access plus 1 year"
    ExpiresByType text/css "access plus 1 month"
    ExpiresByType application/javascript "access plus 1 month"
</IfModule>

Redémarrez Apache :

sudo systemctl restart apache2

Activer la compression Gzip

Activez la compression pour réduire la taille des fichiers et améliorer la vitesse de chargement.

Activer mod_deflate

sudo a2enmod deflate
sudo systemctl restart apache2

Modifiez le fichier de configuration de l’hôte virtuel :

sudo nano /etc/apache2/sites-available/example.com.conf

Ajoutez :

<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/xml
    AddOutputFilterByType DEFLATE text/css
    AddOutputFilterByType DEFLATE application/javascript
    AddOutputFilterByType DEFLATE image/svg+xml
</IfModule>

Redémarrez Apache :

sudo systemctl restart apache2

Limiter les ressources

Pour éviter une utilisation excessive des ressources, limitez le nombre de connexions par IP.

Activer mod_ratelimit

sudo a2enmod ratelimit
sudo systemctl restart apache2

Modifiez le fichier de configuration de l’hôte virtuel :

sudo nano /etc/apache2/sites-available/example.com.conf

Ajoutez :

<Location />
    SetOutputFilter RATE_LIMIT
    SetEnv rate-limit 200
</Location>

Redémarrez Apache :

sudo systemctl restart apache2

8. Dépannage

Apache ne démarre pas ou s’arrête de façon inattendue

Vérifier le statut d’Apache

sudo systemctl status apache2

Si la sortie contient :

Active: failed

Alors une erreur s’est produite.

Vérifier les journaux d’erreurs

sudo journalctl -xe
sudo tail -f /var/log/apache2/error.log

Vérifier les conflits de ports

sudo netstat -tulnp | grep ':80'

Ou :

sudo lsof -i:80

Problèmes de certificat SSL

Certificat SSL expiré

sudo certbot renew --force-renewal

Erreur de configuration SSL d’Apache

Modifier le fichier de configuration SSL d’Apache :

sudo nano /etc/apache2/sites-available/example.com-le-ssl.conf

Vérifier :

SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem

Redémarrer Apache :

sudo systemctl restart apache2

Site web ne charge pas (erreurs 403, 404, 500)

403 Interdit

sudo chown -R www-data:www-data /var/www/example.com/public_html
sudo chmod -R 755 /var/www/example.com/public_html

404 Non trouvé

Vérifier la configuration de l’hôte virtuel :

DocumentRoot /var/www/example.com/public_html

Activer mod_rewrite si nécessaire :

sudo a2enmod rewrite
sudo systemctl restart apache2

500 Erreur interne du serveur

Vérifier les journaux d’erreurs :

sudo tail -f /var/log/apache2/error.log

Essayer de renommer .htaccess :

mv /var/www/example.com/public_html/.htaccess /var/www/example.com/public_html/.htaccess.bak

9. Résumé

Ce que vous avez appris

Passons en revue les principaux sujets abordés dans ce guide.

SectionPoints clés
1. IntroductionAperçu du serveur Web Ubuntu et l’objectif de ce guide
2. Installation et configuration initiale d’UbuntuConfiguration d’Ubuntu, mise à jour des paquets et configuration du pare-feu
3. Installation et configuration d’ApacheInstallation d’Apache, démarrage du service et vérification du fonctionnement
4. Configuration des hôtes virtuelsHébergement de plusieurs sites Web sur un seul serveur Apache
5. Activation de SSL/TLS

Utilisation de Let’s Encrypt pour la configuration HTTPS

6. Renforcement de la sécurité du serveur WebConfiguration du pare-feu, sécurité SSH et renforcement d’Apache
7. Optimisation des performancesUtilisation du cache, de la compression et réglage des paramètres Apache
8. DépannageCorrection des erreurs Apache, des problèmes SSL et des erreurs courantes du site Web

Prochaines étapes

Maintenant que votre serveur web Ubuntu est opérationnel, envisagez d’apprendre des sujets plus avancés pour améliorer les capacités de votre serveur :

Déployer des applications WordPress ou PHP
Configurer un serveur de base de données (MySQL / MariaDB)
Configurer Nginx comme proxy inverse pour Apache
Mettre en place l’auto‑scaling avec les plateformes cloud (AWS, GCP, Azure)
Journalisation et surveillance avancées (Fail2Ban, Logwatch, Prometheus)

Questions fréquentes (FAQ)

Q1 : Dois‑je choisir Nginx ou Apache pour mon serveur web ?

R1 : Si votre site Web sert principalement du contenu statique, Nginx est recommandé. Si vous avez besoin de traitement de contenu dynamique (comme PHP), Apache est un meilleur choix. Vous pouvez également utiliser Nginx comme proxy inverse devant Apache.

Q2 : Les certificats SSL peuvent‑ils être renouvelés automatiquement ?

R2 : Oui, Certbot prend en charge le renouvellement automatique. Vous pouvez vérifier l’état du renouvellement avec :

sudo certbot renew --dry-run

Pour un renouvellement entièrement automatique, il est recommandé de configurer une tâche cron.

Q3 : Comment puis‑je renforcer davantage la sécurité de mon serveur ?

R3 : Mettez en place Fail2Ban pour prévenir les attaques par force brute, masquer les détails de version d’Apache, désactiver les modules inutilisés et appliquer des pratiques de sécurité SSH robustes.

Q4 : Comment améliorer les performances d’Apache ?

R4 : Passez à MPM Event, activez la mise en cache (mod_cache), utilisez la compression gzip (mod_deflate) et optimisez les paramètres KeepAlive.

Q5 : Pourquoi obtient‑je une erreur « 403 Forbidden » ?

R5 : Assurez‑vous que le propriétaire du répertoire est défini sur www-data et ajustez les permissions des fichiers :

sudo chown -R www-data:www-data /var/www/example.com/public_html
sudo chmod -R 755 /var/www/example.com/public_html

Réflexions finales

Mettre en place un serveur web Ubuntu implique plusieurs étapes, de l’installation et la configuration à l’optimisation et le dépannage. Cependant, une fois que vous comprenez le processus, vous pouvez créer et gérer un environnement d’hébergement web puissant.

🚀 Suivez ce guide pour créer un serveur web sécurisé, rapide et fiable, et continuez à améliorer vos compétences en tant qu’administrateur serveur ! 🚀