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

3분 분량
0

Apache 또는 NGINX를 실행하는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 Elastic Load Balancing(ELB)의 백엔드 서버로 사용하려고 합니다. 그런데 최상의 성능을 얻으려면 어떤 설정을 사용해야 할지 모르겠습니다.

해결 방법

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

백엔드 애플리케이션에서 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: Apache MPM 이벤트 모듈은 로드 밸런서의 연결을 조기에 종료할 수 있습니다. 연결을 조기에 닫으면 Application Load Balancer에 HTTP 502 오류가 발생하고 Classic Load Balancer에 HTTP 504 오류가 발생합니다. MPM 작업자 모듈을 대신 사용하여 이 동작을 줄이는 것이 가장 좋습니다.

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


관련 정보

Classic Load Balancer를 위한 등록된 인스턴스

Classic Load Balancer 구성

AWS 공식
AWS 공식업데이트됨 3달 전