Apache 또는 NGINX를 실행하는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 Elastic Load Balancing(ELB)의 백엔드 서버로 사용하려고 합니다. 최상의 성능을 제공하는 설정을 알고 싶습니다.
해결 방법
최상의 성능을 위해 백엔드 애플리케이션 응답 시간과 클라이언트 요구 사항을 분석하십시오.
클라이언트 헤더 제한 시간
백엔드 서버가 연결을 닫고 로드 밸런서에 알리지 않으면 Application Load Balancer에 대한 HTTP 502 오류가 발생할 수 있습니다. Classic Load Balancer의 경우 HTTP 504 오류가 발생합니다.
유휴 연결을 방지하려면 애플리케이션 제한 시간을 유휴 제한 시간 값보다 높은 값으로 설정하십시오. Apache에 대한 애플리케이션 제한 시간을 구성하려면 Apache 웹 사이트의 TimeOut 지시문을 참조하십시오. NGINX의 경우 NGINX 웹 사이트에서 client_header_timeout을 참조하십시오.
연결 유지
CPU 사용량을 줄이고 응답 시간을 개선하려면 연결 유지를 활성화하십시오. 연결 유지를 활성화하면 로드 밸런서가 모든 HTTP 요청에 대해 새로운 TCP 연결을 설정하지 않습니다.
Apache에 대한 연결 유지를 활성화하려면 Apache 웹 사이트의 KeepAlive 지시문을 참조하십시오. NGINX에서 연결 유지를 활성화하려면 keepalive_disable을 없음으로 설정하십시오. 자세한 내용은 NGINX 웹 사이트의 keepalive_disable을 참조하십시오.
연결 유지 옵션을 활성화할 때는 로드 밸런서 유휴 제한 시간보다 긴 연결 유지 제한 시간을 선택하십시오. Apache에서 제한 시간을 구성하려면 Apache 웹 사이트의 KeepAliveTimeout 지시문을 참조하십시오. NGINX의 경우 NGINX 웹 사이트에서 keepalive_timeout을 참조하십시오.
읽기 제한 시간
애플리케이션 응답 시간에 맞는 읽기 제한 시간을 설정하십시오. 로드 밸런서는 요청의 헤더와 본문을 모두 수신할 수 있을 만큼 오랫동안 연결을 열린 상태로 유지해야 합니다.
참고: 로드 밸런서 유휴 제한 시간 값이 백엔드 제한 시간보다 작아야 합니다.
Apache에서 요청 읽기 제한 시간을 설정하려면 RequestReadTimeout 지시문을 참조하십시오. NGINX에서 클라이언트 헤더 제한 시간을 설정하려면 NGINX 웹 사이트의 client_header_timeout을 참조하십시오. NGINX의 클라이언트 본문 제한 시간은 NGINX 웹 사이트에서 client_body_timeout을 참조하십시오.
최대 연결 유지 요청 수
연결 유지를 활성화할 때 단일 TCP 연결이 제공하는 요청 수를 100 이상으로 설정하십시오. Apache에서 요청 수를 설정하려면 Apache 웹 사이트의 MaxKeepAliveRequests 지시문을 참조하십시오. NGINX의 경우 NGINX 웹 사이트에서 keepalive_requests를 참조하십시오.
AcceptFilter
기본적으로 AcceptFilter는 활성화되어 있습니다. AcceptFilter는 Apache가 연결에 TCP_DEFER_ACCEPT 옵션을 사용하도록 지시하며, 이로 인해 TCP 소켓이 절반 열린 상태로 유지될 수 있습니다. TCP 소켓이 절반 열린 상태로 유지되면 로드 밸런서는 연결이 설정된 것으로 가정하지만 백엔드 인스턴스는 연결을 완전히 설정하지 않습니다. 절반 열린 연결은 연결이 사용 전에 유휴 상태인 저용량 로드 밸런서에서 더 일반적입니다.
Apache에서 AcceptFilter를 설정하려면 Apache 웹 사이트의 AcceptFilter 지시문을 참조하십시오. NGINX의 경우 NGINX 웹 사이트에서 listen을 참조하십시오.
로깅
Apache가 각 요청의 로그에 ELB x-forwarded-for 헤더를 표시하도록 %{X-Forwarded-For}i 옵션을 활성화하려면 다음 명령을 실행하십시오.
LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b %D \"%{Referer}i\" \"%{User-Agent}i\"" combined
ELB x-forwarded-for 헤더는 원래 클라이언트의 IP 주소를 포함합니다. %D 옵션은 각 요청을 완료하는 데 필요한 시간을 액세스 로그에 추가합니다.
Apache MPM
Apache 이벤트 MPM(다중 처리 모듈)이 로드 밸런서의 연결을 조기에 종료하여 Application Load Balancer에 HTTP 502 오류가 발생할 수 있습니다. Classic Load Balancer의 경우 HTTP 504 오류가 발생합니다.
대신 워커 MPM을 사용하는 것이 가장 좋습니다.
참고: 구성을 업데이트한 후 Apache 또는 NGINX를 다시 시작하십시오.
관련 정보
Classic Load Balancer에 등록된 인스턴스
Classic Load Balancer 구성