ELB のバックエンドサーバーとして Apache または NGINX を使用するための最適な設定を教えてください。

最終更新日: 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 はデフォルトで有効になっており、接続に TCP_DEFER_ACCEPT オプションを使用するよう Apache に指示します。この設定では、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 を再起動します。


この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?