Comment faire réécrire HAProxy vers un back-end différent lorsque le premier manque le fichier? Ce dont j'ai besoin, c'est de errorloc
faire une réécriture au lieu d'une redirection, donc le client n'est pas au courant de la redirection.
Nous avons développé une application avec NginX à l'esprit, qui était à la fois un proxy inverse d'équilibrage de charge et un serveur Web pour les fichiers statiques. L'application est basée sur le framework Opa qui nécessite des sessions persistantes basées sur des cookies - prises en charge par NginX et HAproxy. La fonctionnalité d'application avec laquelle nous avons un problème est la génération de contenu dynamique. Il génère des images à la demande, mais après sa génération, il est enregistré sur le disque et peut être consulté de manière statique avec un chemin déterministe.
Le problème a été facilement résolu avec NginX - il essaie de lire le fichier local et d'utiliser le back-end à charge équilibrée uniquement si le fichier est manquant (pas encore généré):
server {
server_name wkaliszu.pl;
location /thumb {
root /path_on_disk/to_cached_content;
expires 7d;
# try to access already generated content
try_files $uri @wkaliszu;
}
location / {
# reverse proxy to the application
[...]
}
location @wkaliszu {
# reverse proxy to the application
[...]
}
}
Le serveur a été migré et utilise maintenant HAPproxy pour l'équilibrage de charge, qui n'est pas un serveur Web et ne prend pas en charge cette fonctionnalité. Maintenant, la génération de logiciels dynamiques est effectuée chaque fois que le client essaie d'accéder à la ressource, ce qui est beaucoup plus lent et gaspille les ressources. Ce serait bien s'il pouvait utiliser le back-end suivant si le premier (serveur Web de mise en cache simple pour les fichiers statiques) échouait avec l'erreur 404, mais je ne peux pas trouver un moyen de le faire de manière simple. La redirection /thumb
vers NginX, qui essaie de lire le fichier statique et réécrit à nouveau vers HAproxy avec un nouvel en-tête HTTP ne me vient à l'esprit, mais je voudrais trouver quelque chose de mieux.