En voulant rendre accessible une application Web de l’extérieur en passant par un reverse proxy apache, je me suis aperçu que les liens vers les fichiers CSS et autres étaient en dure : appli.domaine-interne.local/css/fichier.css (par exemple). Or je voulais changer d’FQDN.
Après pas mal de recherche, j’ai trouvé un mod d’apache permettant de réécrire à la volée le contenu HTML. Ce mod se nomme mod_substitute.
https://httpd.apache.org/docs/2.4/fr/mod/mod_substitute.html
Après quelques tests, je n’ai pas réussi à l’utiliser. J’ai continué de chercher et je suis tombé sur une autre méthode permettant d’exécuter un script php pendant le traitement du mod_proxy.
Voici ce qu’il faut ajouter dans le virtualhost :
ExtFilterDefine proxiedcontentfilter mode=output cmd="/usr/bin/php /var/www/html/sub.php"
RequestHeader unset Accept-Encoding
RequestHeader set Accept-Encoding identity
SetOutputFilter proxiedcontentfilter
Il faut ensuite créer le fichier php correspondant /var/www/html/sub.php
#!/usr/bin/php
<?php
$html = file_get_contents(‘php://stdin’);
$html = str_ireplace(‘http://appli.domaine-interne.local’, ‘https://appli.nouveaudomaine.fr’, $html);
file_put_contents(‘php://stdout’, $html);
Ici, le fichier php appelé par apache lors du traitement mod_proxy permettra de remplacer appli.domaine-interne.local par https://appli.nouveaudomaine.fr’.
Cette méthode est magique. À voir au niveau des performances, mais pour mon cas d’usage, il semblerait que ça tienne la route.
Assurez-vous d’avoir installé php au préalable et mod_proxy puis redémarrez votre serveur apache.