すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:カスタムドメイン名をバケットのデフォルトドメイン名にマップする

最終更新日:Aug 23, 2024

Object Storage Service (OSS) は、バケットのデフォルトドメイン名を使用して、バケットにアップロードされたオブジェクトのURLを生成します。 ブラウザからURLを使用してオブジェクトにアクセスすると、オブジェクトがダウンロードされます。 ブラウザからのオブジェクトアクセス時にオブジェクトをプレビューする場合は、カスタムドメイン名をバケットにマッピングし、カスタムドメインを使用してバケット内のオブジェクトにアクセスする必要があります。 カスタムドメイン名をバケットにマッピングしても、デフォルトドメイン名を使用してバケットにアクセスできます。

前提条件

  • バケット作成についての 詳細は、「バケットの作成」をご参照ください。

  • ルートドメイン名が登録されています。 Alibaba Cloudに登録されていないドメイン名をバケットにマッピングできます。 ドメイン名がない場合は、Alibaba Cloud Domainsサービスプラットフォームを使用して登録できます。 詳細については、「Alibaba Cloudでのドメイン名の登録」をご参照ください。

  • ドメイン名のマッピング先のバケットが中国本土にあり、Alibaba Cloudアカウントの実名検証が完了している場合、ドメイン名のインターネットコンテンツプロバイダ (ICP) 申請が取得されます。 ドメイン名のICP申請を申請し、Alibaba Cloudアカウントの実名認証を完了する方法の詳細については、「概要」と「Alibaba Cloud国際サイトでの実名登録に関するFAQ」 (alibabacloud.com) をご参照ください。.

シナリオ

  • オブジェクトプレビュー: バケットのカスタムドメイン名を使用してブラウザからバケット内のオブジェクトにアクセスする場合、OSSはオブジェクトのダウンロードを強制するレスポンスヘッダーを追加しません。 このようにして、オブジェクトはコンテンツプレビュー用にブラウザに直接表示されます。

  • ブランドID: カスタムドメイン名は、一貫したブランドIDを維持し、顧客の信頼を構築するのに役立ちます。

  • ドメインブロックバイパス: 一部のアプリケーションまたはプラットフォームは、デフォルトのバケットドメイン名をブロックする場合があります。 この場合、カスタムドメイン名をバケットにマッピングして、バケットへのアクセスを維持できます。

  • 使いやすさ: カスタムバケットドメイン名は、通常、デフォルトのドメイン名よりも覚えやすく、リソースへのアクセスと共有がより簡単でユーザーフレンドリーになります。

  • ユーザーエクスペリエンスの最適化: カスタムドメイン名は、ユーザーがリソースリクエストをより迅速に開始するのに役立つユーザーフレンドリーなアドレスです。 Alibaba Cloud CDNと一緒にカスタムドメイン名を使用して、コンテンツの配信とダウンロードを高速化することもできます。 これにより、レイテンシが減少し、ユーザーエクスペリエンスが向上します。

  • URLの可用性: バケットのカスタムドメイン名は、リソースがバケット内の異なるパスに移動された場合でも、バケット内のリソースにアクセスするための一貫した方法を提供します。

背景情報

バケットのデフォルトドメイン名またはOSS高速化ドメイン名を使用してバケット内のオブジェクトにアクセスする場合、オブジェクトはデフォルトでダウンロードされます。 カスタムドメイン名を使用してバケット内のオブジェクトにアクセスする場合、デフォルトでプレビューが提供されます。

デフォルトドメイン名またはOSS高速化ドメイン名を使用したアクセス

デフォルトのバケットドメイン名を使用して、ブラウザからバケット内のWebサイトファイルまたは画像にアクセスするリクエストが行われた場合<bucketName>.oss-<regionI d>.aliyuncs.com) またはOSS高速化ドメイン名 (<bucketNam e>.oss-accelerate.aliyuncs.com) 、OSSには、x-oss-force-download: trueコンテンツ-処分: 添付ファイルレスポンスのヘッダーを使用して、セキュリティを確保します。 ブラウザはレスポンス内のContent-Disposition: attachmentヘッダーを検出し、オブジェクトを強制的にダウンロードします。 次の図にプロセスを示します。

2.png

デフォルトドメイン名またはOSS高速化ドメイン名を使用するアクセス要求での強制ダウンロードの詳細については、「付録: 強制ダウンロードのためにトリガーされるx-oss-ecルール」をご参照ください。

カスタムドメイン名を使用したアクセス

