En finir avec les corruptions d'URL d'Apache sur une base PHP/MySQL
Pour notre plateforme d'hébergement, nous utilisons le virtual host d'Apache dans sa version "Mass Hosting". Pour lier une URL à son emplacement local, nous stockons en base de données MySQL les informations sur les domaines présents sur le serveur via un couple URL / PathLocal dans une table dédiée.
Apache est configuré afin que pour chaque requête HTTP, il vérifie quel path local utiliser en fonction du domaine appelé. Il utilise pour cela un petit programme PHP interprété par le serveur qui, lorsqu'il reçoit un nom de domaine sur l'entrée standart répond soit par le PathLocal si il le trouve en base sinon il renvoie "NULL".
Notre problème était qu'en cas d'un nombre important de requêtes web le module mod_rewrite se comportait d'une manière aléatoire et corrompais les paths locaux.
Après plusieurs jours de recherches sur d'éventuels bugs d'Apache, ou du script PHP, il s'avère qu'il suffit d'ajouter la directive suivante dans le fichier de configuration Apache dédié au virtual host pour retrouver un fonctionnement normal en cas de charge importante (*) :
RewriteLock /var/httpd/run/mod_rewrite.lock
La directive "RewriteLock" synchronise les demandes du serveur et évite ainsi la corruption des chemins locaux. Pour plus d'information à ce sujet, je vous recommande la lecture de la documentation Apache RewriteLock.
(*) : Si votre serveur doit supporter une charge importante de façon prolongée, il est recommandé d'utiliser un "dump" de la base de données qui sera déclenché au démarrage d'Apache. Vous perdez en flexibilité par l'obligation de redémarrer le serveur pour toute nouvelle prise en compte d'un nouveau vhost, mais les performances seront bien meilleures (plus de requêtes SQL).
Commentaires
Enregistrer un commentaire