Что есть и работает:
я использую Apache HTTPD 2.2 для запросов прокси. У меня несколько ProxyPass сопоставления:
ProxyRequests On
<Proxy *>
AddDefaultCharset off
Order deny,allow
Allow from all
</Proxy>
ProxyPreserveHost Off
ProxyPass /a http://some_ip/
ProxyPassReverse /a http://some_ip/
ProxyPass /b http://some_other_ip/
ProxyPassReverse /b http://some_other_ip/
...
Это хорошо работает.
Что я хочу:
Некоторые из моих запросов занимают больше времени, поэтому время ожидания истекло, и я получил Ошибка прокси - причина: ошибка чтения с удаленного сервера.
Я хочу установить timeout
на все мои запросы. Могу ли я сделать это, не добавляя timeout=... KeepAlive=On
для каждого ProxyPass
отображение?
У меня сейчас что-то вроде:
ProxyPass /a http://some_ip/ timeout=1200 KeepAlive=On
ProxyPassReverse /a http://some_ip/
ProxyPass /b http://some_other_ip/ timeout=1200 KeepAlive=On
ProxyPassReverse /b http://some_other_ip/
... and i do this for all my ProxyPass mappings
Могу ли я каким-то образом сказать Apache добавить timeout
и KeepAlive
параметры для всех сопоставлений? Заранее спасибо.
Редактировать: Я также пробовал использовать mod_reqtimeout директиву напрямую, но это не помогло мне:
LoadModule reqtimeout_module modules/mod_reqtimeout.so
RequestReadTimeout header=1200 body=1200
Согласно документации Apache, если ProxyTimeout директива конфигурации не указано, настройка global / vhost для Тайм-аут используется и действует. Итак, если серверная часть занимает больше времени, чем Тайм-аут секунд, Apache закроет соединение (!).
Так что хотя ProxyTimeout имеет значение по умолчанию 300, вам в любом случае нужно указать его, чтобы убедиться, что он действует.
Мне удалось найти решение самостоятельно. Вы можете установить тайм-аут, используя непосредственно ProxyTimeout
директива mod_proxy
:
ProxyRequests On
<Proxy *>
AddDefaultCharset off
Order deny,allow
Allow from all
</Proxy>
ProxyPreserveHost Off
ProxyTimeout 1200