登録済みドメイン名のカスタムサブドメインをバケットにマップする場合、カスタムサブドメインを使用して、ブラウザからバケット内のオブジェクトにアクセスできます。 この場合、OSSはレスポンスに強制ダウンロードを指定するヘッダーを含めません。 ブラウザは、応答のContent-Dispositionヘッダーに値が指定されていないことを検出し、ヘッダーをinlineに設定します。 次の図にプロセスを示します。

1.png

制限事項

  • 漢字を含むカスタムドメイン名をバケットにマップすることはできません。

  • 各ドメイン名は1つのバケットにのみマッピングできます。

  • 各バケットは、最大100個のドメイン名にマッピングできます。

  • OSSコンソールでは、ワイルドカードドメイン名をバケットにマップすることはできません。 たとえば、アスタリスク (*) で始まるドメイン名をバケットにマッピングすることはできません。 アスタリスク (*) で始まるドメイン名をバケットにマップすると、ドメイン名のすべてのサブドメインがバケットを指します。 Alibaba Cloud CDNを使用してバケットへのアクセスを高速化する場合、ワイルドカードドメイン名をバケットにマッピングできます。 ただし、ドメイン名はOSSコンソールに表示されません。

手順

手順1: カスタムドメイン名のマッピング

カスタムドメイン名をバケットにマッピングする手順は、所有者アカウントとドメインレジストラによって異なります。

説明
  • でドメイン名のレジストラを照会できます。 WHOIS

  • Alibaba Cloud DNSコンソールで、ドメイン名が現在のAlibaba Cloudアカウントに属しているかどうかを確認できます。

現在のAlibaba Cloudアカウントを使用して登録されたカスタムドメイン名のマップ

現在のAlibaba Cloudアカウントを使用して登録されたカスタムドメイン名をマップするには、次の手順を実行します。

  1. OSSコンソールにログインします。

  2. 左側のナビゲーションウィンドウで、バケットリスト をクリックします。 [バケット] ページで、目的のバケットを見つけてクリックします。

  3. 左側のナビゲーションウィンドウで、バケットの設定 > ドメイン名管理 を選択します。

  4. [ドメイン名] ページで、カスタムドメイン名のマッピング をクリックします。

  5. カスタムドメイン名のマッピング パネルで、static.example.comなどのドメイン名を入力し、[確認] をクリックします。

  6. CNAMEレコードを自動的に追加する をオンにします。

    Alibaba Cloud DNSは、カスタムドメイン名をバケットのパブリックドメイン名に指定するCNAMEレコードを自動的に追加します。1.png

    説明

    CNAMEレコードを自動的に追加する をオンにしない場合は、Alibaba Cloud DNSコンソールでカスタムドメイン名のCNAMEレコードを手動で追加する必要があります。

別のAlibaba Cloudアカウントを使用して登録されたカスタムドメイン名のマップ

