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

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

最終更新日:Jan 13, 2025

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

前提条件

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

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

  • ドメイン名のマッピング先のバケットが中国本土にある場合、ドメイン名のインターネットコンテンツプロバイダ (ICP) 申請が取得され、Alibaba Cloudアカウントの実名検証が完了します。 IPCファイリングと実名検証の詳細については、「ICPファイリングプロセス」および「Alibaba Cloudアカウントの実名検証に関するFAQ」をご参照ください。

シナリオ

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

  • へのアクセス要求。apkまたは。ipaオブジェクト: セキュリティ上の理由から、OSSはに対するアクセス要求に対して400エラーコードを返します。apkと。デフォルトのドメイン名に基づくipaオブジェクト。 正常にアクセスする。apkまたは。OSSバケットに保存されているipaオブジェクトを使用すると、カスタムドメイン名をバケットのデフォルトドメイン名にマップできます。

  • ブランド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レコードを追加して、static.example.comドメインをバケットのデフォルトドメイン名に指定します。

    CNAMEレコードを自動的に追加する

    CNAMEレコードを自動的に追加する トグルをオンにします。

    1.png

    トグルをオンにすると、CNAMEレコードが自動的にAlibaba Cloud DNSに追加されます。 次の図に、CNAMEレコードの例を示します。1.png

    CNAME レコードを手動で追加

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

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

    2. [パブリックDNS解決] > [権限のあるDNS解決] を選択します。 [権限のあるドメイン名] タブでドメイン名を見つけ、[操作] 列の [DNS設定] をクリックします。

    3. [DNS設定] タブで、[DNSレコードの追加] をクリックします。 [DNSレコードの追加] ダイアログボックスで、次の表に示すパラメーターを設定します。

      パラメーター

      説明

      レコードタイプ

      CNAMEを選択して、ドメイン名をバケットのデフォルトドメイン名に指定します。

      CNAME

      ホスト名

      ドメインプレフィックスを指定します。

      static

      DNSリクエストソース

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

      デフォルト

      レコード値

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

      examplebucket.oss-cn-hangzhou.aliyuncs.com

      TTL

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

      説明

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

      10 分

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

      CNAMEレコードは、Alibaba Cloud DNSのドメイン名のDNSレコードリストに表示されます。 次の図に、CNAMEレコードの例を示します。1.png

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

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

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

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

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

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

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

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

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

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

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

    3. [DNS設定] タブで、[DNSレコードの追加] をクリックします。 [DNSレコードの追加] ダイアログボックスで、次の表に示すパラメーターを設定します。

      パラメーター

      説明

      レコードタイプ

      TXTを選択します。

      TXT

      ホスト名

      ルートドメインは自動的に埋められます。 ルートドメイン部分を手動で入力する必要はありません。

      • ルートドメイン名をマップするには、_dnsauthを入力します。 たとえば、ルートドメインがexample.comの場合、テキストボックスに _dnsauthと入力します。

      • サブドメインをマッピングするには、_dnsauth.<domain prefix> と入力します。 たとえば、static.example.comをバケットにマッピングするには、テキストボックスに _dnsauth.staticと入力します。

      _dnsauth.static

      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など) を入力し、[ホスト名][レコード値] をコピーします。

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

    パラメーター

    説明

    レコードタイプ

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

    TXT

    ホスト名

    DNSプラットフォームが自動的にルートドメインを入力する場合、ルートドメイン部分を入力する必要はありません。

    • ルートドメイン名をマップするには、_dnsauthを入力します。 たとえば、ルートドメインがexample.comの場合、テキストボックスに _dnsauthと入力します。

    • サブドメインをマッピングするには、_dnsauth.<domain prefix> と入力します。 たとえば、static.example.comをバケットにマッピングするには、テキストボックスに _dnsauth.staticと入力します。

    _dnsauth.static

    レコード値

    以前に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レコードが有効になります。

nslookup

次のコマンドのstatic.example.comを実際のドメイン名に置き換えて、コマンドを実行します。

nslookup -type=CNAME static.example.com

次の図は、成功応答のサンプルを示しています。

1.png

掘る

次のコマンドのstatic.example.comを実際のドメイン名に置き換えて、コマンドを実行します。

dig CNAME static.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を取得できます。

    OSS SDKの使用

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

    2. Java

      // Specify a 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,
        authorizationV4: true,
        // Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou.
        region: 'yourRegion',
        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. 
              // Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to oss-cn-hangzhou.
              region: 'yourRegion',
              endpoint: "example.com",
              authorizationV4: true,
              // 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

      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";
      // Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou.
      String region = "yourRegion";
      
      OSSCredentialProvider credentialProvider = new OSSStsTokenCredentialProvider(accessKeyId, accessKeySecret, securityToken);
      ClientConfiguration config = new ClientConfiguration();
      config.setSignVersion(SignVersion.V4);
      // Create an OSSClient instance. 
      OSSClient oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider);
      oss.setRegion(region);

      Go

      package main
      
      import (
      	"log"
      
      	"github.com/aliyun/aliyun-oss-go-sdk/oss"
      )
      
      // Call handleError to handle unrecoverable errors and terminate the program after recording the error messages.
      func handleError(err error) {
      	log.Fatalf("Error: %v", err)
      }
      
      // Use setupClient to create and configure an OSSClient instance and use CNAME as an endpoint.
      // Parameters:
      //
      //	endpoint: the custom domain name that you want to map to the bucket.
      //
      // Return the created OSSClient instance.
      func setupClient(endpoint string) (*oss.Client, error) {
      	// Obtain access credentials from environment variables.
      	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
      	if err != nil {
      		return nil, err
      	}
      
      	// Create an OSSClient instance and use CNAME as an endpoint.
      	// Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. Specify the actual region.
      	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
      	clientOptions = append(clientOptions, oss.Region("yourRegion"))
      	clientOptions = append(clientOptions, oss.UseCname(true))
      	// Specify the version of the signature algorithm.
      	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
      	client, err := oss.New(endpoint, "", "", clientOptions...)
      	if err != nil {
      		return nil, err
      	}
      
      	return client, nil
      }
      
      func main() {
      	// Specify the endpoint of the region in which the bucket is located.
      	// Example: custom-domain-for-your-bucket.com.
      	endpoint := "yourEndpoint"
      
      	// Check whether the environment variables are configured.
      	if endpoint == "" {
      		log.Fatal("Please set yourEndpoint.")
      	}
      
      	// Create and configure an OSSClient instance and use CNAME as an endpoint.
      	client, err := setupClient(endpoint)
      	if err != nil {
      		handleError(err)
      	}
      
      	// Display the client information.
      	log.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. ossutilの設定

    2. サイン

    永続オブジェクト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へのアクセスの高速化

マップアクセラレーションドメイン名

hotlink保護の設定

ホットリンク保護

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

マップアクセラレーションドメイン名

静的 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」をご参照ください。