Ich erhalte diesen Fehler alle paar Minuten, wenn ich mod_proxy als Reverse-Proxy für einen SOAP-Webdienst verwende. Wahrscheinlich gehen 3 oder 4 Anfragen pro Sekunde ein, also reden wir über 1 oder 2 von tausend, die diesen Fehler haben.
[Tue Nov 23 11:44:14 2010] [error] [client 172.16.1.31] (20014)Internal error: proxy: error reading status line from remote server soap1.server:8888
[Tue Nov 23 11:44:14 2010] [error] [client 172.16.1.31] proxy: Error reading from remote server returned by /someapp/path/to/web/service
Dies führt dazu, dass die Anforderung fehlschlägt. Wenn ich den Client direkt mit dem Soap-Server verbinden lasse, ohne den Proxy zu verwenden, ist der Erfolg 100%, sodass das Problem im Proxy zu liegen scheint
Die Konfiguration sieht so aus. Der Zweck besteht darin, auf einen Sicherungsserver zu wechseln, wenn der primäre nicht verfügbar ist:
<Proxy balancer://apicluster>
BalancerMember http://soap1.server:8888 lbset=0
BalancerMember http://soap2.server:8888 lbset=1
</Proxy>
ProxyPass /someapp balancer://apicluster/someapp
ProxyPassReverse / balancer://apicluster/someapp
Ist jemand darauf gestoßen und hat einen Fix gefunden? Es gibt einige Erwähnungen in Fehlerberichten, aber keine Lösungen. Das Einzige, was ungewöhnlich sein kann, ist, dass die Client-Anfrage 100 MB oder mehr umfassen kann. Daher kann die Anfrage etwas länger dauern, als Sie es für einen SOAP-Anruf erwarten würden.
quelle
Antworten:
Für den Fall, dass jemand anderes darauf stößt. Dies ist ein Fehler in mod_proxy, der vermieden werden kann, indem die folgenden Zeilen in die httpd.conf eingefügt werden:
https://issues.apache.org/bugzilla/show_bug.cgi?id=37770
Informationen dazu, was diese Variablen bewirken, finden Sie in der
mod_proxy
Dokumentation . Sie haben einen speziellen Abschnitt, Protocol Adjustment (Protokollanpassung), in dem diese Variablen behandelt werden.quelle
Beachten Sie die Apache-Dokumentation hier: http://httpd.apache.org/docs/2.2/mod/mod_proxy_http.html
Es scheint, dass es eine Racebedingung in mod_proxy_http gibt, aber dies kann vermieden werden, indem Folgendes eingeschlossen wird:
Dies verhindert, dass Apache eine Poolverbindung verwendet, wenn es sich um eine erste Anforderung handelt.
Das Dokument stellt jedoch fest, dass diese Einstellung zu einer Leistungsverschlechterung führt.
quelle
proxy-initial-not-pooled
ist nur dann effektiv, wenn Sie über einen bestimmten Patch verfügen, von dem ich glaube, dass er nicht Teil von httpd 2.2 ist. Ich kenne httpd 2.4 nicht. Siehe bz.apache.org/bugzilla/show_bug.cgi?id=37770#c88Sie können diese verwandte Fehlermeldung (
AH01102: error reading status line from remote server
) auch unterdrücken, indem Sie das Apache-Modul mod_reqtimeout und diese conf-Direktive verwenden:Sie müssen das reqtimeout-Modul wahrscheinlich wie folgt aktivieren:
quelle