Przerywany błąd podczas używania mod_proxy do wykonania odwrotnego proxy do usługi SOAP


17

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.


Odpowiedź Davida Purdue'a (SetEnv proxy-initial-not-pooled 1) jest obecnie poprawną odpowiedzią (2016).
MattBianco,

Odpowiedzi:



5

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:

SetEnv proxy-initial-not-pooled 1

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.


1
proxy-initial-not-pooleddział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#c88
kubańczyk

0

Moż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:

RequestReadTimeout header=30

Prawdopodobnie będziesz musiał włączyć moduł reqtimeout w następujący sposób:

$ sudo a2enmod reqtimeout
$ sudo apache2ctl restart
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.