Apache 또는 NGINX를 ELB의 백엔드 서버로 사용하기 위한 최적의 설정은 무엇입니까?

최종 업데이트 날짜: 2021년 3월 17일

Apache 또는 NGINX를 실행하는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 Elastic Load Balancing의 백엔드 서버로 사용하려고 합니다. 최상의 성능을 얻으러면 어떤 설정을 사용해야 합니까?

해결 방법

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

백엔드 애플리케이션에서 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, NGINX의 경우 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

참고: 구성을 업데이트한 후 Apache 또는 NGINX를 다시 시작합니다.


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?