Alibaba Cloudアカウントaを使用して登録されたカスタムドメイン名をAlibaba CloudアカウントBのバケットにマップするには、次の手順を実行します。

  1. Alibaba CloudアカウントBを使用して、TXTレコードのホスト名と値を取得します。

    1. にログインします。OSSコンソール.

    2. 左側のナビゲーションウィンドウで、バケットリスト をクリックします。 [バケット] ページで、目的のバケットを見つけてクリックします。

    3. 左側のナビゲーションウィンドウで、バケットの設定 > ドメイン名管理 を選択します。

    4. [ドメイン名] ページで、カスタムドメイン名のマッピング をクリックします。

    5. カスタムドメイン名のマッピング パネルで、[ドメイン名] フィールドにバケットにマップするドメイン名 (static.example.comなど) を入力し、[ホスト名][レコード値] をコピーします。

      Dingtalk_20240522181245.jpg

      重要

      TXTレコードをコピーした後、ドメイン名を送信するまで、カスタムドメイン名のマッピング パネルを閉じないでください。 カスタムドメイン名のマッピング パネルを閉じると、TXTレコードは無効になります。 その結果、後続のドメイン所有権検証は失敗する。

  2. Alibaba CloudアカウントAを使用してTXTレコードを追加します。

    1. Alibaba Cloud DNS コンソールにログオンします。

    2. [ドメイン名の解決] ページで、マップするドメイン名を見つけ、[操作] 列の [DNS設定] をクリックします。

    3. [DNS設定] タブで、[DNSレコードの追加] をクリックします。 [DNSレコードの追加] パネルで、次の表に示すパラメーターを設定します。

      パラメーター

      説明

      レコードタイプ

      TXTを選択します。

      TXT

      ホスト名

      Alibaba CloudアカウントBを使用して以前に記録されたTXTレコードのホスト名を入力します。

      _dnsauth

      DNSリクエストソース

      ドメインの解決に使用するDNSラインを選択します。 DNSシステムが最適な行を自動的に選択できるようにするには、このパラメーターに [デフォルト] を選択することを推奨します。

      デフォルト

      レコード値

      Alibaba CloudアカウントBを使用して以前に記録されたTXTレコードのCnameTokenを入力します。

      b0d777f7ccddeae93358d908ed59 ****

      TTL期間

      レコードの更新間隔を選択します。 デフォルト値を維持します。

      説明

      TTL設定が有効になるまでには一定の遅延があります。

      10 分

    4. [OK] をクリックします。

  3. Alibaba CloudアカウントBでOSSコンソールにログインし、カスタムドメイン名のマッピング パネルに移動します。 ドメイン名の所有権の確認 をクリックします。

  4. Alibaba CloudアカウントAを使用してCNAMEレコードを追加します。

    1. [ドメイン名解決] ページでドメイン名を見つけ、[操作] 列の [DNS設定] をクリックします。

    2. [DNS設定] タブで、[DNSレコードの追加] をクリックします。 [DNSレコードの追加] パネルで、次の表に示すパラメーターを設定します。

      パラメーター

      説明

      レコードタイプ

      CNAMEを選択します。

      CNAME

      ホスト名

      ドメイン名のプレフィックスに基づいてホスト名を指定します。

      • example.comなどのルートドメインの場合は、@ を入力します。

      • サブドメインの場合は、サブドメインのプレフィックスを入力します。 たとえば、サブドメインがstatic.example.comの場合は、staticと入力します。

      static

      DNSリクエストソース

      ドメインの解決に使用するDNSラインを選択します。 DNSシステムが最適な行を自動的に選択できるようにするには、このパラメーターに [デフォルト] を選択することを推奨します。

      デフォルト

      レコード値

      バケットのパブリックドメイン名を入力します。 バケットのドメイン名は、<bucketname>.<endpoint> 形式です。 異なるリージョンのパブリックエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。

      examplebucket.oss-cn-hangzhou.aliyuncs.com

      TTL期間

      レコードの更新間隔を選択します。 デフォルト値を維持します。

      説明

      TTL設定が有効になるまでには一定の遅延があります。

      10 分

    3. [OK] をクリックします。

Alibaba Cloudアカウントを使用して登録されていないカスタムドメイン名をマップする

別のドメインレジストラに登録されているカスタムドメイン名をマップするには、次の手順を実行します。

  1. OSSコンソールで、ホスト名と値をTXTレコードとして生成します。

    1. にログインします。OSSコンソール.

    2. 左側のナビゲーションウィンドウで、バケットリスト をクリックします。 [バケット] ページで、目的のバケットを見つけてクリックします。

    3. 左側のナビゲーションウィンドウで、バケットの設定 > ドメイン名管理 を選択します。

    4. [ドメイン名] ページで、カスタムドメイン名のマッピング をクリックします。

    5. カスタムドメイン名のマッピング パネルで、マップするカスタムドメイン名 (static.example.comなど) を入力し、[ホスト名][レコード値] をコピーします。

      重要

      TXTレコードをコピーした後、ドメイン名を送信するまで、カスタムドメイン名のマッピング パネルを閉じないでください。 カスタムドメイン名のマッピング パネルを閉じると、TXTレコードは無効になります。 その結果、後続のドメイン所有権検証は失敗する。

  2. ドメインレジストラのDNSプラットフォームで、次の表に示すパラメーターを使用してTXTレコードを追加します。

    パラメーター

    説明

    レコードタイプ

    TXTを選択します。

    TXT

    ホスト名

    ドメインレジストラのDNSプラットフォームの要件に基づいて、OSSから取得したホスト名を入力します。

    _dnsauth

    以前にOSSから記録されたTXTレコードのCnameTokenを入力します。

    b0d777f7ccddeae93358d908ed59 ****

  3. OSSコンソールの カスタムドメイン名のマッピング パネルに戻ります。 ドメイン名の所有権の確認 をクリックします。

  4. ドメインレジストラのDNSプラットフォームで、次の表に示すパラメーターを使用してCNAMEレコードを追加します。

    パラメーター

    説明

    レコードタイプ

    CNAMEレコードタイプを指定します。

    CNAME

    ホスト名

    ドメイン名のプレフィックスに基づいてホスト名を指定します。

    • example.comなどのルートドメインの場合は、@ を入力します。

    • サブドメインの場合は、サブドメインのプレフィックスを入力します。 たとえば、サブドメインがstatic.example.comの場合は、staticと入力します。

    static

    バケットのパブリックドメイン名を入力します。 バケットのドメイン名は、<bucketname>.<endpoint> 形式です。 異なるリージョンのパブリックエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。

    examplebucket.oss-cn-hangzhou.aliyuncs.com

