Domaines de développement - Apache2
Aujourd'hui j'ai eu besoin d'une configuration particulière d'Apache : j'ai décidé que les sous-domaines de deblan.org de type "dev-XXX" devaient être gérés de tel sorte que "XXX" corresponde à un sous-répertoire de dev.deblan.org. Ainsi, dev-01.deblan.org est l'équivalent de dev.deblan.org/01/.
Jusque là, rien de bien méchant sauf que j'ai une contrainte : je souhaite que ce soit automatique (ou le plus possible). Donc je ne souhaite pas ajouter/modifier des Virtualhost, je veux qu'un sous-domaine puisse être supprimé dans me prendre la tête.
La solution est au final simple (mais un peu tordue) :
L'idée est la suivante : comme tout ne sera pas automatique, je m'autorise l'édition d'un seul fichier pour traiter la correspondance d'un nom et de son répertoire de destination (en quelque sorte son DocumentRoot).
Ce fichier sera placé à la racine du compte associé à dev.deblan.org. Sur mon serveur, c'est le chemin suivant :
/services/web/www/dev-xx.deblan.org/vhost.map
Ce fichier contient ces informations :
dev.deblan.org /var/www/service-web/www/dev-xx.deblan.org/public_html/
dev-01.deblan.org /var/www/service-web/www/dev-xx.deblan.org/public_html/01
dev-foo.deblan.org /var/www/service-web/www/dev-xx.deblan.org/public_html/foo
On a donc à gauche le nom de domaine et à droite le répertoire web associé.
A travers une connexion au compte dev.deblan.org (via SSH ou en FTP par exemple), je peux modifier ce fichier.
<VirtualHost *:80>
# On définit le domaine de base
ServerName dev.deblan.org
# On indique les alias de domaine à prendre en compte
ServerAlias dev-*.deblan.org
# La partie la plus importante : les règles qui permettront de traiter ma demande
RewriteEngine on
# C'est ici que tout se passe
RewriteMap lowercase int:tolower
# On charge le fichier pour le mapping
RewriteMap vhost txt:/services/web/www/dev-xx.deblan.org/vhost.map
# On prend le soin de travailler de tout mettre en minuscules (donc attention à la casse !)
RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$
RewriteCond ${vhost:%1} ^(/.*)$
# On "simule" le DocumentRoot du domaine
RewriteRule ^/(.*)$ %1/$1
[...]
</VirtualHost>
Le fichier de mapping n'est chargé qu'une seule fois et c'est quand on relance ou reload Apache. Il faut donc, à des temps réguliers, vérifier si le fichier de mapping a été modifié et si on doit relancer Apache.
Il existe plusieurs méthodes, moi je vous propose un truc très simple :
(Fichier /root/apache2/reload)
#!/bin/sh
# On indique le fichier de mapping
MAPPING=/services/web/www/dev-xx.deblan.org/vhost.map
# On indique le fichier qui va contenir le retour de "ls -l" sur le fichier de mapping
LS_FILE=/root/apache2/ls
[ -f "$LS_FILE" ] || touch "$LS_FILE"
LS=$(ls -l "$MAPPING")
# Si il y une différence entre le "nouveau" ls et l'ancien ls, alors le fichier à été modifié
# Donc on relance apache et on met à jour $LS_FILE
if [ "$LS" != "$(cat "$LS_FILE")" ]; then
/usr/sbin/service apache2 reload
echo "$LS" > "$LS_FILE"
fi
Il ne vous reste plus qu'à placer ça dans un crontab avec par exemple cette ligne de conf :
*/1 * * * * /root/apache2/reload 2>&1 >/dev/null
Ici le script est exécuté toutes les minutes.
Normalement tout devrait fonctionner :)
Si vous avez d'autres solutions, je suis prenneur !

Sharepoint Office365 sur Linux : automatiser l'authentification (v2)
En septembre 2018, je publiais un article pour automatiser l'authentification sur Sharepoint…

Outil de création d’un espace web Apache et PHP
Dans mon activité personnelle et professionnelle, je suis amené à créer des espaces d’héber…
![[tips] PHP FPM : récupérer la vraie adresse IP du visiteur](https://www.deblan.io/media/cache/post_preview_filter/uploads/post/2007-2021/72b24385c9734d49e703371079f49d3e.jpeg)
[tips] PHP FPM : récupérer la vraie adresse IP du visiteur
Mon serveur web fonctionne par couches. La première couche est gérée par Nginx et traite les…