Erro intermitente ao usar mod_proxy para fazer proxy reverso para o serviço SOAP

16

Eu recebo esse erro a cada poucos minutos ao usar o mod_proxy como um proxy reverso para um serviço da web SOAP. Há provavelmente 3 ou 4 solicitações por segundo, então estamos falando em torno de 1 ou 2 de cada mil que apresentam esse erro.

[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

Isso faz com que a solicitação falhe. Se eu tiver o cliente se conectar diretamente ao servidor soap sem usar o proxy, o sucesso é 100%, então o problema parece estar no proxy

A configuração é assim. O objetivo é alternar para um servidor de backup, se o principal não estiver disponível:

<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 

Alguém se deparou com isso e encontrou uma correção? Há algumas menções nos relatórios de erros, mas não há soluções. A única coisa que pode ser incomum é que a solicitação do cliente pode ter 100 MB ou mais, portanto, a solicitação pode demorar um pouco mais do que você esperaria para uma chamada SOAP.

    
por JOTN 28.11.2010 / 17:21

3 respostas

26

No caso de alguém se deparar com isso. Este é um bug no mod_proxy que pode ser evitado colocando estas linhas no seu httpd.conf:

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

link

Para informações sobre essas variáveis, consulte a mod_proxy documentação . Eles têm uma seção específica, Protocolo de Ajuste, que trata dessas variáveis.

    
por 04.12.2010 / 01:05
5

Anote a documentação do Apache aqui: link

Parece que existe uma condição de corrida em mod_proxy_http, mas isso pode ser evitado incluindo:

SetEnv proxy-initial-not-pooled 1

O que impede que o Apache use uma conexão em pool se esta for uma solicitação inicial.

O documento não nota que essa configuração causará um downgrade de desempenho.

    
por 18.03.2013 / 02:52
0

Você também pode suprimir esta mensagem de erro relacionada ( AH01102: error reading status line from remote server ) usando o módulo do apache mod_reqtimeout e esta diretiva conf:

RequestReadTimeout header=30

Você provavelmente precisará ativar o módulo reqtimeout da seguinte forma:

$ sudo a2enmod reqtimeout
$ sudo apache2ctl restart
    
por 17.05.2018 / 06:22