Ten błąd pojawia się co kilka minut przy użyciu mod_proxy jako odwrotnego proxy do usługi sieciowej SOAP. Prawdopodobnie pojawiają się 3 lub 4 żądania na sekundę, więc mówimy około 1 lub 2 na tysiąc, które mają ten błąd.
[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
Powoduje to niepowodzenie żądania. Jeśli mam klienta łączącego się bezpośrednio z serwerem mydła bez użycia proxy, sukces wynosi 100%, więc problem wydaje się być w proxy
Konfiguracja wygląda następująco. Celem jest przejście na serwer zapasowy, jeśli podstawowy nie jest dostępny:
<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
Czy ktoś na to wpadł i znalazł poprawkę? W raportach błędów jest kilka wzmianek, ale nie ma rozwiązań. Jedyne, co może być niezwykłe, to żądanie klienta może wynosić 100 MB lub więcej, więc żądanie może potrwać nieco dłużej, niż można by oczekiwać w przypadku połączenia SOAP.
źródło
Odpowiedzi:
Na wypadek, gdyby wpadł na to ktoś inny. Jest to błąd w mod_proxy, którego można uniknąć, umieszczając następujące wiersze w pliku httpd.conf:
https://issues.apache.org/bugzilla/show_bug.cgi?id=37770
Aby uzyskać informacje na temat tych zmiennych, zobacz
mod_proxy
dokumentację . Mają określoną sekcję Dostosowanie protokołu, która dotyczy tych zmiennych.źródło
Zapoznaj się z dokumentacją Apache tutaj: http://httpd.apache.org/docs/2.2/mod/mod_proxy_http.html
Wygląda na to, że w mod_proxy_http istnieje warunek wyścigu, ale można tego uniknąć, włączając:
Co uniemożliwia Apache użycie połączenia w puli, jeśli jest to wstępne żądanie.
Dokument zauważa, że to ustawienie spowoduje obniżenie wydajności.
źródło
proxy-initial-not-pooled
działa tylko, jeśli masz konkretną łatkę, która moim zdaniem nie jest częścią httpd 2.2. Nie wiem o httpd 2.4. Zobacz bz.apache.org/bugzilla/show_bug.cgi?id=37770#c88Można również ukryć ten powiązany komunikat o błędzie (
AH01102: error reading status line from remote server
), używając modułu mod_reqtimeout modułu apache i tej dyrektywy conf:Prawdopodobnie będziesz musiał włączyć moduł reqtimeout w następujący sposób:
źródło