
AWSのApplication Load Balancer (ALB) を導入してWebサイトの負荷分散を行っているけれど、バックエンドのApacheサーバーの設定は最適化されていますか?ALBとApacheを連携させる場合、適切なApacheのパラメータ設定を行うことで、パフォーマンスの向上やセキュリティの強化に繋がります。この記事では、「ALBとバックエンドのApacheパラメータについて」、特にALB環境下でApacheを設定する際に推奨されるパラメータを初心者にも分かりやすく解説します。
ALB導入時にApacheの設定が重要な理由
ALBはクライアントからのリクエストをバックエンドのApacheサーバーに分散しますが、その際にいくつかの情報がHTTPヘッダーとして追加されます。Apache側でこれらの情報を適切に処理するための設定を行わないと、以下のような問題が発生する可能性があります。
- クライアントIPアドレスの誤認識: ApacheのアクセスログにALBのIPアドレスしか記録されず、本来のクライアントIPアドレスが分からなくなる。
- HTTPSリクエストの処理: クライアントとALB間はHTTPSで通信していても、ALBからApacheへの通信がHTTPの場合、Apache側でHTTPSのリクエストであることを認識できない。
- セキュリティ上のリスク: 不適切な設定は、セキュリティ上の脆弱性を生む可能性がある。
これらの問題を解決し、ALBとApacheの連携を最適化するために、適切なパラメータ設定が必要となるのです。
ALB環境下で推奨されるApacheパラメータ
ここでは、「ALBとバックエンドのApacheパラメータについて」、特に設定しておきたい推奨パラメータをいくつかご紹介します。
1. mod_remoteip の設定
ALBは、クライアントのIPアドレスを X-Forwarded-For
ヘッダーに追加してApacheに転送します。Apacheでこのヘッダーを認識し、アクセスログなどにクライアントのIPアドレスを記録するためには、mod_remoteip
モジュールを有効にし、設定を行う必要があります。
- 設定例 (httpd.conf または対応する設定ファイル):
LoadModule remoteip_module modules/mod_remoteip.so
<IfModule remoteip_module>
RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy <ALBのIPアドレスまたはCIDR>
</IfModule>
- 解説:
LoadModule remoteip_module modules/mod_remoteip.so
:mod_remoteip
モジュールをロードします。RemoteIPHeader X-Forwarded-For
: クライアントのIPアドレスが格納されているヘッダーを指定します。RemoteIPInternalProxy <ALBのIPアドレスまたはCIDR>
: 信頼できるプロキシ(ここではALB)のIPアドレスまたはCIDR範囲を指定します。これにより、指定したIPアドレスからのX-Forwarded-For
ヘッダーを信頼し、クライアントIPアドレスとして認識します。セキュリティ上、ALBのIPアドレスのみを指定するようにしてください。
- 注意点: ALBのIPアドレスは変動する可能性があるため、AWSのドキュメントなどを参照し、最新の情報を確認するようにしてください。
2. LogFormat の設定
mod_remoteip
を設定後、アクセスログにクライアントのIPアドレスを記録するように LogFormat
を変更します。
- 設定例 (httpd.conf または対応する設定ファイル):
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" proxy
- 解説:
- 従来の
%h
(ホスト名)の代わりに、%{X-Forwarded-For}i
を使用することで、X-Forwarded-For
ヘッダーに格納されたクライアントIPアドレスをログに記録できます。 - 必要に応じて、ALB経由のリクエストと直接のリクエストで異なるログ形式を定義することも可能です。
- 従来の
3. ProxyPreserveHost On の設定 (必要に応じて)
ProxyPreserveHost On
ディレクティブを設定すると、ALBがApacheに転送する際に、オリジナルのHostヘッダーを保持します。複数のドメインを同じApacheサーバーでホストしている場合などに必要となることがあります。
- 設定例 (<VirtualHost>ディレクティブ内):
<VirtualHost *:80>
ServerName example.com
ProxyPreserveHost On
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
</VirtualHost>
- 解説:
ProxyPreserveHost On
を設定することで、クライアントがリクエストしたHostヘッダーがバックエンドのApacheにそのまま転送されます。
4. Timeout 関連の設定
ALBにはアイドルタイムアウトの設定があります。Apacheの Timeout
ディレクティブや KeepAliveTimeout
ディレクティブをALBのタイムアウト設定に合わせて調整することで、予期せぬ接続断を防ぐことができます。
- 推奨: ALBのアイドルタイムアウト設定(デフォルトは60秒)よりも大きく設定することを推奨します。
- 参照: https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/application/edit-load-balancer-attributes.html#connection-idle-timeout
Timeout 120
KeepAliveTimeout 120
- 解説:
Timeout
は、サーバーがリクエストを受信してから応答を送信するまでの最大時間、KeepAliveTimeout
は、Keep-Alive接続が次のリクエストを待機する最大時間です。
5. KeepAlive の設定
Keep-Alive接続を有効にすることで、HTTPリクエストごとの接続確立のオーバーヘッドを減らし、パフォーマンスを向上させることができます。ALBとの連携においても、Keep-Aliveを有効にすることが推奨されます。
- 設定例 (httpd.conf または対応する設定ファイル):
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 120
- 解説:
KeepAlive On
: Keep-Alive接続を有効にします。MaxKeepAliveRequests
: 1つのKeep-Alive接続で処理する最大リクエスト数。KeepAliveTimeout
: Keep-Alive接続が次のリクエストを待機する最大時間。
セキュリティに関する注意点
X-Forwarded-For
ヘッダーはクライアントによって偽装される可能性があるため、RemoteIPInternalProxy
ディレクティブで信頼できるプロキシ(ALB)のIPアドレスを正確に指定することが非常に重要です。これにより、信頼できないIPアドレスからの X-Forwarded-For
ヘッダーを無視し、セキュリティリスクを低減できます。
まとめ
この記事では、「ALBとバックエンドのApacheパラメータについて」、ALB環境下でApacheを設定する際に推奨される主要なパラメータについて解説しました。適切な設定を行うことで、クライアントIPアドレスの正確なロギング、HTTPSリクエストの適切な処理、そしてWebサイトのパフォーマンス向上とセキュリティ強化が期待できます。ALBを導入する際は、ぜひこれらのパラメータ設定を見直し、より快適で安全なWebサイト運用を実現してください。
最後に
最後まで読んでいただきありがとうございました。この記事が、ALBとApacheの連携設定の一助となれば幸いです。
コメント