Wie kann ich HAProxy dazu bringen, in ein anderes Back-End umzuschreiben, wenn dem ersten die Datei fehlt? Was ich brauche errorloc
, ist ein Umschreiben anstelle einer Umleitung, damit der Client die Umleitung nicht kennt.
Wir haben eine Anwendung für NginX entwickelt, die sowohl Reverse Proxy als auch Webserver für statische Dateien zum Lastenausgleich verwendet. Die Anwendung basiert auf dem Opa- Framework, für das auf Cookies basierende Sticky-Sessions erforderlich sind, die sowohl von NginX als auch von HAproxy unterstützt werden. Die Anwendungsfunktion, mit der wir Probleme haben, ist die dynamische Generierung von Inhalten. Es generiert Bilder bei Bedarf, wird jedoch nach der Generierung auf der Festplatte gespeichert und kann statisch über einen deterministischen Pfad abgerufen werden.
Das Problem konnte mit NginX leicht gelöst werden - es versucht nur dann, die lokale Datei zu lesen und das Backend mit Lastenausgleich zu verwenden, wenn die Datei fehlt (noch nicht generiert):
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
[...]
}
}
Der Server wurde migriert und verwendet jetzt HAPproxy für den Lastenausgleich. Dies ist kein Webserver und unterstützt diese Funktion nicht. Jetzt wird jedes Mal eine dynamische Softwaregenerierung durchgeführt, wenn der Client versucht, auf die Ressource zuzugreifen, was viel langsamer ist und Ressourcen verschwendet. Es wäre in Ordnung, wenn es das nächste Back-End verwenden könnte, wenn der erste (einfacher Caching-Webserver für statische Dateien) mit Fehler 404 fehlgeschlagen wäre, aber ich kann keinen einfachen Weg finden, dies zu tun. Die Umleitung /thumb
zu NginX, das versucht, statische Dateien zu lesen und erneut mit einem neuen HTTP-Header in HAproxy umzuschreiben, fällt mir nur ein, aber ich würde gerne etwas Besseres finden.