it-swarm-eu.dev

Erreur intermittente lors de l'utilisation de mod_proxy pour effectuer un proxy inverse vers SOAP service

J'obtiens cette erreur toutes les quelques minutes lorsque j'utilise mod_proxy comme proxy inverse d'un service Web SOAP. Il y a probablement 3 ou 4 demandes par seconde, nous parlons donc d'1 ou 2 sur chaque mille qui ont cette erreur.

[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

Cela entraîne l'échec de la demande. Si le client se connecte directement au serveur soap sans utiliser le proxy, le succès est de 100%, donc le problème semble être dans le proxy

La configuration ressemble à ceci. Le but est de basculer vers un serveur de sauvegarde si le serveur principal n'est pas disponible:

<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 

Quelqu'un a-t-il rencontré cela et trouvé un correctif? Il y a quelques mentions dans les rapports de bogues mais aucune solution. La seule chose qui peut être inhabituelle est que la demande du client pourrait être de 100 Mo ou plus, donc la demande pourrait prendre un peu plus de temps que ce à quoi vous vous attendez pour un appel SOAP.

18
JOTN

Au cas où quelqu'un d'autre se heurterait à cela. C'est un bogue dans mod_proxy qui peut être évité en mettant ces lignes dans votre httpd.conf:

SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1

https://issues.Apache.org/bugzilla/show_bug.cgi?id=3777

Pour plus d'informations sur ce que font ces variables, voir mod_proxy documentation . Ils ont une section spécifique, Protocol Adjustment, qui traite de ces variables.

28
JOTN

Prenez note de la documentation Apache ici: http://httpd.Apache.org/docs/2.2/mod/mod_proxy_http.html

Il semble qu'il y ait une condition de concurrence dans mod_proxy_http, mais elle peut être évitée en incluant:

SetEnv proxy-initial-not-pooled 1

Ce qui empêche Apache d'utiliser une connexion groupée s'il s'agit d'une demande initiale.

Le document note que ce paramètre entraînera une dégradation des performances.

5
David Purdue

Vous pouvez également supprimer ce message d'erreur associé (AH01102: error reading status line from remote server) en utilisant le module Apache mod_reqtimeout et cette directive conf:

RequestReadTimeout header=30

Vous devrez probablement activer le module reqtimeout, comme suit:

$ Sudo a2enmod reqtimeout
$ Sudo Apache2ctl restart
0
Martlark