Apache 또는 NGINX를 실행하는 인스턴스를 ELB(Elastic Load Balancing)에 대한 백엔드 서버로 사용하려고 합니다. 최상의 성능을 위해 어떤 설정을 사용해야 합니까?

최상의 로드 밸런서 설정은 사용 사례에 따라 달라집니다. 최상의 성능을 위해서는 백엔드 애플리케이션의 응답 시간 및 클라이언트 요구 사항을 분석해야 합니다.

백엔드에서 Apache 또는 NGINX를 실행 중인 경우 다음 파라미터가 요청 처리에 영향을 줄 수 있습니다.
참고: 구성을 업데이트한 후 Apache 또는 NGINX를 다시 시작합니다.

클라이언트 헤더 제한 시간(Apache의 경우 Timeout, NGINX의 경우 client_header_timeout)
로드 밸런서가 유휴 연결을 제대로 종료할 수 있도록 애플리케이션 제한 시간을 로드 밸런서의 유휴 제한 시간 값보다 큰 값으로 설정합니다. 백엔드 서버가 로드 밸런서에 제대로 알리지 않고 연결을 종료하는 경우 504 오류가 발생할 수 있습니다.

연결 유지(Apache의 경우 KeepAlive, NGINX의 경우 keepalive_disable)
CPU 사용률을 줄이고 응답 시간을 개선하기 위해 연결 유지를 설정합니다. 연결 유지가 설정되어 있으면 로드 밸런서에서 HTTP 요청마다 새 TCP 연결을 설정하지 않아도 됩니다.

연결 유지 제한 시간(Apache의 경우 KeepAliveTimeout, NGINX의 경우 keepalive_timeout)
연결 유지 옵션이 설정되면 애플리케이션 제한 시간보다 긴 연결 유지 제한 시간을 선택합니다.

읽기 제한 시간(Apache의 경우 RequestReadTimeout, NGINX의 경우 client_header_timeoutclient_body_timeout)
로드 밸런서에서 요청의 헤더와 본문 모두를 수신이 가능하고 오래 연결이 열린 상태를 유지할 수 있도록 애플리케이션 응답 시간에 맞는 읽기 제한 시간을 설정합니다.

경고: 로드 밸런서 유휴 제한 시간 값이 백엔드 제한 시간보다 작도록 합니다.

연결 유지 요청의 최대 개수(Apache의 경우MaxKeepAliveRequests, NGINX의 경우keepalive_requests)
이 옵션은 연결 유지가 설정되어 있을 때 단일 TCP 연결에서 처리하는 요청 수를 설정합니다. 리소스를 최적으로 사용하려면 연결 유지 요청의 최대 개수를 100 이상으로 설정합니다.

AcceptFilter(Apache의 경우AcceptFilter, iNGINX의 경우 accept_filter)
AcceptFilter는 기본적으로 사용되며 Apache에서 연결에 TCP_DEFER_ACCEPT 옵션을 사용하도록 지정합니다. 이 설정을 사용하면 TCP 소켓이 "절반 정도 열린" 상태가 될 수 있습니다. 이 경우 로드 밸런서는 연결이 설정되었지만 백엔드 인스턴스에는 연결이 설정되어 있지 않다고 믿습니다. 절반 정도 열린 상태의 연결은 연결이 사용되기 전에 만료될 수 있는 적은 용량의 로드 밸런서에서 더 일반적입니다.

로깅
Apache에서 각 요청에 대한 로그에 ELB x-forwarded-for 헤더를 표시하도록 %{X-Forwarded-For}i 옵션을 설정합니다. 이 헤더에는 원래 클라이언트의 IP 주소가 포함됩니다. %D 옵션은 액세스 로그에 대한 각 요청을 완료하는 데 걸리는 시간을 추가합니다.

LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b %D \"%{Referer}i\" \"%{User-Agent}i\"" combined

페이지 내용이 도움이 되었습니까? | 아니요

AWS 지원 지식 센터로 돌아가기

도움이 필요하십니까? AWS 지원 센터를 방문하십시오.

게시된 날짜: 2016년 7월 19일

업데이트된 날짜: 2018년 7월 31일