![Код статуса HTTP, возвращаемый Apache, настроенным как прокси-сервер с директивой proxytimeout](https://rvso.com/image/1586926/%D0%9A%D0%BE%D0%B4%20%D1%81%D1%82%D0%B0%D1%82%D1%83%D1%81%D0%B0%20HTTP%2C%20%D0%B2%D0%BE%D0%B7%D0%B2%D1%80%D0%B0%D1%89%D0%B0%D0%B5%D0%BC%D1%8B%D0%B9%20Apache%2C%20%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%BD%D1%8B%D0%BC%20%D0%BA%D0%B0%D0%BA%20%D0%BF%D1%80%D0%BE%D0%BA%D1%81%D0%B8-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%20%D1%81%20%D0%B4%D0%B8%D1%80%D0%B5%D0%BA%D1%82%D0%B8%D0%B2%D0%BE%D0%B9%20proxytimeout.png)
У меня есть общий вопрос о поведении веб-сервера Apache, который настроен как прокси-сервер и имеет директивуProxyTimeoutдля целей тестирования установлено значение 1 секунда.
Мой внутренний (upsteam) сервер — это встроенный HTTP-сервер Python, который намеренно ждет дольше 1 секунды, чтобы отправить ответ прокси-серверу (вышеупомянутому Apache), и отправляет его через 3 секунды после получения запроса.
Согласно официальной документации Apache(https://httpd.apache.org/docs/2.4/mod/mod_proxy.html#proxytimeout)
прокси должен ждать ответа от внутреннего сервера в течение времени, указанного вProxyTimeoutдиректива, и если ответа нет, она должна «возвратить тайм-аут», что, насколько я понимаю, является кодом состояния 504, поскольку спецификация этого кода состояния гласит:
504 Gateway Timeout — сервер действовал как шлюз или прокси-сервер и не получил своевременного ответа от вышестоящего сервера..
Тем не менее, когда я отправляю запросы на прокси-сервер, он возвращает код ошибки 502, который указывает на то, что прокси-сервер получает недопустимый ответ от вышестоящего сервера.
Итак, я пытаюсь понять, почему это происходит. Почему код статуса 502 вместо 504, когда с вышестоящим сервером все в порядке, он просто не может ответить серверу из-за истекшего таймаута?
Журналы ошибок Apache корректно сообщают:
[proxy_http:error] [pid 6040] (70007)The timeout specified has expired: [client 192.168.56.1:53331] AH01102: error reading status line from remote server 127.0.0.1:8080"
Вышестоящий сервер бэкэнда выдает ошибку BrokenPipeError, которую я перехватываю в исключении и не допускаю сбоя, поэтому, насколько мне известно, это не должно быть ошибкой сервера, а скорее ожидаемым поведением, поскольку соединение закрывается через 1 секунду, и отправлять его некуда.
Может быть, кто-то поможет мне понять, что может быть причиной такого поведения и почемуProxyTimeoutне заставляет Apache возвращать ошибку 504, что логично согласно документации?
Заранее спасибо!