文档

Go绑定自定义域名

更新时间:

文件(Object)上传至存储空间(Bucket)后,OSS会自动生成文件URL,您可以直接通过文件URL(即Bucket外网访问域名)访问该文件。如果您希望通过自定义域名访问这些Object,需要添加CNAME记录将自定义域名绑定至Object所在的Bucket。

注意事项

  • 本文以华东1(杭州)外网Endpoint为例。如果您希望通过与OSS同地域的其他阿里云产品访问OSS,请使用内网Endpoint。关于OSS支持的Region与Endpoint的对应关系,请参见访问域名和数据中心

  • 本文以从环境变量读取访问凭证为例。如何配置访问凭证,请参见配置访问凭证

  • 本文以OSS域名新建OSSClient为例。如果您希望通过自定义域名、STS等方式新建OSSClient,请参见初始化

创建CnameToken

以下代码用于创建CnameToken。

package main

import (
    "fmt"
    "github.com/aliyun/aliyun-oss-go-sdk/oss"
    "os"
)

func main() {
    /// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
    provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // 创建OSSClient实例。
    // yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
    client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }
    // 填写Bucket名称,例如examplebucket。
    bucketName := "examplebucket"
    // 填写自定义域名。
    cname := "www.example.com"
    cbResult,err := client.CreateBucketCnameToken(bucketName,cname)
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }
    fmt.Printf("Cname: %s\n",cbResult.Cname)
    fmt.Printf("Token: %s\n",cbResult.Token)
    fmt.Printf("ExpireTime: %s\n",cbResult.ExpireTime)
}

获取CnameToken

以下代码用于获取CnameToken。

package main

import (
	"fmt"
	"github.com/aliyun/aliyun-oss-go-sdk/oss"
	"os"
)

func main() {
	// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	// 创建OSSClient实例。
	// yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
	client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	// 填写Bucket名称,例如examplebucket。
	bucketName := "examplebucket"
	// 填写自定义域名。
	cname := "www.example.com"
	// 获取CnameToken。
	cbResult, err := client.GetBucketCnameToken(bucketName, cname)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	// 打印绑定的Cname名称。
	fmt.Printf("Cname: %s\n", cbResult.Cname)
	// 打印OSS返回的CnameToken。
	fmt.Printf("Token: %s\n", cbResult.Token)
	// 打印CnameToken的过期时间。
	fmt.Printf("ExpireTime: %s\n", cbResult.ExpireTime)
}

添加CNAME记录

绑定自定义域名

package main

import (
	"fmt"
	"github.com/aliyun/aliyun-oss-go-sdk/oss"
	"os"
)

func main() {
	// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	// 创建OSSClient实例。
	// yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
	client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	// 填写Bucket名称,例如examplebucket。
	bucketName := "examplebucket"
	// 填写自定义域名。
	cname := "www.example.com"
	err = client.PutBucketCname(bucketName, cname)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	fmt.Printf("Put Bucket Cname Success!")
}

绑定自定义域名和证书

package main

import (
    "fmt"
    "github.com/aliyun/aliyun-oss-go-sdk/oss"
    "os"
)

func main() {
    /// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
    provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // 创建OSSClient实例。
    // yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
    client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }
    // 填写Bucket名称,例如examplebucket。
    bucketName := "examplebucket"
    var putCnameConfig oss.PutBucketCname
    var CertificateConfig oss.CertificateConfiguration
    // 填写自定义域名。
    putCnameConfig.Cname = "www.example.com"
    // 填写证书公钥。
    certificate := "-----BEGIN CERTIFICATE-----MIIGeDCCBOCgAwIBAgIRAPj4FWpW5XN6kwgU7*******-----END CERTIFICATE-----"
    // 填写证书私钥。
    privateKey := "-----BEGIN CERTIFICATE-----MIIFBzCCA++gT2H2hT6Wb3nwxjpLIfXmSVcV*****-----END CERTIFICATE-----"
    // 填写证书ID。
    CertificateConfig.CertId = "92******-cn-hangzhou"
    CertificateConfig.Certificate = certificate
    CertificateConfig.PrivateKey = privateKey
    CertificateConfig.Force = true
    putCnameConfig.CertificateConfiguration = &CertificateConfig
    err = client.PutBucketCnameWithCertificate(bucketName,putCnameConfig)
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }
    fmt.Printf("Bind Certificate Success!")
}

