リスナーは接続リクエストをチェックします。Web アプリケーションやモバイルゲームなど、ご利用のアプリケーションでデータコンテンツを検査する必要がある場合は、HTTP リスナーを追加して HTTP リクエストを転送できます。
前提条件
Application Load Balancer (ALB) インスタンスが作成されていること。詳細については、「ALB インスタンスの作成と管理」をご参照ください。
バックエンドサーバーグループが作成されていること。詳細については、「サーバーグループの作成と管理」をご参照ください。
操作手順
このトピックでは、HTTP リスナーを作成する 2 つの方法について説明します。
HTTP リスナーの作成:ビジネスニーズに基づいて、詳細設定やその他の機能をカスタマイズできます。
クイック作成:リスナープロトコル、リスニングポート、バックエンドサーバーグループのみを設定することで、HTTP リスナーを迅速に作成します。
HTTP リスナーの作成
トップナビゲーションバーで、ALB インスタンスが配置されているリージョンを選択します。
次のいずれかの方法で、リスナー設定ウィザードを開きます。
インスタンス ページで、対象インスタンスの 操作 列にある [リスナーの作成] をクリックします。
インスタンス ページで、管理したい ALB インスタンスの ID をクリックします。リスナー タブで、[リスナーの作成] をクリックします。
リスナーの設定 ステップで、次のパラメーターを設定し、[次へ] をクリックします。
リスナー設定
注
リスナープロトコルの選択
リスナープロトコルを選択します。
この例では、[HTTP] が選択されています。
リスナーポート
リクエストを受け付け、バックエンドサーバーに転送するためのリスニングポートを入力します。有効なポート値の範囲は 1 から 65535 です。通常、HTTP はポート 80 を、HTTPS はポート 443 を使用します。
説明同じ ALB インスタンス上では、リスニングポートは各プロトコルで一意である必要があります。HTTP リスナーと HTTPS リスナーは同じポートを共有できません。
この例では、80 を入力します。
リスナー名
リスナーの名前を入力します。
タグ
[タグキー] と [タグ値] を設定します。
タグを設定した後、[リスナー] タブでタグによってリスナーをフィルターできます。
詳細設定
[変更] をクリックして詳細設定を展開します。
アイドル接続タイムアウト期間
アイドル接続タイムアウトを設定します。有効値:1~600 秒。デフォルト値:15 秒。このクォータを増やすには、[Quota Center] に移動してください。
タイムアウト期間内にアクセスリクエストが到着しない場合、Server Load Balancer は現在の接続を一時的に中断し、次のリクエストが到着したときに新しい接続を確立します。
説明この機能は HTTP/2 リクエストには適用されません。
接続リクエストタイムアウト
リクエストタイムアウトを 1~600 秒の値に設定します。デフォルトは 60 秒です。クォータを増やすには、[Quota Center] でリクエストを送信してください。
バックエンドサーバーがタイムアウト期間内に応答しない場合、Server Load Balancer は待機を停止し、クライアントに HTTP 504 エラーコードを返します。
圧縮
この設定を有効にすると、特定のファイルタイプが圧縮されます。無効にすると、すべてのファイルタイプの圧縮がスキップされます。
Brotli は現在、すべてのファイルタイプの圧縮をサポートしています。
Gzip は次のファイルタイプをサポートしています:
text/xml、text/plain、text/css、application/javascript、application/x-javascript、application/rss+xml、application/atom+xml、application/xml、およびapplication/json。
説明データ圧縮は、応答の
Content-Length値が 1,024 バイトを超える場合にのみトリガーされます。クライアントリクエストが Brotli と Gzip の両方の圧縮アルゴリズムをサポートしている場合、ALB はより効率的な Brotli を使用します。
クライアントリクエストが Gzip のみをサポートし、ファイルタイプが Gzip でサポートされていない場合、ALB はファイルを圧縮しません。
実際のクライアントソース IP を見つける
ALB インスタンスが X-Forwarded-For ヘッダーから実際のクライアントソース IP を取得できるようにします。この機能を有効にした後、信頼できる IP リストを設定します。
信頼できる IP リストを
0.0.0.0/0に設定する:ALB インスタンスは、X-Forwarded-For ヘッダーの左端の IP アドレスを実際のクライアントソース IP として使用します。信頼できる IP リストを
proxy1 IP;proxy2 IP;..に設定する:ALB インスタンスは、X-Forwarded-For ヘッダーを右から左にスキャンし、信頼リストにない最初の IP アドレスを実際のクライアントソース IP として使用します。
シナリオ
X-Forwarded-For ヘッダーに複数の IP アドレスが含まれている場合 (例:
X-Forwarded-For: <client-ip-address>, <proxy1>, <proxy2>, …)、左端のアドレスが実際のクライアント IP です。ALB 転送ルールで SourceIp マッチングと QPS (クライアントソース IP に基づくレート制限) 機能を使用するには、[実際のクライアントソース IP の取得] スイッチをオンにして、ALB が X-Forwarded-For ヘッダーから実際のクライアントソース IP を識別できるようにします。詳細については、「転送ルールの追加」をご参照ください。説明Standard Edition および WAF 拡張 ALB インスタンスのみが「実際のクライアントソース IP の取得」機能をサポートしています。Basic Edition の ALB インスタンスはサポートしていません。
[追加の HTTP ヘッダーフィールド]
追加したいカスタム HTTP ヘッダーフィールドを選択します:
X-Forwarded-Forヘッダーフィールドを有効にして、クライアントの送信元 IP アドレスを取得するかどうかを選択します。[クライアント IP アドレスを保持するために X-Forwarded-For を追加]を選択した場合、ALB はリクエストをバックエンドサーバーに転送する前に、リクエストにX-Forwarded-Forヘッダーを追加するか、リクエストからX-Forwarded-Forヘッダーを削除できます。[追加] (デフォルト)
[追加] を選択した場合、ALB はリクエストをバックエンドサーバーに転送する前に、リクエストの X-Forwarded-For ヘッダーに最終ホップの IP アドレスを追加します。リクエストに X-Forwarded-For ヘッダーが含まれていない場合、ALB は値が最終ホップの IP アドレスである X-Forwarded-For ヘッダーを作成し、リクエストに追加します。リクエストの X-Forwarded-For ヘッダーには、カンマ (,) で区切られた複数の IP アドレスが含まれる場合があります。
[削除]
[削除] を選択した場合、ALB はリクエストをバックエンドサーバーに転送する前に、リクエストから
X-Forwarded-Forヘッダーを削除します。
[クライアント IP アドレスを保持するために X-Forwarded-For を追加]を選択しない場合、ALB はリクエストをバックエンドサーバーに転送する前に、リクエストのX-Forwarded-Forヘッダーに対して何もしません。
フォーマット:
X-Forwarded-For: <client-ip-address>, <proxy1>, <proxy2>, …SLB-IDヘッダーフィールドを追加して、SLB インスタンスの ID を取得します。X-Forwarded-Protoヘッダーフィールドを追加して、インスタンスのリスナープロトコルを取得します。X-Forwarded-Portヘッダーフィールドを追加して、インスタンスのリスニングポートを取得します。X-Forwarded-Hostヘッダーフィールドを追加して、クライアントが SLB インスタンスへのアクセスに使用するドメイン名を取得します。X-Forwarded-Client-srcportヘッダーフィールドを追加して、クライアントが SLB インスタンスへのアクセスに使用するポートを取得します。
説明ALB によって作成され、リクエストに追加される X-Forwarded-For ヘッダーは、常に大文字の「X」で始まります。
X-Forwarded-For を除き、上記のヘッダーについて、ALB は上記で説明したルールに従って処理します。その他のヘッダーについては、ALB はリクエスト内で元の形式を保持します。
[サーバーグループの選択] ステップで、サーバーグループを選択し、バックエンドサーバーを表示してから、次へ をクリックします。
確定 ステップで、設定を確認し、送信 をクリックします。
HTTP リスナーのクイック作成
リスナーを迅速に作成するには、リスナープロトコル、リスニングポート、およびバックエンドサーバーグループを設定するだけで済みます。
トップナビゲーションバーで、ALB インスタンスが配置されているリージョンを選択します。
[インスタンス] ページで、対象のインスタンスを見つけ、そのインスタンス ID をクリックします。
[リスナー] タブをクリックします。[リスナー] タブで、[リスナーのクイック作成] をクリックします。
[リスナーのクイック作成] ダイアログボックスで、次のパラメーターを設定し、[OK] をクリックします。
リスナー設定
説明
リスナープロトコルの選択
リスナープロトコルを選択します。本トピックでは、HTTP を選択します。
リスナーポート
バックエンドサーバーにリクエストを受け付け、転送するフロントエンドポートです。
一般的なポートを選択するか、ポート番号を入力します。ポート番号は 1 ~ 65535 の範囲内で指定する必要があります。
リソースグループの選択
バックエンドサーバーグループが含まれるリソースグループを選択します。
サーバーグループ
バックエンドサーバーグループのタイプを選択し、バックエンドサーバーを追加します。
よくある質問
X-Forwarded-For フィールドのなりすましを防ぐ方法は?
別のプロダクトでヘッダーフィールドを指定して、送信元 IP アドレスを記録する:
例えば、クライアント > CDN > WAF > Server Load Balancer > ECS のアーキテクチャでは、CDN は
Ali-Cdn-Real-IpHTTP ヘッダーフィールドで送信元 IP アドレスを渡します。WAF にサービスを追加する際、クライアント IP 検出方法をAli-Cdn-Real-Ipヘッダーフィールドを使用するように設定します。バックエンドの Nginx サーバーでは、送信元 IP アドレスのログ変数を$http_Ali_Cdn_Real_Ipとして設定します。レイヤー 4 リスナー (NLB または CLB) に切り替える。これにより、バックエンドサーバーは自動的に送信元 IP アドレスを取得できます。詳細については、「CLB レイヤー 4 リスナーを介してバックエンドサーバーで送信元 IP アドレスを取得する」をご参照ください。
ALB は WebSocket プロトコルをサポートしていますか?
ALB の HTTP リスナーは、デフォルトで WebSocket プロトコルをサポートしています。詳細については、チュートリアル「ALB で WebSocket プロトコルを使用してリアルタイムで情報をプッシュする」をご参照ください。
参考資料
ALB は豊富な高度な転送ルールを提供しています。詳細については、「リスナーの転送ルールの管理」をご参照ください。
異常なステータスコードに遭遇した場合は、「ALB のステータスコード」をご参照ください。
ヘルスチェックの問題に遭遇した場合は、「ALB のヘルスチェック問題のトラブルシューティング」をご参照ください。
その他のシナリオベースのチュートリアルについては、以下をご参照ください:
HTTP リクエストを HTTPS リスナーにリダイレクトする:ALB のリスナー転送ルールを使用して、HTTP リクエストを HTTPS にリダイレクトします。これにより、転送中のデータが暗号化され、中間者攻撃やデータ漏洩が防止され、現代のセキュリティ基準を満たすネットワークアーキテクチャを構築するのに役立ちます。
トラフィックミラーリング機能を使用して本番トラフィックをステージング環境にミラーリングする:ALB のトラフィックミラーリング機能を使用して、オンラインのトラフィックをステージング環境のバックエンドサーバーにミラーリングすることで、ライブトラフィックをシミュレートします。ALB はこれらのミラーリングされたバックエンドサーバーからの応答を自動的に破棄するため、テスト活動がオンラインのワークロードに影響を与えないことが保証されます。
ALB を使用してカナリアリリースを実装する:リスナーの転送ルールを設定して、特定の条件や異なるサーバーグループのトラフィックの重みに基づいて、リクエストの一部を新しいアプリケーションバージョンにルーティングします。これにより、新しいバージョンの安定性を段階的に検証し、カナリアリリースを実現できます。