AWS ELB와 Apache 사용 시 Apache의 Access Log에 408/50X 에러 로그가 발생되는 경우가 있다.
이 증상은 ELB의 idle timeout과 Apache의 mod_reqtimeout 모듈과의 충돌로 발생된다.
ELB의 idle timeout은 Back-end EC2 Instance와 세션 유지를 위한 timeout 시간이며, mod_reqtimeout은 웹 서버 보안 모듈이다.
1. ELB Idle timeout까지 ELB는 Back-end EC2 Instance와 TCP 세션 유지
2. mod_reqtimeout은 일정 시간(default 20~40초)이 경과해도 probe를 보내지 않는 세션을 공격으로 간주하고 차단(408 에러 발생)
3. ELB Idle timeout은 기본적으로 60초로 mod_reqtimeout 보다 길기 때문에 공격으로 간주
따라서 mod_reqtimeout 사용을 하지 말거나, ELB의 Idle timeout을 mod_reqtimeout의 시간보다 줄여야 함.
참고
Back-End의 세션 timeout보다 ELB의 세션 timeout 시간이 더 짧아야 한다.
기타 자매품 문제로 ELB는 file length가 없습니다. 그래서 파일을 업로드 하다가 60초 이상 sleep(멈춤, 중지) 하고, 재업로드 시에 에러가 발생되는 문제도 있다. 60초까지는 괜찮다.
추가로 CloudFront, API Gateway와 같은 End point 서비스를 Proxy 형태로 사용할 리는 없지만... 저 서비스들의 TCP Keep Alive 시간은 45초이다. (AWS 공식은 아니고, 테스트 시 나온 내용임을 참고)
'Compute > ELB' 카테고리의 다른 글
AWS Network Load Balancer(NLB) 동작 방식과 주의사항 (0) | 2022.09.01 |
---|---|
AWS ELB WebSocket 사용 시 헬스체크 방안 (0) | 2021.07.06 |
AWS ELB Backend Connection Errors (1) | 2018.05.17 |
AWS ELB Pre-warm 신청 양식 (0) | 2016.01.25 |
AWS ELB Proxy Protocol 기능 활성화 하기(TCP) (0) | 2015.11.23 |