이두잉의 AWS 세상

AWS ELB 사용 시 Apache 408/503 error log

2016.12.12 13:05 - leedoing leedoing

AWS ELB와 Apache 사용 시 Apache의 Access Log에 408/50X 에러 로그가 발생되는 경우가 있습니다.

이 증상은 ELB의 idle timeout과 Apache의 mod_reqtimeout 모듈과의 충돌로 발생됩니다. 

ELB의 idle timeout은 Back-end EC2 Instance와 소켓을 재사용을 위한 timeout 시간이며, mod_reqtimeout은 웹 서버 DDOS 방어를 위한 모듈입니다. 


1. ELB Idle timeout까지 ELB는 Back-end EC2 Instance와 TCP 세션 유지

2. mod_reqtimeout은 일정 시간(default 20~40초)이 경과해도 HTTP Header를 보내지 않는 세션을 DDOS로 간주하고 차단(408 에러 발생)

3. ELB Idle timeout은 기본적으로 60초로 mod_reqtimeout 보다 길기 때문에 DDOS로 간주


따라서 mod_reqtimeout 사용을 하지 말거나, ELB의 Idle timeout을 mod_reqtimeout의 시간보다 줄여야 함.

(참고: https://httpd.apache.org/docs/trunk/mod/mod_reqtimeout.html)


비슷한 내용으로 Keep-Alive도 있습니다. 아무튼 Back-End의 세션 timeout보다 ELB의 세션 timeout 시간이 더 짧아야 합니다. (TCP든, HTTP든...)


기타 자매품 문제로 ELB는 file length가 없습니다. 그래서 파일을 업로드 하다가 60초 이상 sleep(멈춤, 중지) 하고, 재업로드 시에 에러가 발생되는 문제도 있습니다. 60초까지는 괜찮습니다. 

'Compute > ELB' 카테고리의 다른 글

AWS ELB 사용 시 Apache 408/503 error log  (0) 2016.12.12
AWS ELB Pre-warm 신청 양식  (0) 2016.01.25
AWS ELB Best Practices  (0) 2016.01.18
AWS ELB Proxy Protocol 기능 활성화 하기(TCP)  (0) 2015.11.23