Fiche Reverse proxy Apache2 avec plusieurs sites WordPress derrière

1. Introduction

Dans un environnement professionnel ou pédagogique, tu dois souvent héberger plusieurs sites WordPress derrière une seule adresse IP publique. Cette architecture permet de centraliser la gestion HTTPS, de filtrer les accès, de simplifier les certificats TLS et d’isoler les serveurs web internes.

Le reverse proxy Apache2 agit comme un intermédiaire entre Internet et les serveurs WordPress internes. Les visiteurs accèdent à Apache2, puis Apache redirige automatiquement les requêtes vers le bon serveur WordPress selon le nom de domaine demandé.

Cette approche reste très utilisée dans les infrastructures Debian et Ubuntu, notamment pour :

  • l’hébergement mutualisé ;
  • les laboratoires BTS CIEL/SIO ;
  • les architectures DMZ ;
  • les plateformes de test ;
  • les infrastructures cloud privées.

Dans cette fiche, tu vas apprendre à :

  • installer Apache2 ;
  • activer les modules reverse proxy ;
  • publier plusieurs sites WordPress ;
  • configurer HTTPS ;
  • sécuriser le serveur ;
  • comprendre les logs ;
  • diagnostiquer les erreurs courantes.

Exemple d’architecture :

Internet
|
| HTTPS 443
|
[ Reverse Proxy Apache2 ]
|-----------------------------|
| |
HTTP 80 HTTP 80
| |
wordpress1.local wordpress2.local
192.168.1.10 192.168.1.20

2. Sommaire

  1. Introduction
  2. Sommaire
  3. Préparation de l’infrastructure
  4. Installation d’Apache2
  5. Activation des modules reverse proxy
  6. Configuration DNS et fichiers hosts
  7. Configuration des VirtualHost Apache2
  8. Configuration HTTPS avec Let’s Encrypt
  9. Configuration du pare-feu UFW
  10. Vérifications et tests
  11. Logs Apache2 et dépannage
  12. Erreurs fréquentes
  13. Bonnes pratiques de sécurité
  14. Exemples concrets
  15. Commandes utiles et dépannage
  16. Fichiers importants
  17. Synthèse Markdown pour ta fiche bristol
  18. Conclusion
  19. Pour aller plus loin
  20. Liens utiles
  21. Idées de TP

3. Préparation de l’infrastructure

Avant de configurer le reverse proxy, prépare les éléments suivants :

ÉlémentExemple
Serveur reverse proxy192.168.1.5
WordPress 1192.168.1.10
WordPress 2192.168.1.20
Domaine 1blog1.example.com
Domaine 2blog2.example.com

Les serveurs WordPress doivent déjà fonctionner localement.

Teste chaque site directement :

curl http://192.168.1.10
curl http://192.168.1.20

Si Apache renvoie du HTML, le backend fonctionne correctement.

4. Installation d’Apache2

Sous Debian 13 ou Ubuntu 26.04 :

sudo apt update
sudo apt install apache2 -y

Explication des commandes

sudo apt update
  • apt update met à jour la liste des paquets disponibles.
sudo apt install apache2 -y
  • install installe un paquet ;
  • apache2 correspond au serveur web ;
  • -y valide automatiquement les confirmations.

Vérifie ensuite le service :

sudo systemctl status apache2

5. Activation des modules reverse proxy

Apache utilise des modules pour ajouter des fonctionnalités.

Active les modules nécessaires :

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod ssl
sudo a2enmod headers
sudo a2enmod rewrite
sudo systemctl restart apache2

Explication des modules

ModuleRôle
proxyActive le moteur proxy
proxy_httpGère les requêtes HTTP
sslActive HTTPS
headersModifie les en-têtes HTTP
rewriteRéécrit les URL

Vérifie les modules chargés :

apache2ctl -M

6. Configuration DNS et fichiers hosts

Les noms de domaine doivent pointer vers le reverse proxy.

Exemple DNS :

blog1.example.com -> IP publique reverse proxy
blog2.example.com -> IP publique reverse proxy

En laboratoire BTS, utilise /etc/hosts :

sudo nano /etc/hosts

Ajoute :

192.168.1.5 blog1.example.com
192.168.1.5 blog2.example.com

7. Configuration des VirtualHost Apache2

Apache stocke les configurations des sites ici :

/etc/apache2/sites-available/

Arborescence importante

/etc/apache2/
├── apache2.conf
├── ports.conf
├── mods-available/
├── mods-enabled/
├── sites-available/
└── sites-enabled/

