全部產品
Search
文件中心

Object Storage Service:綁定自訂網域名(Go SDK V2)

更新時間:Aug 02, 2025

檔案(Object)上傳至儲存空間(Bucket)後,OSS 會自動組建檔案的 URL,您可以直接通過該 URL(即 Bucket 的外網訪問網域名稱)訪問檔案。如果您希望使用自訂網域名訪問這些 Object,需要添加 CNAME 記錄將自訂網域名綁定到 Object 所在的 Bucket。

注意事項

  • 本文範例程式碼以華東1(杭州)的地區IDcn-hangzhou為例,預設使用外網Endpoint,如果您希望通過與OSS同地區的其他阿里雲產品訪問OSS,請使用內網Endpoint。關於OSS支援的Region與Endpoint的對應關係,請參見OSS地區和訪問網域名稱

  • 本文以從環境變數讀取存取憑證為例。如何配置訪問憑證,請參見配置訪問憑證

範例程式碼

建立CnameToken

以下代碼用於建立CnameToken。

package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// 定義全域變數
var (
	region     string // 儲存地區
	bucketName string // 儲存空間名稱
)

// init函數用於初始化命令列參數
func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}

func main() {
	// 解析命令列參數
	flag.Parse()

	// 檢查bucket名稱是否為空白
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// 檢查region是否為空白
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// 載入預設配置並設定憑證提供者和地區
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// 建立OSS用戶端
	client := oss.NewClient(cfg)

	// 建立CNAME Token
	request := &oss.CreateCnameTokenRequest{
		Bucket: oss.Ptr(bucketName),
		BucketCnameConfiguration: &oss.BucketCnameConfiguration{
			Domain: oss.Ptr("www.example.com"), // 填寫自訂網域名
		},
	}

	// 執行建立CNAME Token的操作
	result, err := client.CreateCnameToken(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to create bucket cname token %v", err)
	}

	// 輸出CNAME Token資訊
	log.Printf("Cname: %s", *result.CnameToken.Cname)
	log.Printf("Token: %s", *result.CnameToken.Token)
	log.Printf("ExpireTime: %s", *result.CnameToken.ExpireTime)
}

擷取CnameToken

以下代碼用於擷取CnameToken。

package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// 定義全域變數
var (
	region     string // 儲存地區
	bucketName string // 儲存空間名稱
)

// init函數用於初始化命令列參數
func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}

func main() {
	// 解析命令列參數
	flag.Parse()

	// 檢查bucket名稱是否為空白
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// 檢查region是否為空白
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// 載入預設配置並設定憑證提供者和地區
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// 建立OSS用戶端
	client := oss.NewClient(cfg)

	// 建立擷取儲存空間CNAME Token的請求
	request := &oss.GetCnameTokenRequest{
		Bucket: oss.Ptr(bucketName),        // 儲存空間名稱
		Cname:  oss.Ptr("www.example.com"), // 填寫自訂網域名
	}

	// 執行擷取儲存空間CNAME Token的操作
	result, err := client.GetCnameToken(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to get bucket cname token %v", err)
	}

	// 輸出CnameToken資訊
	log.Printf("Cname: %s", result.CnameToken.Cname)
	log.Printf("Token: %s", result.CnameToken.Token)
	log.Printf("ExpireTime: %s", result.CnameToken.ExpireTime)
}

添加CNAME記錄

綁定自訂網域名

package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// 定義全域變數
var (
	region     string // 儲存地區
	bucketName string // 儲存空間名稱
)

// init函數用於初始化命令列參數
func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}

func main() {
	// 解析命令列參數
	flag.Parse()

	// 檢查bucket名稱是否為空白
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// 檢查region是否為空白
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// 載入預設配置並設定憑證提供者和地區
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// 建立OSS用戶端
	client := oss.NewClient(cfg)

	// 建立添加儲存空間CNAME的請求
	request := &oss.PutCnameRequest{
		Bucket: oss.Ptr(bucketName),
		BucketCnameConfiguration: &oss.BucketCnameConfiguration{
			Domain: oss.Ptr("www.example.com"), // 填寫自訂網域名
		},
	}

	// 執行添加儲存空間CNAME的請求
	result, err := client.PutCname(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to put bucket cname %v", err)
	}

	// 列印添加儲存空間CNAME的結果
	log.Printf("put bucket cname result:%#v\n", result)
}

綁定自訂網域名和認證

package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// 定義全域變數
var (
	region     string // 儲存地區
	bucketName string // 儲存空間名稱
)

// init函數用於初始化命令列參數
func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}

