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
- Introduction
- Sommaire
- Préparation de l’infrastructure
- Installation d’Apache2
- Activation des modules reverse proxy
- Configuration DNS et fichiers hosts
- Configuration des VirtualHost Apache2
- Configuration HTTPS avec Let’s Encrypt
- Configuration du pare-feu UFW
- Vérifications et tests
- Logs Apache2 et dépannage
- Erreurs fréquentes
- Bonnes pratiques de sécurité
- Exemples concrets
- Commandes utiles et dépannage
- Fichiers importants
- Synthèse Markdown pour ta fiche bristol
- Conclusion
- Pour aller plus loin
- Liens utiles
- Idées de TP
3. Préparation de l’infrastructure
Avant de configurer le reverse proxy, prépare les éléments suivants :
| Élément | Exemple |
|---|---|
| Serveur reverse proxy | 192.168.1.5 |
| WordPress 1 | 192.168.1.10 |
| WordPress 2 | 192.168.1.20 |
| Domaine 1 | blog1.example.com |
| Domaine 2 | blog2.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 updatemet à jour la liste des paquets disponibles.
sudo apt install apache2 -y
installinstalle un paquet ;apache2correspond au serveur web ;-yvalide 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
| Module | Rôle |
|---|---|
| proxy | Active le moteur proxy |
| proxy_http | Gère les requêtes HTTP |
| ssl | Active HTTPS |
| headers | Modifie les en-têtes HTTP |
| rewrite | Réé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
| Directive | Rôle |
|---|---|
| ServerName | Domaine concerné |
| ProxyPass | Redirection vers backend |
| ProxyPassReverse | Réécrit les réponses |
| ProxyPreserveHost | Conserve le Host original |
| ErrorLog | Journal erreurs |
| CustomLog | Journal 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
| Option | Rôle |
|---|---|
| –apache | Configure Apache automatiquement |
| -d | Domaine 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
| Fichier | Rôle |
|---|---|
| /var/log/apache2/access.log | accès |
| /var/log/apache2/error.log | erreurs |
| /var/log/apache2/blog1_access.log | accès site 1 |
| /var/log/apache2/blog1_error.log | erreurs 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
| Fichier | Rôle |
|---|---|
| /etc/apache2/apache2.conf | configuration globale |
| /etc/apache2/ports.conf | ports 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.