Configuration complète

Créer :

sudo nano /etc/apache2/sites-available/reverse-proxy.conf

8. Bloc de configuration complet

<VirtualHost *:80>
ServerName blog1.example.com

ProxyPreserveHost On
ProxyPass / http://192.168.1.10/
ProxyPassReverse / http://192.168.1.10/

RequestHeader set X-Forwarded-Proto "http"
RequestHeader set X-Forwarded-Port "80"

ErrorLog ${APACHE_LOG_DIR}/blog1_error.log
CustomLog ${APACHE_LOG_DIR}/blog1_access.log combined
</VirtualHost>

<VirtualHost *:80>
ServerName blog2.example.com

ProxyPreserveHost On
ProxyPass / http://192.168.1.20/
ProxyPassReverse / http://192.168.1.20/

RequestHeader set X-Forwarded-Proto "http"
RequestHeader set X-Forwarded-Port "80"

ErrorLog ${APACHE_LOG_DIR}/blog2_error.log
CustomLog ${APACHE_LOG_DIR}/blog2_access.log combined
</VirtualHost>

Explication des directives

DirectiveRôle
ServerNameDomaine concerné
ProxyPassRedirection vers backend
ProxyPassReverseRéécrit les réponses
ProxyPreserveHostConserve le Host original
ErrorLogJournal erreurs
CustomLogJournal accès

Active ensuite le site :

sudo a2ensite reverse-proxy.conf
sudo systemctl reload apache2

Explication

sudo a2ensite reverse-proxy.conf
  • crée un lien symbolique dans sites-enabled.
sudo systemctl reload apache2
  • recharge la configuration sans couper le service.

9. Configuration HTTPS avec Let’s Encrypt

Installe Certbot :

sudo apt install certbot python3-certbot-apache -y

Génère les certificats :

sudo certbot --apache -d blog1.example.com -d blog2.example.com

Explication

OptionRôle
–apacheConfigure Apache automatiquement
-dDomaine concerné

Teste le renouvellement :

sudo certbot renew --dry-run

10. Configuration du pare-feu UFW

Installe UFW si nécessaire :

sudo apt install ufw -y

Autorise SSH :

sudo ufw allow 22/tcp

Autorise HTTP :

sudo ufw allow 80/tcp

Autorise HTTPS :

sudo ufw allow 443/tcp

Active le pare-feu :

sudo ufw enable

Vérifie :

sudo ufw status verbose

11. Vérifications et tests

Teste Apache :

sudo apache2ctl configtest

Résultat attendu :

Syntax OK

Teste les domaines :

curl -I http://blog1.example.com
curl -I http://blog2.example.com

Teste HTTPS :

curl -k https://blog1.example.com

12. Logs Apache2 et dépannage

Logs principaux

FichierRôle
/var/log/apache2/access.logaccès
/var/log/apache2/error.logerreurs
/var/log/apache2/blog1_access.logaccès site 1
/var/log/apache2/blog1_error.logerreurs site 1

Lire les logs en temps réel

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

Chercher une erreur

sudo grep proxy /var/log/apache2/error.log

Que voit-on dans les logs ?

Exemple :

AH01114: HTTP: failed to make connection to backend

Cette erreur indique :

  • backend inaccessible ;
  • mauvais port ;
  • pare-feu bloquant ;
  • serveur WordPress arrêté.

Vérifier les ports

sudo ss -tulpn

13. Erreurs fréquentes

Erreur 503 Service Unavailable

Cause :

  • backend WordPress arrêté.

Vérification :

curl http://192.168.1.10

Boucle HTTPS infinie

Cause :

  • WordPress ne détecte pas HTTPS.

Ajoute dans wp-config.php :

if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
$_SERVER['HTTPS']='on';

Mauvais certificat

Cause :

  • VirtualHost incorrect ;
  • DNS erroné.

14. Exemples concrets

Cas 1 : plusieurs clients WordPress

client1.example.com
client2.example.com
client3.example.com

Chaque client possède son propre serveur backend.

Cas 2 : DMZ

Le reverse proxy se situe :

  • en DMZ ;
  • les serveurs WordPress restent sur le LAN interne.

Cette architecture améliore la sécurité.

Cas 3 : migration

Tu peux déplacer les serveurs WordPress sans changer l’IP publique.

15. Commandes utiles et dépannage

Recharger Apache

sudo systemctl reload apache2

Redémarrer Apache

sudo systemctl restart apache2

Vérifier les VirtualHost

sudo apachectl -S

