このトピックでは、クラシックロードバランサー (CLB) インスタンス上の 1 つのリスナーを設定し、異なるドメイン名宛ての HTTPS リクエストを異なるバックエンドサーバーへルーティングする方法について説明します。これにより、複数の HTTPS Web サイトをホストできます。
例
CLB インスタンスは HTTPS リクエスト内のドメイン名を検査し、一致する証明書を選択して認証を完了した後、転送ルールに基づいてリクエストを適切なバックエンドサーバーへ転送します。
このトピックでは、次の設定を例として使用します。
-
リスナーのデフォルト証明書
defaultは、ドメイン名aliyundoc.comに関連付けられています。デフォルトサーバーグループは RS1 です。 -
追加証明書
example1は、ドメイン名www.example.comに関連付けられています。https://www.example.comへのリクエストは、サーバーグループ RS1 にルーティングされます。 -
もう 1 つの追加証明書
example2は、ドメイン名www.example.orgに関連付けられています。https://www.example.orgへのリクエストは、サーバーグループ RS2 にルーティングされます。
前提条件
CLB インスタンスが作成済みであること。詳細については、「Create and manage a CLB instance」をご参照ください。
2 つの vServer グループ (RS1 と RS2) が作成済みであること。詳細については、「Create and manage a vServer group」をご参照ください。
RS1 に ECS インスタンス (ECS01) を追加し、RS2 に別の ECS インスタンス (ECS02) を追加済みであること。ECS01 と ECS02 の両方にアプリケーションサービスがデプロイ済みであること。
ドメイン名を登録し、ICP 登録を完了していること。詳細については、「Register a domain name on Alibaba Cloud」および「ICP filing process」をご参照ください。
サードパーティプロバイダーから証明書を購入またはアップロードして Certificate Management Service に取り込み、それぞれのドメイン名にバインドする必要があります。詳細については、「Enable HTTPS access for a web-based service by using an official certificate」をご参照ください。このトピックでは、次の証明書が必要です。
ドメイン名
aliyundoc.comにバインドされた、defaultという名前のデフォルト証明書。ドメイン名
www.example.comにバインドされた、example1という名前の証明書。ドメイン名
www.example.orgにバインドされた、example2という名前の証明書。
説明証明書は、使用する前に CLB インスタンスへデプロイする必要があります。詳細については、「Create a certificate」をご参照ください。
ステップ1:HTTPSリスナーの追加
CLB コンソールにログインします。
上部メニューで、CLB インスタンスが存在するリージョンを選択します。
インスタンス管理 ページで対象の CLB インスタンスを見つけ、操作 列で リスナーの設定 をクリックします。
プロトコルとリスナー タブで次のパラメーターを設定し、次へ をクリックします。
このトピックでは、必須パラメーターのみを説明します。その他のパラメーターはデフォルト値のままにするか、必要に応じて設定してください。
リスナープロトコルの選択:HTTPS を選択します。
リスナーポート:ポートを 443 に設定します。
SSL 証明書 タブで、アップロード済みのサーバー証明書を選択し、次へ をクリックします。この例では、
default証明書を選択します。バックエンド サーバー タブで VServer Group を選択し、サーバーグループ ドロップダウンリストから RS1 を選択します。
その他のパラメーターはデフォルト値のままにし、確認ステップに到達するまで 次へ をクリックします。最後に 送信 をクリックします。
ステップ2:拡張ドメインの追加
インスタンス管理 ページで対象の CLB インスタンスを見つけ、対象インスタンス ID をクリックします。
リスナー タブで、作成した HTTPS リスナーを見つけます。操作 列で
アイコンをクリックし、ドメイン拡張子の管理 を選択します。ドメイン拡張子の管理 パネルで ドメイン拡張子の追加 をクリックします。
追加の証明書 に
www.example.comを入力します。サーバー証明書の選択 ドロップダウンリストからwww.example.comに関連付けられた証明書を選択し、OK をクリックします。追加の証明書 に
www.example.orgを入力します。サーバー証明書の選択 ドロップダウンリストからwww.example.orgに関連付けられた証明書を選択し、OK をクリックします。
説明証明書内のドメイン名が、追加する拡張ドメインと完全に一致していることを確認してください。
説明拡張ドメインを追加する際は、次の制限事項に注意してください。
ワイルドカードドメイン名は SNI マッチングをサポートしません。
*.example.comなどのワイルドカード拡張ドメインは、TLS ハンドシェイク中に SNI 経由でマッチングできません。クライアントが SNI フィールドにサブドメイン名を指定した場合、CLB はワイルドカードの拡張ドメインを使用して対応する証明書を選択できません。拡張ドメインには、www.example.comなどの完全一致ドメイン名を使用してください。転送ルールが必要です。拡張ドメインは転送ルールと併用する必要があります。ステップ3で対応する転送ルールを設定せずに拡張ドメインだけを追加した場合、SNI は有効にならず、CLB はデフォルト証明書を使用してリクエストを処理します。
デフォルト証明書へのフォールバック。HTTPS リクエストがいずれの拡張ドメインにも一致しない場合、CLB はデフォルト証明書を使用してリクエストを処理します。これは想定どおりの動作です。
期限切れ証明書のフォールバック。拡張ドメインに関連付けられたサーバー証明書の有効期限が切れると、CLB は期限切れ証明書に対する SNI マッチングロジックを自動的にスキップします。クライアントの SNI フィールド内のドメイン名が期限切れ証明書のドメインと完全に一致していても、CLB は期限切れ証明書を使用せず、HTTPS リスナーに設定されたデフォルト証明書へフォールバックします。これにより、想定していたドメイン固有の証明書ではなくデフォルト証明書が返され、SSL/TLS 証明書の不一致警告が表示される場合があります。サービス中断を防ぐため、拡張ドメイン用の証明書は期限切れ前に更新してください。
ステップ3:転送ルールの設定
インスタンス管理 ページで対象の CLB インスタンスの ID をクリックします。
リスナー タブでリスナーを見つけ、操作 列で 転送ルールの設定 をクリックします。
ルール パネルで、転送ルールを追加します。
この例では、ドメイン名ベースの転送ルールのみを設定します。URL 設定は行いません。
ドメイン 列に
www.example.comを入力し、vServer グループ RS1 を選択してから、さらに追加 をクリックします。ドメイン 列に
www.example.orgを入力し、vServer グループ RS2 を選択してから、さらに追加 をクリックします。
転送ルールを設定したら、ルール パネルを閉じます。
ステップ4:名前解決の設定
www.example.com と www.example.org の A レコードを追加し、CLB インスタンスのパブリック IP アドレスを指すように設定します。
CLB コンソールにログインします。
上部メニューでリージョンを選択します。
名前解決に使用する CLB インスタンスを選択し、対応するパブリック IP アドレスをコピーします。
A レコードを追加するには、次の手順を実行します。
Alibaba Cloud DNS コンソールにログインします。
インターネットの権威ある DNS 解決 ページで ドメイン名の追加 をクリックします。
ドメイン名の追加 ダイアログボックスでドメイン名を入力し、OK をクリックします。
重要TXT レコードを使用してドメインの所有権を検証してください。
管理するドメイン名を見つけ、Actions 列で 解決設定 をクリックします。
解決設定 ページで Add Record をクリックします。
Add Record パネルで次のパラメーターを設定して A レコードを追加し、OK をクリックします。
パラメーター
説明
[レコードタイプ]
ドロップダウンリストから [A] を選択します。
[ホストレコード]
ドメイン名のプレフィックスです。
[Query Source]
[Default] を選択します。
[レコード値]
レコード値には、コピーした CLB インスタンスのパブリック IP アドレスを指定します。
TTL
Time to Live (TTL)。DNS レコードが DNS サーバーにキャッシュされる時間を指定します。この例ではデフォルト値を使用します。
ステップ5:結果の確認
設定完了後、ブラウザで https://www.example.com と https://www.example.org を入力し、転送ルールが正しく機能することを確認します。この例では、各バックエンドサーバーにシンプルな静的ウェブページがデプロイされていることを前提としています。
-
ブラウザで
https://www.example.comを入力します。リクエストはサーバーグループ RS1 の ECS01 にルーティングされます。ページにはHello World ! This is ECS01.と表示されます。 -
ブラウザで
https://www.example.orgを入力します。リクエストはサーバーグループ RS2 の ECS02 にルーティングされます。ページにはHello World ! This is ECS02.と表示されます。
テストが失敗した場合は、ブラウザキャッシュをクリアして再度テストしてみてください。
よくある質問
Q:拡張ドメインを設定した後も、HTTPS リクエストでデフォルト証明書が返されます。どのように切り分ければよいですか?
完全一致ドメイン名を使用しているか確認してください。
*.example.comなどのワイルドカードドメイン名は、CLB での自動 SNI マッチングをサポートしません。拡張ドメインには、www.example.comなどの完全一致ドメイン名を使用してください。転送ルールが設定されているか確認してください。拡張ドメインだけでは SNI は有効になりません。拡張ドメインごとに転送ルールも設定する必要があります。ステップ3「転送ルールの設定」を参照し、拡張ドメインに対する転送ルールが存在することを確認してください。
証明書のドメイン名が拡張ドメインと一致しているか確認してください。証明書内のドメイン名は、設定した拡張ドメインと完全に一致している必要があります。不一致があると、CLB はデフォルト証明書へフォールバックします。
openssl を使用して SNI の動作を確認してください。次のコマンドを実行し、特定のドメイン名に対して CLB がどの証明書を返すか確認します。
openssl s_client -connect <CLB_VIP>:443 -servername <domain_name>出力で、返された証明書の
subjectフィールドを確認します。subject に意図したドメイン名ではなくデフォルトのドメイン名が表示される場合は、拡張ドメインと転送ルールが正しく設定されていることを確認してください。コンソールで拡張ドメインの設定を確認してください。インスタンス管理 ページで対象の CLB インスタンス ID をクリックし、リスナー タブに移動します。HTTPS リスナーを見つけ、操作 列で
> [Manage Certificates] を選択して、デフォルト証明書と設定済みの拡張ドメインを確認します。ドメイン拡張子の管理 の一覧が空の場合は、拡張ドメインが設定されておらず、すべての HTTPS リクエストでリスナーのデフォルト証明書が使用されます。ステップ2に従い、各ドメインの拡張ドメインを追加し、対応するサーバー証明書をバインドしてください。API を使用して拡張ドメインの設定を確認してください。
DescribeLoadBalancerHTTPSListenerAttributeAPI を呼び出してDomainExtensionsフィールドを照会し、拡張ドメインの設定状況を確認します。レスポンスでDomainExtensionsフィールドが{"DomainExtensions": {"DomainExtension": []}}のように返される場合は、拡張ドメインが設定されておらず、すべてのドメインリクエストでデフォルト証明書が使用されます。拡張ドメインが設定されている場合は、各エントリのDomainおよびServerCertificateIdフィールドが、想定するドメインと証明書に一致していることを確認してください。ワイルドカード証明書のマッチング制限を理解してください。拡張ドメインにバインドされたサーバー証明書がワイルドカード証明書 (バインドされたドメインが
*.example.com形式) の場合は、次の点に注意してください。同一の HTTPS リスナー配下で複数の拡張ドメインがワイルドカード証明書を使用している場合、SNI マッチングで自動的に使用されるのは最初のワイルドカード証明書のみです。残りの拡張ドメインは、完全一致ドメインの個別証明書をバインドする必要があります。そうしない場合、リスナーのデフォルト証明書が返されます。
関連ドキュメント
同一ドメイン名の異なる URL パス宛てのリクエストを異なるバックエンドサーバーグループへ転送するには、「Use forwarding rules that are based on the same domain name but different paths to achieve precise traffic forwarding」をご参照ください。
ドメイン名ベースおよび URL ベースの転送ルールの詳細については、「Forward requests based on domain names or URLs」をご参照ください。
拡張ドメインの設定手順の詳細については、「CLB Extension Domain Overview」をご参照ください。