Apache httpd Arbeiter versuchen es erneut


7

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


1
Stellen Sie sicher, dass der HTTP-Antwortcode auf der Fehlerseite wirklich 500 ist. Bei einigen Konfigurationen wird eine Fehlerseite mit der Meldung "500 Fehler!" Zurückgesetzt. aber mit einem HTTP 200 OKAntwortcode.
Shane Madden

Ich führe den Befehl in Telnet aus und erhalte definitiv "HTTP / 1.1 500 Internal Server Error" im HTTP-Antwortheader.
David Newcomb

Antworten:


4

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 ...


2
Ich habe Ihre Fragen in der httpd dev Liste gefunden! Deshalb habe ich hier gefragt. Ich habe mir den Code selbst angesehen und er zeigt, dass Sie den Wiederholungsmechanismus nicht mehr haben, wenn Sie den 500-Fehler erreichen. httpd-dev sagte, sie würden versuchen, es zu implementieren, wenn sie Zeit haben, aber es gibt keinen Plan dazu.
David Newcomb

0

Nur für den Fall, dass jemand diese Frage erneut beantwortet: Die failonstatusDirektive wurde seit Apache 2.2.27 implementiert.

<Proxy balancer://backends>
BalancerMember http://10.1.1.11
BalancerMember http://10.1.1.12
ProxySet failonstatus=500
</Proxy>

Log:

[Thu Apr 28 03:13:06.176916 2016] [proxy_balancer:error] [pid 3285:tid 140231873353472] [client 10.1.1.1:43608] AH01174: balancer://puppetmaster: Forcing worker (http://10.1.1.12) into error state due to status code 500 matching 'failonstatus' balancer parameter
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.