手順2: ドメイン名マッピングの確認

カスタムドメイン名をデフォルトのバケットドメインにマッピングした後、nslookupまたはdigコマンドを実行してCNAME解決を確認します。 CNAMEがバケットのパブリックドメイン名であることを出力が示す場合、CNAMEレコードが有効になります。

nslookup

バケットにマップしたカスタムドメイン名を使用して、次のコマンドでe example.comを再生し、コマンドを実行します。

nslookup -type=CNAM E example.com

サンプル成功応答:

1.png

掘る

バケットにマップしたカスタムドメイン名を使用して、次のコマンドでe example.comを再生し、コマンドを実行します。

dig CNAM E example.com

サンプル成功応答:

2.png

手順3: カスタムドメイン名を使用してバケットにアクセスする

ドメインマッピングが有効になったら、カスタムドメイン名を使用してHTTP経由でバケット内のオブジェクトにアクセスできます。

重要

HTTPプロトコルは、送信中のデータのセキュリティを保証することができない。 データは、第三者によって傍受または改ざんされ得る。 データのセキュリティを強化するために、HTTPSプロトコルを使用してバケット内のオブジェクトにアクセスすることを強くお勧めします。 詳細については、「HTTPSアクセスの設定」をご参照ください。

  1. バケットにオブジェクトを 1 つアップロードします。

    詳細は、「簡易アップロード (Simple upload)」をご参照ください。

  2. オブジェクトのURLを取得します。

    一時オブジェクトURLの取得

    オブジェクトの一時URLを取得するには、次の手順を実行します。

    1. オブジェクトのアクセス制御リスト (ACL) をprivateに設定します。

      詳細については、「オブジェクトACL」をご参照ください。

    2. プライベートオブジェクトのURLの形式は、http:// YourDomain/ObjectName? 署名パラメーターです。 次のいずれかの方法を使用して、プライベートオブジェクトURLを取得し、URLの有効期間を指定できます。

    OSS コンソールの使用

    1. OSSコンソールにログインします。

    2. 左側のナビゲーションウィンドウで、[バケット] をクリックします。 [バケット] ページで、プライベートオブジェクトが保存されているバケットの名前をクリックします。

    3. 左側のナビゲーションツリーで、ファイル > オブジェクト を選択します。

    4. オブジェクトページで、オブジェクトの名前をクリックします。

    5. [詳細の表示] パネルで、バケットにマッピングしたカスタムドメイン名を [カスタムドメイン名] フィールドで選択し、他のパラメーターのデフォルト設定を保持してから、[オブジェクトURLのコピー] をクリックします。

      2.png

    ossbrowser の使用

    ossbrowserを使用して、OSSコンソールで実行できるのと同じオブジェクトレベルの操作を実行できます。 ossbrowserの画面上の指示に従って、署名付きURLを取得できます。 詳細については、「ossbrowserの使用」をご参照ください。

    OSS SDKの使用

    1. カスタムドメイン名を使用してOSSClientインスタンスを作成します。

    2. Java

      // Specify the custom domain name. 
      String endpoint = "yourEndpoint";
      
      // Obtain access credentials from environment variables. Before you run the sample code, make sure that the environment variables are configured. 
      EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
      
      // Create ClientBuilderConfiguration and change the default values of the parameters based on your business requirements. 
      ClientBuilderConfiguration conf = new ClientBuilderConfiguration();
      
      // Specify whether to use CNAME. CNAME is used to map the custom domain name to the bucket. 
      conf.setSupportCname(true);
      
      // Create an OSSClient instance. 
      OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider, conf);
      
      // Shut down the OSSClient instance. 
      ossClient.shutdown();                    

      PHP

      <?php
      if (is_file(__DIR__ . '/../autoload.php')) {
          require_once __DIR__ . '/../autoload.php';
      }
      if (is_file(__DIR__ . '/../vendor/autoload.php')) {
          require_once __DIR__ . '/../vendor/autoload.php';
      }
      
      use OSS\Credentials\EnvironmentVariableCredentialsProvider;
      use OSS\OssClient;
      use OSS\CoreOssException;
      
      // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.  
      $provider = new EnvironmentVariableCredentialsProvider();
      // Specify the custom domain name. Example: http://example.com. 
      $endpoint = "http://example.com";
      
      try {
          $config = array(
              "provider" => $provider,
              "endpoint" => $endpoint,
              "cname"	=> true
          );
          $ossClient = new OssClient($config);    
      } catch (OssException $e) {
          print $e->getMessage();
      }    
                      

      Node.js

      const OSS = require('ali-oss')
      
      const client = new OSS({
        // Use a custom domain name as the endpoint of a bucket to access the bucket. 
        endpoint: 'http://img.example.com', 
        // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
        accessKeyId: process.env.OSS_ACCESS_KEY_ID,
        accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
        cname: true
      });

      Python

      # -*- coding: utf-8 -*-
      import oss2
      from oss2.credentials import EnvironmentVariableCredentialsProvider
      
      # Obtain access credentials from environment variables. Before you run the sample code, make sure that the environment variables are configured. 
      auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
      
      # Specify the custom domain name that is mapped to the bucket. Example: example.com. 
      cname = 'http://example.com'
      
      # Specify the name of the bucket and set is_cname to True to enable CNAME. CNAME is used to map a custom domain name to a bucket. 
      bucket = oss2.Bucket(auth, cname, 'examplebucket', is_cname=True)   

      Browser.js

      <!DOCTYPE html>
      <html lang="en">
        <head>
          <meta charset="UTF-8" />
          <meta name="viewport" content="width=device-width, initial-scale=1.0" />
          <title>Document</title>
          <script src="https://gosspublic.alicdn.com/aliyun-oss-sdk-6.18.0.min.js"></script>
        </head>
        <body>
          <script>
            const client = new OSS({
              // Enter a custom domain name. Example: example.com. 
              endpoint: "example.com",
              // Specify the temporary AccessKey pair obtained from Security Token Service (STS). The AccessKey pair consists of an AccessKey ID and an AccessKey secret. 
              accessKeyId: "yourAccessKeyId",
              accessKeySecret: "yourAccessKeySecret",
              // Specify the security token obtained from STS. 
              stsToken: 'yourSecurityToken',
              // Specify the name of the bucket. Example: examplebucket. 
              bucket: "examplebucket",
              cname: true,
            });    
                
          </script>
        </body>
      </html>
      

      .NET

      Aliyun.OSSを使用した

      using Aliyun.OSS;
      using Aliyun.OSS.Common;
      // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
      var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
      var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
      // Specify the custom domain name. 
      const string endpoint = "yourDomain";
      
      // Create a ClientConfiguration instance and modify the default parameters based on your requirements. 
      var conf = new ClientConfiguration();
      
      // Specify that a CNAME can be used as an endpoint to create the OssClient instance. A CNAME record specifies the mapping relationship between a custom domain name and a bucket. 
      conf.IsCname = true;
      
      // Create an OSSClient instance. 
      var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);                    

      Android

      // Specify the custom domain name. 
      String endpoint = "yourEndpoint";
      // Specify the temporary AccessKey pair obtained from STS. 
      String accessKeyId = "yourAccessKeyId";
      String accessKeySecret = "yourAccessKeySecret";
      // Specify the security token obtained from STS. 
      String securityToken = "yourSecurityToken";
      
      OSSCredentialProvider credentialProvider = new OSSStsTokenCredentialProvider(accessKeyId, accessKeySecret, securityToken);
      // Create an OSSClient instance. 
      OSSClient oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider);

      Go

      package main
      
      import (
          "fmt"
          "github.com/aliyun/aliyun-oss-go-sdk/oss"
          "os"
      )
      func main(){
          // Obtain access credentials from environment variables. Before you run the sample code, make sure that the environment variables are configured. 
          provider, err := oss.NewEnvironmentVariableCredentialsProvider()
          if err != nil {
              fmt.Println("Error:", err)
              os.Exit(-1)
          }    
      
          // Set yourEndpoint to the custom domain name of the bucket. 
          // Set oss.UseCname to true to enable CNAME. CNAME is used to map a custom domain name to a bucket. 
          client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider),oss.UseCname(true))
          if err != nil {
              fmt.Println("Error:", err)
              os.Exit(-1)
          }
      
          fmt.Printf("client:%#v\n", client)
      }

      iOS

      // Specify a custom domain name. 
      NSString *endpoint = @"yourEndpoint";
      // Specify the temporary AccessKey pair obtained from STS. An AccessKey pair consists of an AccessKey ID and an AccessKey secret. 
      NSString *accessKeyId = @"yourAccessKeyId";
      NSString *accessKeySecret = @"yourAccessKeySecret";
      // Specify the security token obtained from STS. 
      NSString *securityToken = @"yourSecurityToken";
      
      id<OSSCredentialProvider> credentialProvider = [[OSSStsTokenCredentialProvider alloc] initWithAccessKeyId:accessKeyId secretKeyId:accessKeySecret securityToken:securityToken];
      OSSClient *client = [[OSSClient alloc] initWithEndpoint:endpoint credentialProvider:credentialProvider];

      C++

      #include <alibabacloud/oss/OssClient.h>
      using namespace AlibabaCloud::OSS;
      
      int main(void)
      {
          /* Initialize the information about the account that is used to access OSS. */
                  
          /* Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. */
          std::string Endpoint = "yourEndpoint";
          
          /* Initialize resources, such as network resources. */
          InitializeSdk();
      
          ClientConfiguration conf;
          /* Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. */
          auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
          OssClient client(Endpoint, credentialsProvider, conf);   
      
          /* Release resources, such as network resources. */
          ShutdownSdk();
          return 0;
      }

      C

      #include "oss_api.h"
      #include "aos_http_io.h"
      # Specify the custom domain name. */
      const char *endpoint = "yourCustomEndpoint";
      
      void init_options(oss_request_options_t *options) {
          options->config = oss_config_create(options->pool);
          /* Use a char* string to initialize aos_string_t. */
          aos_str_set(&options->config->endpoint, endpoint);
          /* Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. */  
          aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
          aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
          /* Enable CNAME and map the custom domain name to your bucket. */
          options->config->is_cname = 1;
          options->ctl = aos_http_controller_create(options->pool, 0);
      }
      int main() {
          aos_pool_t *p;
          oss_request_options_t *options;
          /* Initialize global variables. You need to initialize global variables only once in the program lifecycle. */
          if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
              return -1;
          }
          /* Initialize the memory pool and options. */
          aos_pool_create(&p, NULL);
          options = oss_request_options_create(p);
          init_options(options);
          /* The logic code. In this example, the logic code is omitted. */
          /* Release the memory pool. This operation releases the memory resources allocated for the request. */
          aos_pool_destroy(p);
          /* Release global resources that are allocated. You need to release global resources only once in the program lifecycle. */
          aos_http_io_deinitialize();
          return 0;
      }

      Ruby

      require 'aliyun/oss'
      
      client = Aliyun::OSS::Client.new(
        # Specify the custom domain name that you want to map to the bucket. 
        endpoint: 'http://example.com',
        # Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
        access_key_id: ENV['OSS_ACCESS_KEY_ID'],
        access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
        cname: true)
      )
    3. OSSClientインスタンスを使用してGeneratePresignedUrl操作を呼び出し、オブジェクトの署名付きURLを取得します。

      さまざまなプログラミング言語のサンプルコードについては、「URLにV1署名を含める」をご参照ください。

    ossutil の使用

    1. 設定ファイルを使用して、デフォルトのバケット名とカスタムドメイン名の間のマッピングを設定します。 詳細については、「カスタムドメイン名の指定」をご参照ください。

    2. signコマンドを実行して、バケット内のオブジェクトの署名付きURLを生成します。 詳細は、「sign」をご参照ください。

    永続オブジェクトURLの取得

    警告

    有効期限が切れない永続オブジェクトURLを取得するには、オブジェクトのACLをpublic-readに設定します。 オブジェクトのACLをpublic-readに設定すると、すべてのユーザーがインターネット経由でオブジェクトにアクセスできます。これにより、データリークやOSSの高額な請求が発生する可能性があります。 一時的なURLを使用することを推奨します。

    オブジェクトの永続URLを取得するには、次の手順を実行します。

    1. オブジェクトのACLをpublic-readに設定します。

      詳細については、「オブジェクトACL」をご参照ください。

    2. カスタムドメイン名とオブジェクト名を連結してオブジェクトURLを生成します。

      パブリック読み取りオブジェクトのURLに署名情報を含める必要はありません。 パブリック読み取りオブジェクトのURLの形式は、http:// YourDomainName/ObjectNameです。

      たとえば、中国 (杭州) リージョンのexamplebucketバケットにexample.jpgオブジェクトが含まれており、o static.example.comにマップされている場合、オブジェクトのURLが https://static.example.com/example.jpg されます。

  3. オブジェクトURLを使用して、ブラウザからオブジェクトにアクセスします。

    2023-11-07_11-01-40.png

