Proxytimeout 지시문을 사용하여 프록시로 구성된 Apache에서 반환된 HTTP 상태 코드

Proxytimeout 지시문을 사용하여 프록시로 구성된 Apache에서 반환된 HTTP 상태 코드

프록시 서버로 구성되고 지시문이 있는 Apache 웹 서버의 동작에 대한 일반적인 질문이 있습니다.프록시 시간 초과테스트 목적으로 1초로 설정합니다.

내 백엔드(업스팀) 서버는 프록시 서버(위에서 언급한 Apache)에 응답을 보내기 위해 의도적으로 1초 이상 기다렸다가 요청을 받은 후 3초 후에 보내는 Python 내장 HTTP 서버입니다.

공식 Apache 문서에 따르면(https://httpd.apache.org/docs/2.4/mod/mod_proxy.html#proxytimeout)

프록시는 지정된 시간 동안 백엔드 서버의 응답을 기다려야 합니다.프록시 시간 초과지시어에 응답이 없으면 "시간 초과를 반환"해야 하며, 이는 내가 이해하는 한 상태 코드 504입니다. 왜냐하면 이 상태 코드의 사양에 다음과 같이 나와 있기 때문입니다.
504 게이트웨이 시간 초과 - 서버가 게이트웨이 또는 프록시 역할을 하고 있었고 업스트림 서버로부터 적시에 응답을 받지 못했습니다..

그럼에도 불구하고 프록시 서버에 요청을 보내면 프록시가 업스트림 서버로부터 잘못된 응답을 받았음을 나타내는 오류 코드 502가 반환됩니다.

그래서 나는 왜 이런 일이 일어나는지 이해하려고 노력합니다. 업스트림 서버는 괜찮지만 만료된 시간 초과로 인해 서버에 응답할 수 없는데 상태 코드가 504가 아닌 502인 이유는 무엇입니까?

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초 후에 닫히고 보낼 곳이 없기 때문에 예상되는 동작입니다. .

어쩌면 누군가가 이 행동의 원인과 그 이유를 이해하도록 도와줄 수 있을 것입니다.프록시 시간 초과문서에 따르면 Apache가 논리적인 504를 반환하지 않습니까?

미리 감사드립니다!

관련 정보