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

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

最終更新日:Feb 23, 2024

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

前提条件

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

  • ルートドメイン名が登録されています。 Alibaba Cloudに登録されていないドメイン名をバケットにマッピングできます。 ドメイン名がない場合は、Alibaba Cloudドメイン名で登録できます。 詳細については、「Alibaba Cloudでのドメイン名の登録」をご参照ください。

  • ドメイン名のマッピング先のバケットが中国本土にある場合は、ドメイン名に対してICP (Internet Content Provider) の申請が取得されます。 ICP申請が完了していないドメイン名は、Alibaba Cloud ICP申請システムを使用してマッピングできます。 ドメイン名のICP申請を申請していない場合は、Alibaba Cloud ICP申請システムを使用してICP申請を申請できます。 詳細については、「ICPファイリングアプリケーションの概要」をご参照ください。

シナリオ

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

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

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

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

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

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

背景情報

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

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

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

2.png

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

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

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

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. カスタムドメイン名のマッピング パネルで、バケットにマップするドメイン名を [ドメイン名] フィールドに入力し、CNAMEレコードを自動的に追加する をオンにして、提出する をクリックします。

    1.png

    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] などの [ドメイン名] フィールドに入力し、ドメイン名の所有権の検証 をクリックします。 ホスト名をコピーします。

      重要

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

      4.png

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

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

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

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

      パラメーター

      説明

      レコードタイプ

      TXTを選択します。

      TXT

      ホスト名

      以前に記録されたTXTレコードのホスト名を入力します。

      **** 59e5-4bbd-aef4-8e401dc13a0a.static

      DNSリクエストソース

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

      デフォルト

      レコード値

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

      oss-domain-verfication=17ca4f6a1247f459fb310 ****

      TTL期間

      レコードをキャッシュに保持する期間を選択します。 デフォルト値を維持します。

      説明

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

      10 分

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

  3. OSSコンソールの カスタムドメイン名のマッピング パネルに戻ります。 TXTレコードを追加したをクリックしTXT検証ファイルを追加しました。投稿を続行します。.

  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. カスタムドメイン名のマッピング パネルで、マップするカスタムドメイン名を入力し、ドメイン名の所有権の検証 をクリックし、[ホスト名][値] をコピーします。

      重要

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

      4.png

  2. ドメインプロバイダーのDNSプラットフォームで、次の表に示す設定を使用してTXTレコードを追加します。

    項目

    説明

    レコードタイプ

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

    TXT

    ホスト名

    以前に記録されたホスト名を入力します。

    **** 59e5-4bbd-aef4-8e401dc13a0a.static

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

    oss-domain-verfication=17ca4f6a1247f459fb310 ****

  3. OSSコンソールの カスタムドメイン名のマッピング パネルに戻ります。 TXTレコードを追加したをクリックしTXT検証ファイルを追加しました。投稿を続行します。.

  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経由でバケット内のオブジェクトにアクセスできます。

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

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

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

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

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

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

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

    2. 指定された期間内にアクセス可能なプライベートオブジェクトURLを取得するには、次の方法を使用します。 プライベートオブジェクトのURLは、http:// YourDomain/ObjectName?SignatureInformation形式に従います。

    OSS コンソールの使用

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

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

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

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

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

      2.png

    ossbrowser の使用

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

    OSS SDKの使用

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

    2. Java

      // カスタムドメイン名を指定します。 
      String endpoint = "yourEndpoint";
      
      // 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、環境変数が設定されていることを確認してください。 
      EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
      
      // ClientBuilderConfigurationを作成し、ビジネス要件に基づいてパラメーターのデフォルト値を変更します。 
      ClientBuilderConfiguration conf = new ClientBuilderConfiguration();
      
      // CNAMEを使用するかどうかを指定します。 CNAMEは、カスタムドメイン名をバケットにマップするために使用されます。 
      conf.setSupportCname(true);
      
      // OSSClientインスタンスを作成します。 
      OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider, conf);
      
      // OSSClientインスタンスをシャットダウンします。 
      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';
      }
      
      OSS\OssClientを使用します。OSS\Core\OssExceptionを使用します。// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。  
      $accessKeyId = getenv("OSS_ACCESS_KEY_ID");
      $accessKeySecret = getenv("OSS_ACCESS_KEY_SECRET");
      // この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。 
      $end point = "https://oss-cn-hangzhou.aliyuncs.com";
      
      try {
          // trueは、CNAMEが有効であることを示します。 CNAMEが有効になっている場合、カスタムドメイン名がバケットにマップされます。 
          $ossClient = new OssClient($accessKeyId, $accessKeySecret, $end point, true);
      } catch (OssException $e) {
          print $e->getMessage();
      }
                          

      Node.js

      const OSS = require('ali-OSS ')
      
      const client = new OSS({
        // バケットにアクセスするには、バケットのエンドポイントとしてカスタムドメイン名を使用します。 
        エンドポイント: 'http:// img.example.com '、 
        // 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
        accessKeyId: process.env.OSS_ACCESS_KEY_ID、
        accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET、
        cname: true
      }); 

      Python

      # -*-コーディング: utf-8 -*-
      oss2のインポート
      oss2.credentialsからEnvironmentVariableCredentialsProviderをインポート
      
      # 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、環境変数が設定されていることを確認してください。 
      auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
      
      # バケットにマップされるカスタムドメイン名を指定します。 (例:example.com)。 
      cname = 'http:// example.com'
      
      # バケットの名前を指定し、is_cnameをTrueに設定してCNAMEを有効にします。 CNAMEは、カスタムドメイン名をバケットにマップするために使用されます。 
      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> ドキュメント </title>
          <script src="https://gosspublic.alicdn.com/aliyun-oss-sdk-6.18.0.min.js"></script>
        </head>
        <body>
          <script>
            const client = new OSS({
              // カスタムドメイン名を入力します。 (例:example.com)。 
              エンドポイント: "example.com" 、
              // Security Token Service (STS) から取得した一時的なAccessKeyペアを指定します。 AccessKeyペアは、AccessKey IDとAccessKeyシークレットで構成されます。 
              accessKeyId: "yourAccessKeyId" 、
              accessKeySecret: "yourAccessKeySecret" 、
              // STSから取得したセキュリティトークンを指定します。 
              stsToken: 'yourSecurityToken' 、
              // バケットの名前を指定します。 例: examplebucket. 
              bucket: "examplebucket" 、
              cname: true、
            });    
                
          </script>
        </body>
      </html>
      

      .NET

      Aliyun.OSSを使用した
      
      Aliyun.OSS.Common; を使用
      // 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
      var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
      var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
      // カスタムドメイン名を指定します。 
      const文字列endpoint = "yourDomain";
      
      // ClientConfigurationインスタンスを作成します。 Modify parameters as required. 
      var conf = new ClientConfiguration();
      
      // CNAMEレコードを使用できることを指定します。 CNAMEレコードは、カスタムドメイン名とバケット間のマッピング関係を指定します。 
      conf.IsCname = true;
      
      // OSSClientインスタンスを作成します。 
      var client = new OssClient (エンドポイント、accessKeyId、accessKeySecret、conf); 

      Android

      // カスタムドメイン名を指定します。 
      String endpoint = "yourEndpoint";
      // STSから取得した一時的なAccessKeyペアを指定します。 AccessKeyペアは、AccessKey IDとAccessKeyシークレットで構成されます。 
      文字列accessKeyId = "yourAccessKeyId";
      文字列accessKeySecret = "yourAccessKeySecret";
      // STSから取得したセキュリティトークンを指定します。 
      文字列securityToken = "yourSecurityToken";
      
      OSSCredentialProvider credentialProvider = new OSSStsTokenCredentialProvider(accessKeyId、accessKeySecret、securityToken);
      // OSSClientインスタンスを作成します。 
      OSSClient oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider); 

      Go

      パッケージメイン
      
      import (import (import)
          "fmt"
          "github.com/aliyun/aliyun-oss-go-sdk/oss"
          "os"
      )
      func main(){
          // 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、環境変数が設定されていることを確認してください。 
          provider, err := oss.NewEnvironmentVariableCredentialsProvider()
          if err! =nil {
              fmt.Println("Error:", err)
              os.Exit(-1)
          }    
      
          // yourEndpointをバケットのカスタムドメイン名に設定します。 
          // oss.UseCnameをtrueに設定して、CNAMEを有効にします。 CNAMEは、カスタムドメイン名をバケットにマップするために使用されます。 
          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

      // カスタムドメイン名を指定します。 
      NSString * endpoint = @ "yourEndpoint";
      // STSから取得した一時的なAccessKeyペアを指定します。 AccessKey ペアは、AccessKey ID と AccessKey Secret で構成されます。 
      NSString * accessKeyId = @ "yourAccessKeyId";
      NSString * accessKeySecret = @ "yourAccessKeySecret";
      // STSから取得したセキュリティトークンを指定します。 
      NSString * securityToken = @ "yourSecurityToken";
      
      id<OSSCredentialProvider> credentialProvider = [[OSSStsTokenCredentialProvider alloc] initWithAccessKeyId:accessKeyId secretKeyId: accessKeySecurityToken: securityToken];
      OSSClient * client = [[OSSClient alloc] initWithEndpoint:endpoint credentialProvider:credentialProvider]; 

      C++

      #include <alibabacloud/oss/OssClient.h>
      名前空間listaCloud::OSSを使用します。int main(void)
      {
          /* OSSへのアクセスに使用されるアカウントに関する情報を初期化します。 */
                  
          /* バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 */
          std::string Endpoint = "yourEndpoint";
          
          /* ネットワークリソースなどのリソースを初期化します。 */
          InitializeSdk();
      
          ClientConfiguration conf;
          /* 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 */
          auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
          OssClientクライアント (Endpoint, credentialsProvider, conf);   
      
          /* ネットワークリソースなどのリソースを解放します。 */
          ShutdownSdk();
          0を返します。} 

      C

      #include "oss_api.h"
      # 「aos_http_io.h」を含める
      # カスタムドメイン名を指定します。 * /
      const char * endpoint = "yourCustomEndpoint";
      
      void init_options(oss_request_options_t * オプション) {
          options->config = oss_config_create(options->pool);
          /* char * stringを使用して、aos_string_t型のデータを初期化します。 */
          aos_str_set(&options->config->endpoint, endpoint);
          /* 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 */  
          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"));
          /* CNAMEを有効にして、カスタムドメイン名をバケットにマッピングします。 */
          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;
          /* グローバル変数を初期化します。 グローバル変数を初期化する必要があるのは、プログラムのライフサイクルで1回だけです。 */
          if (aos_http_io_initialize(NULL, 0))! =AOSE_OK) {
              return -1;
          }
          /* メモリプールとオプションを初期化します。 */
          aos_pool_create(&p, NULL);
          options = oss_request_options_create(p);
          init_options(options);
          /* ロジックコード。 この例では、論理コードは省略されている。 */
          /* メモリプールを解放します。 この操作により、リクエストに割り当てられたメモリリソースが解放されます。 */
          aos_pool_destroy(p);
          /* 割り当てられたグローバルリソースを解放します。 グローバルリソースをリリースする必要があるのは、プログラムのライフサイクル内で1回だけです。 */
          aos_http_io_deinitialize();
          0を返します。} 

      Ruby

      'aliyun/oss 'が必要です
      
      client = Aliyun::OSS::Client.new (
        # バケットにマッピングするカスタムドメイン名を指定します。 
        エンドポイント: 'http:// example.com '、
        # 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
        access_key_id: ENV['OSS_ACCESS_KEY_ID '] 、
        access_key_secret: ENV['OSS_ACCESS_KEY_SECRET ']
        cname: true)
      ) 
    3. OSSClientインスタンスを使用してGeneratePresignedUrl操作を呼び出し、オブジェクトの署名付きURLを取得します。

      さまざまなプログラミング言語のコードサンプルについては、「署名V1を使用した署名付きURLの作成」をご参照ください。

    ossutil の使用

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

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

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

    警告

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

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

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

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

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

      パブリック読み取りオブジェクトのカスタムURLに署名情報を含める必要はありません。 パブリック読み取りオブジェクトのカスタムURLは、https:// 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経由でマップされたバケットにアクセスするには、SSL証明書をアップロードする必要があります。 詳細については、「ホストSSL証明書」をご参照ください。

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

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

ホットリンク保護

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

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

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

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

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

よくある質問

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

このエラーは、次の要因によって発生します。

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

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

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

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

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

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

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

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

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

ドメインマッピングに対して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アプリケーションファイアウォール (WAF) に接続され、コンテンツを含むドメイン名をOSSバケットにマッピングできます。 WAFとCNAMEは別々に動作し、競合を引き起こしません。

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

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

カスタムドメイン名はインターネットアクセスを使用していますか?

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

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

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

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

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

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

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

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

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

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

    3. [ドメイン名] ページで、カスタムドメイン名を見つけ、[操作] 列の [マッピング設定の管理] をクリックします。

    4. [マッピング設定の管理] パネルで、[マップの解除] をクリックします。 表示されるメッセージで、[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」をご参照ください。