728x90
728x90
2xx 코드 : 성공응답
- 200 : ok, 정상
- 204 : No Content, 삭제에 대한 응답코드
- 206 : Range, 헤더를 지정한 요청에 대한 응답코드
3xx 코드 (Redirection 응답) : request가 완료하기 위해서 추가 동작필요
- 301 : Moved Permanently
영구적으로 URI가 변경됨 - 302 : Found
일시적으로 URI가 이동됨 - 304 : Not Modified, 변경없음
- 307 : Temporary Redirect, 임시적인 redirect
4xx 코드 (클라이언트 오류) : Client가 보내는 error response
- 400 : bad request, 잘못된 요청
- 원인 : 클라이언트가 잘못된 형식의 요청을 전송, 그래서 서버가 이 요청을 이해할 수 없음
- 401 : Unauthorized ,권한없음
- 의미 : 클라이언트가 요청한 응답을 받기 위해서 스스로 인증이 되지 않음
(서버에게 클라이언트가 누군지 확인되지 않은 상태)
- 의미 : 클라이언트가 요청한 응답을 받기 위해서 스스로 인증이 되지 않음
- 403 : Forbidden, 접근권한 없음
- 의미 : 클라이언트가 접근할 권리가 없다.
- 언제? 서버에게 클라이언트가 누군지 확인되었지만, 그 클라이언트는 접할 권한이 없을 때
- 원인 : AWS AWF 웹 엑세스 제어목록(웹 ACL)을 구성해서 요청이 차단됨.
- 404 : Not Found, 요청내용을 찾을 수 없음
- 의미 : 서버가 요청받은 리소스를 찾을 수 없다.
- 언제? 브라우저입장에선 알려지지 않은 URL일때,
또는 API에서 endpoint는 올바른 곳이지만, 리소스 자체가 존재하지 않을 때
- 408 : Request Timeout, 요청 타임아웃
- 의미 : 클라이언트가 타임아웃이 끝나기전에 request를 보내지 않음
46x 코드 (로드밸런서 오류) : 로드밸런서가 보내는 response
- 460 : 로드밸런서의 타임아웃이 끝나기전에 클라이언트가 로드밸런서랑 연결을 끊음
- 의미 : 로드밸런서는 클라이언트가 보내는 request을 받아서 이제 response를 주려고 하는데,
유휴제한시간이 종료되기 전에 클라이언트가 먼저 연결을 종료해버림 - 조치사항 : 클라이언트의 제한시간이 로드밸런서의 타임아웃보다 큰지 확인
로드밸런서의 유휴제한시간(타임아웃)에 맞게 클라이언트의 제한시간을 늘린다
- 의미 : 로드밸런서는 클라이언트가 보내는 request을 받아서 이제 response를 주려고 하는데,
- 463 : 로드밸런서가 ip주소가 30개가 넘는 X-Forwarded-For 요청을 받았다
5xx 코드 (서버 오류) : Server가 보내는 error response
- 500 : Internal Server error, 내부 서버 오류
- 가능한 원인
- 내부로직 오류
- 로드밸런서의 보안그룹, VPC의 네트워크 ACL에 의해 액세스 허용상태인지 확인
- NAT게이트웨를 사용해서 인터넷 액세스 활성화인지 확인
- 클라이언트가 HTTP 프로토콜 없이 request를 보냄
- 로드밸런서가 redirection URL생성하지 못함
- 가능한 원인
- 501 : Not Implemented, 구현되지 않음
- 의미 : 서버가 요청을 받아서 수행하는데 필요한 기능을 지원하지 않음
- 원인 : Transfer-Encoding 헤더값이 지원하는 값(chunked 및 identity)이 아니다.
- 502 Bad Gateway, 잘못된 게이트웨이
- 의미 : 로드밸런서가 타겟대상에 TCP연결을 시도하려고 했는데, 실패해서 연결 끊음
- 가능한 원인
- 로드밸런서가 타겟대상으로 부터 예기치 않음 응답(호스트에 연결할 수 없음)을 받음
- 로드밸런서가 response를 주려고 대기하고 있는데 타겟대상이 연결을 종료함 (TCP RST/ FIN패킷받음)
- 조치사항
- 로드밸런서 서브넷부터 대상포트의 대상에 이르기까지 트래픽 허용여부 점검
- 타겟 대상의 연결유지 기간이 로드밸런서의 유휴제한시간(타임아웃시간)보다 짧은지 확인
- 503 Service Unavailable, 서비스 불가
- 의미 : 서버가 요청을 처리할 준비가 되지 않았다.
- 원인 : 로드밸런서의 대상그룹에 등록된 대상이 없을때
- 언제? 서버가 유지보수를 위해 작동이 중단되거나 과부하가 걸렸을 때
- 504 Gateway Timeout, 게이트웨이 제한시간
- 의미 : 타임아웃이 만료되서 서버가 제 시간에 응답을 받지 못했다.
- 가능한원인
- 연결제한시간이 만료되기 전에 로드밸런서가 타겟대상에 연결하지 못함
- 로드밸런서가 타겟대상에 연결까진 했지만, 유휴제한시간(타임아웃) 안에 타겟대상에서 응답을 못받음
- 타겟대상이 body보다 큰 header를 리턴해서, 이걸 받는 동안 시간초과
- 언제? Reverse Proxy Server에서 해당 프록시(upstream)과 통신이 오래걸려서, 지정한 제한시간 초과할때 발생
- 예를 들어?
Reverse Proxy Server인 Nginx가 upstream인 Python과 연결하는 시간을 60초로 지정함
즉, Nginx는 Python으로 부터 response를 60초만 기다리겠다.
이보다 오래걸리면 연결 끊고, 타임아웃 처리(504 error) - gateway 타임아웃 종류
- connect_timeout(디폴트 : 60초) : upstream과 연결이 지연되는 경우
TCP/IP에서 3way handshake 방식으로 패킷을 받는 시간이 connect_timeout을 초과했을 경우 - send_timeout(디폴트 : 60초) : 프록시 연결후 데이터 전송이 지연되는 경우
파일을 업로드하는 속도가 느려서 send_timeout를 초과했을 경우 - read_timeout(디폴트 : 60초) : upstream과 정상연결, 요청도 잘 보냈지만, 응답을 받는게 오래걸림
백엔드 서버가 느리거나, 복잡한 작업을 하거나, 기타이유로 지연
- connect_timeout(디폴트 : 60초) : upstream과 연결이 지연되는 경우
- AWS ELB의 Timeout
- send_timeout, read_timeout 디폴트값 60초 (idle timout)
참고
https://brunch.co.kr/@leedongins/65
504 코드
https://blog.lael.be/post/9251
https://atinjin.blogspot.com/2018/04/aws-elb-504-error.html
728x90
반응형
'🌱 Computer Science > Network' 카테고리의 다른 글
[NetWork/Web] HTTP통신 VS 소켓통신 (0) | 2020.04.11 |
---|---|
[NetWork/Web] HTTP 동작방식(웹브라우저-웹서버) IP/TCP/HTTP (0) | 2020.04.11 |
[NetWork] TCP/IP 프로토콜과 OS 7 Layer (0) | 2020.04.10 |
[NetWork] 동기(sync) vs 비동기(async) (0) | 2020.01.25 |
[NetWork/Web] 쿠키와 세션차이점 (+캐시) (0) | 2020.01.17 |
[NetWork/Web] get방식 vs post방식 차이점 (0) | 2020.01.17 |