2.3 KiB
Apache 2 : configurer un reverse-proxy HTTP pour un sous-domaine
Voici mes notes pour configurer un reverse-proxy avec Apache 2, qui expose un sous-domaine HTTP et relaie les requêtes vers un serveur d'origine identifié par son adresse IP.
http://extra.perdu.com <==[ reverse proxy ]==> http://103.224.182.253
Prérequis
- Apache 2 installé avec les modules
proxyetproxy_httpactivés :sudo a2enmod proxy proxy_http - Le port 80 ouvert sur la machine qui héberge le reverse-proxy.
- Un enregistrement DNS pointant le sous-domaine (ici
extra.perdu.com) vers l'IP du reverse-proxy.
Configuration du VirtualHost
Chaque site est décrit par un fichier .conf placé dans /etc/apache2/sites-available/. Dans cet exemple, on configure le site extra.perdu.com pour qu'il relaie le trafic vers 103.224.182.253.
Créer le fichier /etc/apache2/sites-available/100-com.perdu.extra.conf :
<VirtualHost *:80>
ServerName extra.perdu.com
# On ne proxifie pas les requêtes Let's Encrypt :
# elles doivent être servies localement.
ProxyPass /.well-known/acme-challenge !
Alias /.well-known/acme-challenge /var/www/html/.well-known/acme-challenge
<Directory "/var/www/html/.well-known/acme-challenge">
Options None
AllowOverride None
Require all granted
AddDefaultCharset off
</Directory>
ProxyPreserveHost On
ProxyPass "/" "http://103.224.182.253/"
ProxyPassReverse "/" "http://103.224.182.253/"
</VirtualHost>
Pourquoi exclure /.well-known/acme-challenge ?
L'exclusion via ProxyPass /.well-known/acme-challenge ! prépare l'ajout futur d'un certificat SSL avec Let's Encrypt. Lors de la validation du domaine, Let's Encrypt attend une réponse HTTP 200 sur ce chemin : si la requête est relayée vers le serveur d'origine, la validation peut échouer.
Cette directive peut rester en place même si vous ne prévoyez pas d'utiliser Let's Encrypt dans l'immédiat — elle est sans effet tant que le répertoire n'est pas sollicité.
Activer le site
Activer la configuration avec a2ensite :
sudo a2ensite 100-com.perdu.extra.conf
Vérifier que la syntaxe est correcte, puis recharger Apache sans interrompre le service :
sudo apache2ctl configtest
sudo systemctl reload apache2