Периодическая ошибка при использовании mod_proxy для обратного прокси-сервера к службе SOAP

17

Я получаю эту ошибку каждые несколько минут при использовании mod_proxy в качестве обратного прокси-сервера для веб-службы SOAP. Вероятно, в секунду происходит 3 или 4 запроса, поэтому мы говорим об 1 или 2 из каждой тысячи, у которых есть эта ошибка.

[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

Это приводит к сбою запроса. Если у меня есть клиент, подключающийся напрямую к серверу мыла без использования прокси, успех составляет 100%, поэтому проблема заключается в прокси

Конфигурация выглядит следующим образом. Цель состоит в том, чтобы переключиться на резервный сервер, если основной недоступен:

<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 

Кто-нибудь сталкивался с этим и нашел исправление? В сообщениях об ошибках есть некоторые упоминания, но нет решений. Единственное, что может быть необычным, - это то, что запрос клиента может быть размером 100 МБ или более, поэтому запрос может занять немного больше времени, чем можно было бы ожидать для вызова SOAP.

JOTN
источник
Ответ Дэвида Пердью (SetEnv proxy-initial-not-pooled 1) является действительным ответом в настоящее время (2016).
MattBianco

Ответы:

27

В случае, если кто-то еще сталкивается с этим. Это ошибка в mod_proxy, которую можно избежать, поместив эти строки в ваш httpd.conf:

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

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

Для информации о том, что эти переменные, смотрите mod_proxyдокументацию . У них есть специальный раздел, «Настройка протокола», в котором рассматриваются эти переменные.

JOTN
источник
5

Обратите внимание на документацию Apache здесь: http://httpd.apache.org/docs/2.2/mod/mod_proxy_http.html.

Кажется, в mod_proxy_http есть условие гонки, но этого можно избежать, включив:

SetEnv proxy-initial-not-pooled 1

Что мешает Apache использовать пул соединений, если это начальный запрос.

В документе отмечается, что этот параметр приведет к снижению производительности.

Дэвид Пердью
источник
1
proxy-initial-not-pooledэффективен только в том случае, если у вас есть определенный патч, который, я считаю, не является частью httpd 2.2. Я не знаю о httpd 2.4. См. Bz.apache.org/bugzilla/show_bug.cgi?id=37770#c88
kubanczyk
0

Вы также можете подавить это сообщение об ошибке ( AH01102: error reading status line from remote server) с помощью модуля apache mod_reqtimeout и этой директивы conf:

RequestReadTimeout header=30

Вам, вероятно, придется включить модуль reqtimeout, как показано ниже:

$ sudo a2enmod reqtimeout
$ sudo apache2ctl restart
Martlark
источник