解除证书

如果您不希望该域名继续使用该证书,可以执行解绑证书的操作。

package main

import (
    "fmt"
    "github.com/aliyun/aliyun-oss-go-sdk/oss"
    "os"
)

func main() {
    /// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
    provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // 创建OSSClient实例。
    // yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
    client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }
    // 填写Bucket名称,例如examplebucket。
    bucketName := "examplebucket"
    var putCnameConfig oss.PutBucketCname
    var CertificateConfig oss.CertificateConfiguration
    // 填写自定义域名。
    putCnameConfig.Cname = "www.example.com"
    // 删除证书。
    CertificateConfig.DeleteCertificate = true
    putCnameConfig.CertificateConfiguration = &CertificateConfig
    err = client.PutBucketCnameWithCertificate(bucketName,putCnameConfig)
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }
    fmt.Printf("Unbind Certificate Success!")
}

查看CNAME记录

以下代码用于查看CNAME记录。

package main

import (
	"fmt"
	"github.com/aliyun/aliyun-oss-go-sdk/oss"
	"os"
)

func main() {
	// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	// 创建OSSClient实例。
	// yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
	client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	// 填写Bucket名称,例如examplebucket。
	bucketName := "examplebucket"
	// 查看CNAME记录。
	cnResult, err := client.ListBucketCname(bucketName)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	var certificate oss.Certificate
	fmt.Printf("Bucket:%s\n", cnResult.Bucket)
	fmt.Printf("Owner:%s\n", cnResult.Owner)
	if len(cnResult.Cname) > 0 {
		for _, cnameInfo := range cnResult.Cname {
			// 打印自定义域名。
			fmt.Printf("Domain:%s\n", cnameInfo.Domain)
			// 打印绑定自定义域名的时间。
			fmt.Printf("LastModified:%s\n", cnameInfo.LastModified)
			// 打印域名所处状态。
			fmt.Printf("Status:%s\n", cnameInfo.Status)
			if cnameInfo.Certificate != certificate {
				// 打印证书来源。
				fmt.Printf("Type:%s\n", cnameInfo.Certificate.Type)
				// 打印证书ID。
				fmt.Printf("CertId:%s\n", cnameInfo.Certificate.CertId)
				// 打印证书状态。
				fmt.Printf("Status:%s\n", cnameInfo.Certificate.Status)
				// 打印证书绑定时间。
				fmt.Printf("CreationDate:%s\n", cnameInfo.Certificate.CreationDate)
				// 打印证书签名。
				fmt.Printf("Fingerprint:%s\n", cnameInfo.Certificate.Fingerprint)
				// 打印证书有效期起始时间。
				fmt.Printf("ValidStartDate:%s\n", cnameInfo.Certificate.ValidStartDate)
				// 打印证书有效期终止时间。
				fmt.Printf("ValidEndDate:%s\n", cnameInfo.Certificate.ValidEndDate)
			}
		}
	}
}

删除CNAME记录

以下代码用于删除CNAME记录。

package main

import (
    "fmt"
    "github.com/aliyun/aliyun-oss-go-sdk/oss"
    "os"
)

func main() {
	// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	// 创建OSSClient实例。
	// yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
	client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
    // 填写Bucket名称,例如examplebucket。
    bucketName := "examplebucket"
    // 填写自定义域名。
    cname := "www.example.com"
    // 删除CNAME记录。
    err = client.DeleteBucketCname(bucketName,cname)
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }
    fmt.Println("Delete Bucket Cname Success!")
}

相关文档

  • 关于创建域名所有权验证所需的CnameToken的API接口说明,请参见CreateCnameToken

  • 关于获取CnameToken的API接口说明,请参见GetCnameToken

  • 关于添加CNAME记录的API接口说明,请参见PutCname

  • 关于查看CNAME记录的API接口说明,请参见ListCname

  • 关于删除CNAME记录的API接口说明,请参见DeleteCname

  • 本页导读 (1)
文档反馈