мы используем Apache и Jetty для установки компонентов за брандмауэром. Некоторые действия требуют времени (10-15 минут). Apache - это прокси, а Jetty - цель прокси на некоторых машинах. Все работает нормально для действий, которые занимают менее 5 минут. Действия, занимающие более 5 минут, завершаются ошибкой прокси 502.
Я видел несколько похожих тем, и совет состоял в том, чтобы определить тайм-аут и поддержку активности - и то, и другое не помогло.
наша установка ist:
Windows 2012R2 Apache 2.4.9 Jetty 7
Сначала я забыл упомянуть, что между apache и Jetty есть брандмауэр.
В apache httpd.conf у нас есть:
ProxyPassMatch ^/([a-z0-9\-]+)/(.+)$ http://$1:3000/$2 timeout=3000 ttl=3000 Keepalive=On
Мы надеялись, что таймаут = 3000 (3000 секунд) заставит Apache ждать ответа от Jetty около 50 минут. Keepalive и ttl - это испытания ...
В Jetty мы вызываем простой скрипт Groovy, который просто сидит и ждет в течение долгого времени. Если время ожидания невелико, это работает должным образом. Если время ожидания превышает 5 минут, мы получаем ошибку:
Apache Access: (запрос начинается в 17:25)
xxx.xxx.xxx.xxx- - [02/Apr/2016:17:25:47 +0200] "GET /server/scripts/waitlong.groovy HTTP/1.1" 502 445 "-" 300509428 "-" "10.119.1.20" 10.119.1.20 3000
Как вы можете видеть, продолжительность составляет около 5 минут ~ 300509428 и, следовательно, тайм-аут - он должен длиться 10 минут.
Ошибка Apache: (время ожидания запроса истекает в 17:30)
[Sat Apr 02 17:30:47.815050 2016] [proxy_http:error] [pid 11656:tid 12736] (OS 10060)A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. : [client 10.119.1.20:60466] AH01102: error reading status line from remote server w-bidb1hf:3000
[Sat Apr 02 17:30:47.815050 2016] [proxy:error] [pid 11656:tid 12736] [client 10.119.1.20:60466] AH00898: Error reading from remote server returned by /w-bidb1hf/scripts/waitlong.groovy
Любые идеи, как сделать, чтобы Apache ждал дольше?
Вы можете попробовать использовать кавычки вокруг регулярного выражения и URL-адреса, как указано в Документация Apache, оставляя пары ключ-значение без кавычек.
пример
ProxyPass "/ пример" "http://backend.example.com"max = 20 ttl = 120 retry = 300
Может случиться так, что без кавычек сервер не читает ProxyPassMatch, как вы предполагали, и не распознает, где заканчиваются основные параметры и начинаются значения ключей.