502 Bad Gateway
사용법
502 Bad Gateway 상태 코드는 서버가 업스트림 서버를 위한 프록시나 게이트웨이로 동작하고 있음을 뜻합니다. HTTP 요청을 전달한 뒤, 업스트림 서버가 유효하지 않은 응답을 반환한 것입니다. 이 문제를 해소하는 데 걸리는 시간은 예측할 수 없습니다.
오리진 서버가 HTTP 오류 상태 코드를 반환하면, 문제를 가장 정확히 설명하기 위해 동일한 상태 코드와 관련 정보가 클라이언트로 전달되는 것이 바람직합니다.
프록시가 업스트림 서버로부터 아무런 응답도 받지 못했다면 504 Gateway Timeout 상태 코드가 더 적절합니다.
참고
502 Bad Gateway는 프록시가 백엔드로부터 유효하지 않은 응답을 받았다는 뜻입니다. 백엔드가 응답은 했지만 그 응답의 형식이 잘못되었거나 예상 밖이었던 것입니다. 504 Gateway Timeout은 타임아웃 시간 안에 백엔드가 전혀 응답하지 않았다는 뜻입니다. 502는 백엔드의 크래시나 프로토콜 오류를, 504는 느리거나 도달할 수 없는 백엔드를 가리킵니다. 두 코드 모두 클라이언트가 잘못했다는 뜻은 아닙니다.
SEO 영향
Googlebot은 5xx 오류를 사이트 전체의 크롤링 속도를 일시적으로 줄이라는 신호로 취급합니다. 이전에 색인된 URL은 처음에는 유지되지만, 장애가 길어지면 Google이 색인에서 제거합니다. 502 응답과 함께 반환된 콘텐츠는 무시됩니다. 이 점에서 Google은 500, 502, 503을 동일하게 취급합니다. robots.txt 파일의 5xx 오류는 사이트의 다른 모든 페이지가 200을 반환하더라도 훨씬 심각합니다. Google은 최대 12시간 동안 크롤링을 중단한 뒤, 최대 30일까지 캐시된 사본으로 대체합니다. 오류가 계속되면 Google은 해당 사이트를 완전히 색인에서 제외합니다. Bingbot 역시 5xx 응답을 크롤링 실패로 취급합니다. 5xx 오류가 지속되면 Bing에서 색인이 이루어지지 않습니다.
예시
클라이언트가 리소스를 요청하고, 업스트림 서버가 유효하지 않은 응답을 반환했으므로 서버는 502 Bad Gateway 상태 코드로 응답합니다.
요청
GET /news HTTP/1.1
Host: example.com
응답
HTTP/1.1 502 Bad Gateway
Content-Type: text/html; charset=UTF-8
Content-Length: 134
<html>
<head>
<title>Bad Gateway</title>
</head>
<body>
<p>The server is unreachable at this time.</p>
</body>
</html>
해결 방법
먼저 /var/log/nginx/error.log나 그에 해당하는 프록시 오류 로그를 확인하세요. 로그 메시지는 업스트림 실패 양상, 즉 연결 거부, 조기 종료된 연결, 유효하지 않은 헤더 중 어느 것인지 알려 줍니다.
흔한 근본 원인과 해결책:
Apache 리버스 프록시 구성에서는 ProxyPass/ProxyPassReverse 지시문을 확인하고 mod_proxy와 mod_proxy_http가 활성화되어 있는지 확인하세요. 재시작 전에 apachectl configtest를 실행하세요.
수정을 적용한 뒤 nginx -t로 설정을 검증하고 리로드하세요.
코드 참고
.NET
HttpStatusCode.BadGateway
Rust
http::StatusCode::BAD_GATEWAY
Rails
:bad_gateway
Go
http.StatusBadGateway
Symfony
Response::HTTP_BAD_GATEWAY
Python3.5+
http.HTTPStatus.BAD_GATEWAY
Java
java.net.HttpURLConnection.HTTP_BAD_GATEWAY
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus.SC_BAD_GATEWAY
Angular
@angular/common/http/HttpStatusCode.BadGateway