次に何をすべきか

HTTPSアクセスの設定

HTTPSプロトコルは、HTTPに基づいてSSLプロトコルとTLSプロトコルを統合し、データ送信の強力な暗号化保護を提供します。 カスタムドメイン名を使用してHTTPS経由でマップされたバケット内のオブジェクトにアクセスするには、SSL証明書を購入し、OSSでSSL証明書をホストする必要があります。 詳細については、「カスタムドメイン名の証明書のホスト」をご参照ください。

Alibaba Cloud CDNを使用したOSSへのアクセスの高速化

Alibaba Cloud CDNを使用して、バケットのカスタムドメインをCDN高速化ドメイン名にマッピングすることで、バケットへのアクセスを高速化できます。 Alibaba Cloud CDNに基づくアクセスアクセラレーションは、アクセス速度と安定性の向上に役立ちます。 詳細については、「Map accelerated domain names」をご参照ください。

hotlink保護の設定

ホットリンクからバケットを保護するために、リファラーホワイトリストまたはブラックリストを設定し、空のリファラーヘッダーを持つリクエストがバケットへのアクセスを管理することを許可するかどうかを指定できます。 詳細については、「ホットリンク保護」をご参照ください。

国境を越えたデータ伝送を加速

クロスボーダーアクセスの速度と安定性を向上させるために、バケットのカスタムドメイン名をバケットのOSS高速化ドメイン名にマッピングできます。 詳細については、「Map accelerated domain names」をご参照ください。