Vérifier les certificats

sudo certbot certificates

Tester un backend

curl -I http://192.168.1.10

Vérifier les ports ouverts

sudo ss -tulpn

Vérifier les logs systemd

journalctl -u apache2

16. Fichiers importants

FichierRôle
/etc/apache2/apache2.confconfiguration globale
/etc/apache2/ports.confports Apache
/etc/apache2/sites-available/configurations sites
/etc/apache2/sites-enabled/sites activés
/etc/letsencrypt/certificats
/var/log/apache2/journaux
/etc/ufw/configuration pare-feu
/var/www/html/racine web par défaut

17. Synthèse Markdown pour ta fiche bristol

# Reverse proxy Apache2 WordPress

## Installation

```bash
sudo apt update
sudo apt install apache2 -y
```

## Modules utiles

```bash
sudo a2enmod proxy proxy_http ssl headers rewrite
sudo systemctl restart apache2
```

## Configuration reverse proxy

```apache
<VirtualHost *:80>
ServerName blog1.example.com

ProxyPreserveHost On
ProxyPass / http://192.168.1.10/
ProxyPassReverse / http://192.168.1.10/
</VirtualHost>
```

## Activation site

```bash
sudo a2ensite reverse-proxy.conf
sudo systemctl reload apache2
```

## HTTPS

```bash
sudo apt install certbot python3-certbot-apache -y
sudo certbot --apache -d blog1.example.com
```

## Pare-feu

```bash
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
```

## Logs

```bash
tail -f /var/log/apache2/error.log
```

## Vérifications

```bash
apache2ctl configtest
apachectl -S
```

18. Conclusion

Le reverse proxy Apache2 permet d’héberger plusieurs sites WordPress derrière une seule adresse IP publique tout en centralisant HTTPS et la sécurité. Cette architecture reste incontournable dans les infrastructures professionnelles.

Pour maintenir une plateforme fiable :

  • utilise HTTPS partout ;
  • surveille les logs ;
  • limite les ports ouverts ;
  • maintiens Apache et WordPress à jour ;
  • sépare les services internes ;
  • protège les accès d’administration.

19. Pour aller plus loin

Tu peux ensuite approfondir :

  • le load balancing Apache ;
  • les Web Application Firewall ;
  • ModSecurity ;
  • Fail2ban ;
  • le reverse proxy HTTPS vers HTTPS ;
  • HAProxy ;
  • Nginx reverse proxy ;
  • Docker et Traefik ;
  • Kubernetes Ingress.

20. Liens utiles

Documentation officielle Apache Reverse Proxy

https://httpd.apache.org/docs/2.4/howto/reverse_proxy.html

Explique le fonctionnement officiel du reverse proxy Apache2.

Documentation officielle mod_proxy

https://httpd.apache.org/docs/2.4/mod/mod_proxy.html

Référence complète des directives Apache.

Documentation Debian Apache2

https://wiki.debian.org/Apache

Documentation Debian officielle.

Documentation Ubuntu Apache2

https://documentation.ubuntu.com/server/how-to/web-services/install-apache2

Guide Ubuntu Server officiel.

Documentation Certbot

https://eff-certbot.readthedocs.io/en/stable

Documentation officielle Let’s Encrypt.

OpenClassrooms Apache

https://openclassrooms.com/fr/courses/1735206-gerer-son-code-avec-git-et-github

Permet de comprendre l’environnement serveur Linux et l’administration web.

OpenClassrooms Linux

https://openclassrooms.com/fr/courses/7172076-initiez-vous-a-linux

Très utile pour maîtriser Debian et Ubuntu.

RFC HTTP/1.1

https://datatracker.ietf.org/doc/html/rfc9110

Référence officielle du protocole HTTP.

21. Idées de TP

TP 1 : publier deux WordPress

Objectif :

  • configurer deux VirtualHost ;
  • publier deux sites différents.

TP 2 : activer HTTPS

Objectif :

  • installer Certbot ;
  • forcer HTTPS ;
  • vérifier les certificats.

TP 3 : sécuriser le reverse proxy

Objectif :

  • configurer UFW ;
  • fermer les ports inutiles ;
  • vérifier les accès.

TP 4 : analyser les logs Apache

Objectif :

  • provoquer des erreurs ;
  • retrouver les traces dans les logs ;
  • comprendre les messages Apache.

TP 5 : architecture DMZ

Objectif :

  • placer le reverse proxy en DMZ ;
  • isoler les backends WordPress ;
  • filtrer les flux réseau.
Retour en haut