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

17

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 requêtes par seconde, donc nous parlons d'environ 1 ou 2 sur 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 peut être de 100 Mo ou plus, de sorte que la demande peut prendre un peu plus de temps que ce à quoi vous vous attendez pour un appel SOAP.

JOTN
la source
La réponse de David Purdue (SetEnv proxy-initial-not-pooled 1) est une réponse valide de nos jours (2016).
MattBianco

Réponses:

27

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=37770

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

JOTN
la source
5

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.

David Purdue
la source
1
proxy-initial-not-pooledn'est efficace que si vous avez un patch spécifique, qui, je crois, ne fait pas partie de httpd 2.2. Je ne connais pas httpd 2.4. Voir bz.apache.org/bugzilla/show_bug.cgi?id=37770#c88
kubanczyk
0

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
Martlark
la source