Error intermitente al usar mod_proxy para hacer proxy inverso al servicio SOAP

17

Recibo este error cada pocos minutos cuando uso mod_proxy como proxy inverso a un servicio web SOAP. Probablemente haya 3 o 4 solicitudes por segundo, por lo que estamos hablando de 1 o 2 de cada mil que tienen este error.

[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

Esto hace que la solicitud falle. Si hago que el cliente se conecte directamente al servidor de jabón sin usar el proxy, el éxito es del 100%, por lo que el problema parece estar en el proxy

La configuración se ve así. El propósito es cambiar a un servidor de respaldo si el primario no está 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 

¿Alguien se ha topado con esto y ha encontrado una solución? Hay algunas menciones en los informes de errores, pero no hay soluciones. Lo único que puede ser inusual es que la solicitud del cliente podría ser de 100 MB o más, por lo que la solicitud podría demorar un poco más de lo que esperaría para una llamada SOAP.

JOTN
fuente
La respuesta de David Purdue (SetEnv proxy-initial-not-pooled 1) es una respuesta válida hoy en día (2016).
MattBianco

Respuestas:

27

En caso de que alguien más se encuentre con esto. Este es un error en mod_proxy que se puede evitar colocando estas líneas en su httpd.conf:

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

https://issues.apache.org/bugzilla/show_bug.cgi?id=37770

Para obtener información sobre qué hacen estas variables, consulte la mod_proxydocumentación . Tienen una sección específica, Ajuste de protocolo, que aborda estas variables.

JOTN
fuente
5

Tome nota de la documentación de Apache aquí: http://httpd.apache.org/docs/2.2/mod/mod_proxy_http.html

Parece que hay una condición de carrera en mod_proxy_http, pero se puede evitar incluyendo:

SetEnv proxy-initial-not-pooled 1

Lo que evita que Apache use una conexión agrupada si se trata de una solicitud inicial.

El documento sí señala que esta configuración dará una disminución de rendimiento.

David Purdue
fuente
1
proxy-initial-not-pooledsolo es efectivo si tiene un parche específico, que creo que no forma parte de httpd 2.2. No sé sobre httpd 2.4. Ver bz.apache.org/bugzilla/show_bug.cgi?id=37770#c88
kubanczyk
0

También puede suprimir este mensaje de error relacionado ( AH01102: error reading status line from remote server) utilizando el módulo apache mod_reqtimeout y esta directiva conf:

RequestReadTimeout header=30

Probablemente tendrá que habilitar el módulo reqtimeout, de la siguiente manera:

$ sudo a2enmod reqtimeout
$ sudo apache2ctl restart
Martlark
fuente