func main() {
	// 解析命令列參數
	flag.Parse()

	// 檢查bucket名稱是否為空白
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// 檢查region是否為空白
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// 載入預設配置並設定憑證提供者和地區
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// 建立OSS用戶端
	client := oss.NewClient(cfg)

	// 建立綁定自訂網域名和認證的請求
	request := &oss.PutCnameRequest{
		Bucket: oss.Ptr(bucketName),
		BucketCnameConfiguration: &oss.BucketCnameConfiguration{
			Domain: oss.Ptr("www.example.com"), // 填寫自訂網域名
			CertificateConfiguration: &oss.CertificateConfiguration{
				CertId:      oss.Ptr("92******-cn-hangzhou"),
				Certificate: oss.Ptr("-----BEGIN CERTIFICATE-----MIIFBzCCA++gT2H2hT6Wb3nwxjpLIfXmSVcV*****-----END CERT"),
				PrivateKey:  oss.Ptr("-----BEGIN CERTIFICATE-----MIIFBzCCA++gT2H2hT6Wb3nwxjpLIfXmSVcV*****-----END CERTIFICATE-----"),
				Force:       oss.Ptr(true),
			},
		},
	}

	// 執行綁定自訂網域名和認證的操作
	result, err := client.PutCname(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to put bucket cname %v", err)
	}

	// 列印綁定自訂網域名和認證的結果
	log.Printf("put bucket cname result:%#v\n", result)
}

解除認證

如果您不希望該網域名稱繼續使用該認證,可以執行解除綁定認證的操作。

package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// 定義全域變數
var (
	region     string // 儲存地區
	bucketName string // 儲存空間名稱
)

// init函數用於初始化命令列參數
func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}

func main() {
	// 解析命令列參數
	flag.Parse()

	// 檢查bucket名稱是否為空白
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// 檢查region是否為空白
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// 載入預設配置並設定憑證提供者和地區
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// 建立OSS用戶端
	client := oss.NewClient(cfg)

	// 建立解除綁定認證的請求
	request := &oss.PutCnameRequest{
		Bucket: oss.Ptr(bucketName),
		BucketCnameConfiguration: &oss.BucketCnameConfiguration{
			Domain: oss.Ptr("www.example.com"), // 填寫自訂網域名
			CertificateConfiguration: &oss.CertificateConfiguration{
				DeleteCertificate: oss.Ptr(true), // 解除綁定認證
			},
		},
	}

	// 執行解除綁定認證的操作
	result, err := client.PutCname(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to put bucket cname %v", err)
	}

	// 列印解除綁定認證的結果
	log.Printf("put bucket cname result:%#v\n", result)
}

列舉CNAME記錄

以下代碼用於列舉Bucket下的CNAME記錄。

package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// 定義全域變數
var (
	region     string // 儲存地區
	bucketName string // 儲存空間名稱
)

// init函數用於初始化命令列參數
func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}

func main() {
	// 解析命令列參數
	flag.Parse()

	// 檢查bucket名稱是否為空白
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// 檢查region是否為空白
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// 載入預設配置並設定憑證提供者和地區
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// 建立OSS用戶端
	client := oss.NewClient(cfg)

	// 建立列出儲存空間CNAME的請求
	request := &oss.ListCnameRequest{
		Bucket: oss.Ptr(bucketName),
	}

	// 執行列出儲存空間CNAME的操作
	result, err := client.ListCname(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to list bucket cname %v", err)
	}

	log.Printf("Bucket: %s", result.Bucket)
	log.Printf("Owner: %s", result.Owner)

	if len(result.Cnames) > 0 {
		for _, cnameInfo := range result.Cnames {
			// 列印自訂網域名。
			log.Printf("Domain: %s", cnameInfo.Domain)
			// 列印綁定自訂網域名的時間。
			log.Printf("LastModified: %s", cnameInfo.LastModified)
			// 列印網域名稱所處狀態。
			log.Printf("Status: %s", cnameInfo.Status)
		}
	}
}

刪除CNAME記錄

以下代碼用於刪除CNAME記錄。

package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// 定義全域變數
var (
	region     string // 儲存地區
	bucketName string // 儲存空間名稱
)

// init函數用於初始化命令列參數
func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}

func main() {
	// 解析命令列參數
	flag.Parse()

	// 檢查bucket名稱是否為空白
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// 檢查region是否為空白
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// 載入預設配置並設定憑證提供者和地區
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// 建立OSS用戶端
	client := oss.NewClient(cfg)

	// 建立刪除儲存空間CNAME的請求
	request := &oss.DeleteCnameRequest{
		Bucket: oss.Ptr(bucketName), // 儲存空間名稱
		BucketCnameConfiguration: &oss.BucketCnameConfiguration{
			Domain: oss.Ptr("www.example.com"), // 填寫自訂網域名
		},
	}

	// 執行刪除儲存空間CNAME的操作
	result, err := client.DeleteCname(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to delete bucket cname %v", err)
	}

	// 列印刪除儲存空間CNAME的結果
	log.Printf("delete bucket cname result:%#v\n", result)
}

相關文檔

  • 關於建立網域名稱所有權驗證所需的CnameToken的API介面說明,請參見CreateCnameToken

  • 關於擷取CnameToken的API介面說明,請參見GetCnameToken

  • 關於添加CNAME記錄的API介面說明,請參見PutCname

  • 關於查看CNAME記錄的API介面說明,請參見ListCname

  • 關於刪除CNAME記錄的API介面說明,請參見DeleteCname