静的 Web サイトホスティングの設定

静的Webサイトをバケットでホストし、バケットのカスタムドメイン名を使用してWebサイトにアクセスする場合は、静的Webサイトホスティングを設定する必要があります。 詳細については、「概要」をご参照ください。

よくある質問

既存のホスト名がCNAMEレコードで使用されているホスト名と同じであるため、CNAMEレコードを自動的に追加できなかったことを示すエラーが表示された場合はどうすればよいですか。

考えられる原因:

  • ホスト名の競合。 ホスト名は、aレコードなどの異なるタイプのDNSレコードによって使用されます。

  • 重複レコード: ホスト名は別のCNAMEレコードで使用されます。 たとえば、同じCNAMEレコードを手動で追加しているとします。

この問題を解決するには、Alibaba Cloud DNSコンソールに移動し、ビジネス要件に基づいて操作を実行します。

  • ホスト名を使用する既存のDNSレコードを保持する場合は、カスタムドメインマッピングに別のサブドメインを使用します。

  • 既存のDNSレコードを保持したくない場合:

    • 既存のDNSレコードがCNAMEレコードでない場合は、既存のレコードを削除し、同じホスト名を使用し、バケットのデフォルトドメイン名に解決されるCNAMEレコードを追加します。

    • 既存のDNSレコードがCNAMEレコードの場合、バケットのドメイン名を指すようにレコードを変更します。

