Ich habe einen Apache httpd-Webserver, auf dem mod_proxy und mod_proxy_balancer ausgeführt werden. Das gesamte / somedir wird an 2 Worker-Maschinen gesendet, die die Anforderungen mithilfe des Round-Robin-Schedulers bearbeiten. Auf jedem Worker-Computer wird IIS ausgeführt, aber ich denke nicht, dass dies wichtig ist.
Ich kann die Funktionsweise des Load Balancers demonstrieren, indem ich wiederholt eine einzelne Seite anfordere, die die IP-Adresse des Computers enthält, und sehe, dass sie auf vorhersehbare Round-Robin-Weise von einem zum anderen wechselt.
Wenn ich einen der IIS-Server ausschalte und dieselbe Seite anfordere, enthält jede Seite nur die IP-Adresse des Computers, der aktiv ist. Wenn ich jedoch IIS starte und meine IIS-Anwendung nicht ausführe, gibt / somedir 500 zurück (wie es sollte).
Ich habe dem Failonstatus (Apache 2.4) 500 hinzugefügt. Wenn der Fehler auftritt, versetzt Apache den Worker-Computer in den Fehlerzustand. Apache gibt den Proxy-Fehler dennoch an den Client zurück. Wie kann ich Apache veranlassen, den Proxy-Fehler abzufangen und es mit einem anderen Worker auf dieselbe Weise wie bei einem Verbindungsfehler erneut zu versuchen?
Aktualisieren
In StackOverflow wird fast dieselbe Frage gestellt, also verbinden Sie sie miteinander.
/programming/11083707/httpd-mod-proxy-balancer-failover-failonstatus-transperant-switching
quelle
HTTP 200 OK
Antwortcode.Antworten:
Ich habe mit einem Entwickler auf der httpd-Mailingliste gesprochen und er hat bestätigt, dass diese Funktion in der aktuellen Codebasis nicht implementiert wurde. Ich habe den Code auch selbst überprüft. Die Zustandsmaschine in mod_proxy_balancer kann den HTTP-Fehler nicht wiederholen, sondern nur im Falle eines Verbindungsfehlers. Ich habe versucht, es selbst zu implementieren, aber es ist zu kompliziert und ich kann die Codebasis leicht instabil machen.
Daher hat dieses Problem heute keine bekannte Lösung ...
quelle
Nur für den Fall, dass jemand diese Frage erneut beantwortet: Die
failonstatus
Direktive wurde seit Apache 2.2.27 implementiert.Log:
quelle