500 Internal Server Error
사용법
500 Internal Server Error 상태 코드는 서버 측의 일반적인 실패를 알립니다. 이 오류의 성격이 워낙 포괄적이라 구체적인 원인은 환경에 따라 다릅니다. 웹 서버에 문제가 발생한 상황이며, 이를 해결하려면 서버 관리자가 조치해야 합니다.
이 오류는 흔히 하나 이상의 파일에 대한 권한 문제, 스크립트 타임아웃, 또는 .htaccess 파일의 손상에서 비롯됩니다. 확실한 것은 HTTP 요청이 처리되지 않았다는 사실뿐입니다.
참고
최종 사용자 입장에서 500 오류는 클라이언트의 잘못이 아닙니다. 할 수 있는 일은 기다렸다가 나중에 다시 시도하거나 사이트 관리자에게 연락하는 것뿐입니다. 대부분의 500 오류는 자원 고갈이나 배포 문제 같은 일시적인 상황에서 비롯되는 한시적인 것입니다.
참고
스택 트레이스, 데이터베이스 쿼리, 파일 경로, 프레임워크 버전을 노출하는 500 응답은 공격자에게 유용한 정보를 흘립니다. 운영 서버는 일반적인 오류 페이지를 반환하고 상세 정보는 서버 측에만 기록해야 합니다.
SEO 영향
Googlebot은 5xx 오류를 사이트 전체의 크롤링 속도를 일시적으로 줄이라는 신호로 취급합니다. 이전에 색인된 URL은 처음에는 유지되지만, 장애가 길어지면 Google이 색인에서 제거합니다. 500 응답과 함께 반환된 콘텐츠는 무시됩니다. 이 점에서 Google은 500, 502, 503을 동일하게 취급합니다. robots.txt 파일의 5xx 오류는 사이트의 다른 모든 페이지가 200을 반환하더라도 훨씬 심각합니다. Google은 최대 12시간 동안 크롤링을 중단한 뒤, 최대 30일까지 캐시된 사본으로 대체합니다. 오류가 계속되면 Google은 해당 사이트를 완전히 색인에서 제외합니다. Bingbot 역시 5xx 응답을 크롤링 실패로 취급합니다. 5xx 오류가 지속되면 Bing에서 색인이 이루어지지 않습니다.
예시
클라이언트가 리소스를 요청하고, 서버는 요청이 처리되지 않을 것임을 나타내는 500 Internal Server Error 상태 코드로 응답합니다.
요청
GET /news.html HTTP/1.1
Host: example.com
응답
HTTP/1.1 500 Internal Server Error
Content-Type: text/html; charset=UTF-8
Content-Length: 139
<html>
<head>
<title>Request Failed</title>
</head>
<body>
<p>The request failed due to a server error.</p>
</body>
</html>
해결 방법
오류 로그에서 시작하세요. nginx에서는 /var/log/nginx/error.log를, Apache에서는 /var/log/apache2/error.log나 /var/log/httpd/error_log를 확인하세요. 로그 항목에는 거의 언제나 실패한 파일과 줄 번호가 적혀 있습니다.
흔한 근본 원인과 해결책:
원인을 찾아낸 뒤에는 수정 사항을 배포하고 오류 로그에서 재발 여부를 모니터링하세요. 사용자가 신고하기 전에 500 급증을 잡아낼 수 있도록 로그 알림을 설정하세요.
코드 참고
.NET
HttpStatusCode.InternalServerError
Rust
http::StatusCode::INTERNAL_SERVER_ERROR
Rails
:internal_server_error
Go
http.StatusInternalServerError
Symfony
Response::HTTP_INTERNAL_SERVER_ERROR
Python3.5+
http.HTTPStatus.INTERNAL_SERVER_ERROR
Java
java.net.HttpURLConnection.HTTP_INTERNAL_ERROR
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus.SC_SERVER_ERROR
org.apache.hc.core5.http.HttpStatus.SC_INTERNAL_SERVER_ERROR
Angular
@angular/common/http/HttpStatusCode.InternalServerError