カスタムドメイン名がすでに別のバケットにマップされている場合はどうすればよいですか。

カスタムドメイン名をマップ解除し、目的のバケットにマップする必要があります。 詳細については、「」をご参照ください。ドメイン名をマップするときに、ドメイン名が別のバケットにマップされていることを示すエラーメッセージが返された場合はどうすればよいですか。

NeedVerifyDomainOwnership

ドメインの所有権を確認する必要があります。 詳細については、「」をご参照ください。カスタムドメイン名をバケットにマップするときにNeedVerifyDomainOwnershipエラーコードが返された場合はどうすればよいですか?

カスタムドメイン名を使用してブラウザからオブジェクトにアクセスすると、オブジェクトをプレビューできないのはなぜですか。

CNAMEレコードが有効になった後、カスタムドメイン名を使用してオブジェクトをプレビューできない場合は、次の設定を確認してください。

設定

原因

解決策

OSS

Content-Typeヘッダーの値が実際のオブジェクトタイプと一致しません。 この場合、ブラウザはオブジェクトを正しく解析またはレンダリングできず、オブジェクトのみをダウンロードできます。

オブジェクトタイプに基づいてContent-Typeヘッダーの値を変更します。 詳細については、「」をご参照ください。Content-Typeヘッダーの設定方法を教えてください。

Content-Dispositionヘッダーはattachmentに設定されます。 この場合、Content-Disposition: attachmentヘッダーは、オブジェクトのコンテンツを表示する代わりに、オブジェクトをダウンロードするようにブラウザーをトリガーします。

