CLB インスタンスに HTTP リスナーを追加して、暗号化されていない HTTP リクエストを転送します。代表的なシナリオには、内部ネットワーク、テストおよび開発環境、機密性の低いデータ転送などがあります。
前提条件
Classic Load Balancer (CLB) インスタンスが作成されていること。詳細については、「CLB インスタンスの作成と管理」をご参照ください。
操作手順
ステップ1:リスナーの設定
-
CLB コンソールにログインします。
-
インスタンスのリージョンを選択します。
-
次のいずれかの方法で、リスナー設定ウィザードを開きます。
-
インスタンス ページで、対象のインスタンスを見つけ、操作 列の リスナーの設定 をクリックします。
-
インスタンス ページで、対象のインスタンス ID をクリックします。次に、リスナー タブで、リスナーの追加 をクリックします。
-
-
プロトコルとリスナー ウィザードで、次の設定を行い、次へ をクリックします。
パラメーター
説明
[リスナープロトコルの選択]
リスナープロトコルを選択します。
この例では [HTTP] を選択します。
メキシコリージョンの CLB インスタンスは HTTP リスナーをサポートしていません。代わりに Application Load Balancer または別のリージョンの CLB インスタンスを使用してください。
[バックエンドプロトコル]
リスナープロトコルが [HTTP] の場合、バックエンドプロトコル は自動的に [HTTP] に設定されます。
[リスニングポート]
リクエストを受信し、バックエンドサーバーに転送するために使用されるポートです。有効な値の範囲は 1~65535 です。
デフォルトの HTTP ポートは 80 です。
[タグ]
タグキー と タグ値 を選択または入力します。
[高度な設定]
編集 をクリックして詳細設定を展開します。
[転送ルール]
スケジューリングアルゴリズムを選択します。デフォルトは ラウンドロビン です。
-
[重み付きラウンドロビン]:重みが大きいバックエンドサーバーほど多くのリクエストを受信します。
-
[ラウンドロビン]:リクエストはバックエンドサーバーに順番に分散されます。
スケジューリングアルゴリズムの詳細とユースケースについては、「スケジューリングアルゴリズム」をご参照ください。
[リダイレクション]
有効にすると、CLB は
302ステータスコードを返して、HTTP リクエストを指定された HTTPS リスナーにリダイレクトします。完全なプロセスについては、「CLB インスタンスを使用した HTTP リクエストの HTTPS へのリダイレクト」をご参照ください。リダイレクトを有効にする前に、ターゲットの HTTPS リスナーを作成し、その証明書を設定してください。
既存の HTTP リスナーでリダイレクトを有効にすることはできません。現在のリスナーを削除し、新しいリスナーを作成する必要があります。
[セッション維持の有効化]
セッション維持はデフォルトで無効になっています。
有効にすると、CLB は Cookie を使用して、同じクライアントからのリクエストを同じバックエンドサーバーにルーティングします。
[クッキーの処理モード]:
-
[クッキーの追加]:Cookie のタイムアウト期間のみを指定します。
最初のリクエストで、CLB はレスポンスに Cookie (ServerId) を挿入します。この Cookie を含む後続のリクエストは、同じバックエンドサーバーに転送されます。
[セッション維持タイムアウト]:クッキーの追加 を選択した場合は、セッション維持のタイムアウト期間を入力します。
-
[クッキーの上書き]:レスポンスに挿入するカスタム Cookie を指定します。バックエンドサーバーでこの Cookie の有効期限とライフタイムを管理する必要があります。
CLB は元の Cookie をカスタム Cookie で上書きします。新しい Cookie を含む後続のリクエストは、同じバックエンドサーバーに転送されます。
[クッキー名]:クッキーの上書き を選択した場合は、Cookie の名前を入力します。
[アクセス制御の有効化]
アクセス制御はデフォルトで無効になっています。
有効にすると、アクセス制御方法と、リスナーのホワイトリストまたはブラックリストとしてアクセス制御リスト (ACL) を選択します。
-
[ホワイトリスト:特定の IP アドレスの SLB へのアクセスを許可する]:信頼できる IP アドレスのみが CLB にアクセスできるようにします。選択した ACL 内の IP アドレスまたは CIDR ブロックからのリクエストのみが転送されます。ホワイトリストにはリスクが伴います。一度設定すると、リストに含まれる IP アドレスのみがリスナーにアクセスできます。
ホワイトリストが有効で、ACL が空の場合、リスナーはすべてのリクエストを転送します。
-
[ブラックリスト:特定の IP アドレスの SLB へのアクセスを禁止する]:指定された IP アドレスから CLB へのアクセスを拒否します。選択した ACL 内の IP アドレスまたは CIDR ブロックからのリクエストはブロックされます。
ブラックリストが有効で、ACL が空の場合、リスナーはすべてのリクエストを転送します。
説明IPv6 インスタンスは IPv6 ACL のみをサポートし、IPv4 インスタンスは IPv4 ACL のみをサポートします。詳細については、「ACL の作成」をご参照ください。
[ピーク帯域幅の上限を有効化]
帯域幅課金型の CLB インスタンスの場合、リスナーごとの最大帯域幅を設定してトラフィックを制限します。すべてのリスナーの帯域幅の合計は、インスタンスの合計帯域幅を超えることはできません。
デフォルトでは無効になっています。すべてのリスナーはインスタンスの帯域幅を共有します。詳細については、「CLB リスナーはインスタンスの帯域幅を共有する」をご参照ください。
重要-
パブリック CLB インスタンスの合計帯域幅が 5 Mbps で、リスナー A に 5 Mbps すべてを割り当て、リスナー B に 0 Mbps を割り当てた場合、リスナー B はアクセスできなくなります。各リスナーに慎重に帯域幅を割り当ててください。
-
プライベート CLB インスタンスに 3 つのリスナーがあり、リスナー A と B に合計 5,120 Mbps を割り当てた場合、残りのリスナー C はアクセスできなくなります。各リスナーに慎重に帯域幅を割り当ててください。
-
データ転送量課金型のインスタンスには、デフォルトの最大帯域幅はありません。
[接続アイドルのタイムアウト時間]
アイドル接続のタイムアウト期間です。有効な値の範囲は 1~60 秒です。デフォルト値は 15 秒です。
タイムアウト期間内にデータが転送されない場合、CLB は接続を閉じます。次のリクエストで新しい接続が確立されます。
説明-
CLB レイヤー 7 (HTTP/HTTPS) リスナーの最大アイドルタイムアウトは 60 秒であり、増やすことはできません。ワークロードでより長いアイドルタイムアウトが必要な場合は、レイヤー 4 TCP リスナー (最大 900 秒) または Application Load Balancer (ALB、アイドルタイムアウト最大 3,600 秒) を使用してください。
-
接続タイムアウト設定はリスナー全体に適用されます。特定のバックエンドサーバーに異なるタイムアウトを設定するには、サーバーを別のリスナーで設定し、そのリスナーでタイムアウトを設定します。
[接続要求のタイムアウト時間]
この期間内にバックエンドサーバーが応答しない場合、CLB はクライアントに HTTP 504 エラーを返します。有効な値の範囲は 1~180 秒です。デフォルト値は 60 秒です。
説明CLB レイヤー 7 (HTTP/HTTPS) リスナーの最大リクエストタイムアウトは 180 秒であり、増やすことはできません。より長いリクエストタイムアウトが必要な場合は、Application Load Balancer (ALB、リクエストタイムアウト最大 3,600 秒) を使用してください。
[Gzip 圧縮の有効化]
特定のファイルタイプを圧縮します。デフォルトで有効になっています。
Gzip は次のファイルタイプをサポートしています:
text/xml、text/plain、text/css、application/javascript、application/x-javascript、application/rss+xml、application/atom+xml、およびapplication/xml。[追加のHTTPヘッダー]
追加するカスタム HTTP ヘッダーを選択します:
-
X-Forwarded-Forヘッダーを追加して、クライアントの実際の IP アドレスを取得します。説明レイヤー 7 CLB リスナーは、デフォルトで X-Forwarded-For を使用してクライアント IP アドレスを取得します。これは無効にできません。ヘッダーに複数の IP アドレスが含まれている場合、最初の IP アドレスがクライアントの実際の IP アドレスです。レイヤー 7 リスナー経由でクライアント IP アドレスを取得する。
-
SLB-IDヘッダーを追加して、CLB インスタンスの ID を取得します。 -
SLB-IPヘッダーを追加して、CLB インスタンスの IP アドレスを取得します。 -
X-Forwarded-Protoヘッダーを追加して、CLB インスタンスのリスナープロトコルを取得します。
[クライアント IP の取得]
訪問者の実際の IP アドレスを取得します。デフォルトで有効になっています。
[作成後に自動的に有効化する]
作成後にリスナーを起動するかどうかを指定します。デフォルトで有効になっています。
-
ステップ2:バックエンドサーバーの追加
リクエストを処理するためにバックエンドサーバーを追加します。デフォルトサーバーグループを使用するか、vServer グループを作成します。詳細については、「サーバーグループ」をご参照ください。この例では、デフォルトサーバーグループを使用します。
HTTP リスナーはプライマリ/セカンダリサーバーグループをサポートしていません。
-
[バックエンドサーバー] ステップで、[デフォルトサーバーグループ] を選択し、[さらに追加] をクリックします。
-
[サーバー] ステップで、追加するバックエンドサーバーを選択し、[次へ] をクリックします。
-
[ポート/重み] ステップで、重みを設定し、[追加] をクリックします。
説明-
デフォルトの重みは 100 です。重みが大きいバックエンドサーバーほど多くのリクエストを受信します。
-
重みが 0 のサーバーは新しいリクエストを受信しません。
-
-
各バックエンドサーバー (ECS インスタンス) がリクエストを受信するために使用するポートを指定し、[次へ] をクリックします。有効な値の範囲は 1~65535 です。
ステップ3:ヘルスチェックの設定
CLB はヘルスチェックを使用してバックエンドサーバーの可用性を判断し、全体的なサービスの信頼性を向上させます。
-
オプション: [ヘルスチェック] ステップで、[変更] をクリックして設定を変更し、[次へ] をクリックします。詳細については、「CLB ヘルスチェックの設定と管理」をご参照ください。
-
[確認] ステップで、リスナーの設定を確認します。設定を変更する必要がある場合は、[変更] をクリックします。
-
設定を確認し、[送信] をクリックします。リスナーが作成されたら、[OK] をクリックします。
新しいリスナーがページに表示されます。
よくある質問
レイヤー 7 リスナーが変更するレスポンスヘッダー
セッション維持をサポートするため、CLB はバックエンドサーバーからの Date、Server、X-Pad、X-Accel-Redirect などのレスポンスヘッダーを変更します。
回避策:
-
カスタムレスポンスヘッダー (例:
xl-server、xl-date) にプレフィックスを付けて、CLB がそれらを処理しないようにします。 -
レイヤー 7 HTTP リスナーからレイヤー 4 TCP リスナーに切り替えます。
レスポンス内の Transfer-Encoding: chunked ヘッダー
現象:
ドメイン名がレイヤー 7 ロードバランサーにマッピングされた後、ローカルマシンからアクセスすると、HTTP レスポンスに Transfer-Encoding: chunked ヘッダーが表示されます。このヘッダーは、バックエンドサーバーに直接アクセスした場合には存在しません。
原因:
レイヤー 7 の負荷分散では Tengine リバースプロキシが使用され、レスポンスボディにチャンク形式の転送エンコーディングが適用されます。
レイヤー 4 の負荷分散はトラフィックを転送するだけで、このヘッダーを追加しません。
CLB リスナーの WebSocket サポート
CLB HTTP リスナーはデフォルトで WebSocket をサポートしています。詳細については、「CLB を使用して WebSocket でリアルタイムメッセージングを有効にする」をご参照ください。
特定のドメイン名のみを許可したり、直接の IP アクセスをブロックしたりするように CLB を設定するにはどうすればよいですか。
CLB HTTP/HTTPS (レイヤー 7) リスナーはドメインベースおよび URL ベースの転送ルールをサポートしていますが、CLB には組み込みのドメイン許可リストまたはブロックリスト機能はありません。転送ルールと vServer グループを組み合わせることで、間接的にドメインレベルのアクセス制御を実装できます。これはセキュリティ保護ではなく、あくまでアクセス制御であることにご注意ください。CC 攻撃や SQL インジェクションなどの攻撃から防御するには、Web Application Firewall (WAF) を使用してください。
一致しないドメインまたは直接の IP アクセスをブロックする (フォールバックポリシー)
-
バックエンドサーバーが追加されていない空の vServer グループを作成します。
-
リスナーのデフォルトの転送先 (転送ルールに一致しない場合にトラフィックを受信するサーバーグループ) を、この空の vServer グループに設定します。
-
ターゲットドメインに一致するトラフィックを実際のバックエンド vServer グループにルーティングするドメインベースの転送ルールを設定します。
この設定により、転送ルールに一致するリクエストは対応するバックエンド vServer グループにルーティングされますが、転送ルールに一致しないリクエスト (直接の IP アクセスや認識されないドメインからのリクエストを含む) は、デフォルトの転送先として設定された空の vServer グループに転送され、利用可能なバックエンドサーバーがないためバックエンドサーバーに到達できません。
特定のドメインからのアクセスをブロックする
前のシナリオで作成した空の vServer グループを使用して、ブロックしたいドメインをその空の vServer グループにルーティングする転送ルールを作成します。そのドメインからのリクエストは、利用可能なバックエンドサーバーがないためブロックされます。
関連ドキュメント
-
本番環境では、通信を暗号化するために HTTPS を使用してください。詳細については、「HTTPS リスナーの追加」をご参照ください。
-
サーバーグループ関連のトピック:
-
「デフォルトサーバーグループの管理」をご参照ください。
-
「vServer グループの作成と管理」をご参照ください。
-
-
ヘルスチェックの仕組みについては、「CLB ヘルスチェック」をご参照ください。ヘルスチェックの設定方法については、「CLB ヘルスチェックの設定と管理」をご参照ください。
-
「スケジューリングアルゴリズム」をご参照ください。
-
HTTP リスナーにドメイン名ベースまたは URL ベースの転送ルールを追加するには、「ドメイン名または URL に基づくリクエストの転送」をご参照ください。CLB は、どの転送ルールにも一致しないトラフィックをリスナーのデフォルトの転送先 (フォールバックサーバーグループ) にルーティングします。バックエンドサーバーがそのフォールバックサーバーグループにない場合は、トラフィックを対応するサーバーグループに転送するための転送ルールを明示的に設定する必要があります。そうしないと、CLB はトラフィックを転送できません。
-
HTTP リスナーでクライアントの IP アドレスを取得するには、「レイヤー 7 リスナーを介してクライアントの IP アドレスを取得する」をご参照ください。