Content-Dispositionヘッダーをinlineに設定します。 詳細については、「オブジェクトメタデータの管理」をご参照ください。

CDN

ポイントオブプレゼンス (POP) にキャッシュされたリソースは更新されません。

POPにキャッシュされたリソースを更新します。 詳細については、「リソースの削除とプリフェッチ」をご参照ください。

ブラウザ

お使いのブラウザは、オブジェクトをプレビューするためのファイル形式をサポートしていません。 たとえば、ブラウザでは、XLS、DOC、PPT、またはPDFファイルをプレビューできません。

ブラウザにプラグインをインストールして、特定の形式のファイルをプレビューします。

WAFに接続され、コンテンツを含むドメイン名をマップできますか?

はい。Web Application Firewall (WAF) に接続され、コンテンツを含むドメイン名をOSSバケットにマッピングできます。 WAFとCNAMEは別々に動作し、競合しません。

カスタムドメイン名がバケットにマッピングされた後、マッピング前に生成されたオブジェクトURLを使用して、バケット内のオブジェクトにアクセスできますか?

はい、できます。 オブジェクトURLの生成方法の詳細については、「オブジェクトとオブジェクトURLの共有」をご参照ください。

カスタムドメイン名を使用したアクセスは、インターネット経由のアクセスと同じですか?

ほとんどの場合、カスタムドメイン名はインターネット経由でアクセスされます。 カスタムドメインをバケットにマップすると、カスタムドメイン名はデフォルトでバケットのパブリックドメイン名にマップされます。 カスタムドメイン名を使用してオブジェクトにアクセスすると、リクエスタはブラウザでオブジェクトをプレビューできます。

カスタムバケットドメイン名を使用してオブジェクトにアクセスするときに、オブジェクトがダウンロードされるようにするにはどうすればよいですか。

バケットのカスタムドメイン名を使用してブラウザからオブジェクトにアクセスするときにオブジェクトをダウンロードする場合は、Content-Dispositionattachmentに設定します。 詳細については、「」をご参照ください。バケットのカスタムドメインを使用してオブジェクトにアクセスする場合、OSSバケットからオブジェクトを強制的にダウンロードするにはどうすればよいですか。

カスタムドメイン名をマップ解除するにはどうすればよいですか?

カスタムドメイン名を使用する必要がなくなった場合は、次の手順を実行してカスタムドメイン名をマップ解除できます。

  1. Alibaba Cloud CDNでカスタムドメイン名を使用する場合は、バケットのCDNアクセラレーションを無効にします。

    バケットのCDN高速化を無効にするには、オリジンサーバーの設定を変更して、CDN高速化ドメイン名をバケットのデフォルトドメイン名からマップ解除します。 詳細については、「オリジンサーバーの設定」をご参照ください。

  2. カスタムドメイン名のマップを解除します。

    1. OSSコンソールにログインします。

    2. 左側のナビゲーションウィンドウで、バケットリスト をクリックします。 [バケット] ページで、目的のバケットを見つけてクリックします。

    3. 左側のナビゲーションツリーで、[バケット設定] > [ドメイン名] を選択します。

    4. [ドメイン名] ページで、カスタムドメイン名を見つけて、マッピング設定の管理[アクション] 列に表示されます。

    5. [マッピング設定の管理] パネルで、[マップの解除] をクリックします。 表示されるメッセージで、OKをクリックします。

  3. カスタムドメイン名に関連するDNSレコードを削除します。

    カスタムドメイン名をマップ解除した後、カスタムドメイン名のTXTレコードとCNAMEレコードを削除します。 詳細については、「DNSレコードの削除」をご参照ください。

関連するAPI操作

  • ドメイン所有権検証用のCNAMEトークンを作成するために呼び出すことができるAPI操作の詳細については、「CreateCnameToken」をご参照ください。

  • ドメイン所有権の検証のためにCNAMEトークンを照会するために呼び出すことができるAPI操作の詳細については、「GetCnameToken」をご参照ください。

  • カスタムドメイン名をバケットにマップするために呼び出すことができるAPI操作の詳細については、「PutCname」をご参照ください。

  • バケットのドメイン名を指すすべてのCNAMEレコードを照会するために呼び出すことができるAPI操作の詳細については、「ListCname」をご参照ください。

  • バケットのドメイン名を指すCNAMEレコードを削除するために呼び出すことができるAPI操作の詳細については、「DeleteCname」をご参照ください。

  • TXTレコードまたはCNAMEレコードを追加するために呼び出すことができるAPI操作の詳細については、「AddDomainRecord」をご参照ください。