相关文章推荐
闯红灯的松球  ·  python脚本-通过数据库建表语句生成表格 ...·  1 年前    · 
眼睛小的乌冬面  ·  mysql如何使用正则替换字段中所有字母 ...·  1 年前    · 
买醉的钥匙  ·  ChatGPT大更新!联网/插件功能无需排队 ...·  2 年前    · 
腹黑的书包  ·  ibm db2 ...·  2 年前    · 
发财的李子  ·  生成并运行 C++ 控制台应用项目 | ...·  2 年前    · 
Code  ›  绑定自定义域名至Bucket默认域名实现预览文件_对象存储(OSS)-阿里云帮助中心
阿里云oss 域名绑定 阿里云域名 域名解析
https://help.aliyun.com/zh/oss/user-guide/map-custom-domain-names-5
发呆的生姜
1 月前
大模型 产品 解决方案 文档与社区 权益中心 定价 云市场 合作伙伴 支持与服务 了解阿里云
AI 助理
备案 控制台
官方文档
有奖调研
输入文档关键字查找
绑定自定义域名至Bucket默认域名

绑定自定义域名至Bucket默认域名

更新时间:
产品详情
我的收藏
重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

出于安全考虑,当您通过 Bucket 默认域名访问某些文件时,可能会触发强制下载或禁止下载。如果您希望在浏览器中正常预览或下载这些文件,您需要为 Bucket 绑定自定义域名,并通过自定义域名访问 OSS 文件。绑定自定义域名不会影响 Bucket 默认域名,您可以继续通过 Bucket 默认域名访问 OSS 文件。

使用场景

  • 预览文件 :出于安全考虑,通过 OSS 默认 Bucket 域名访问文件时,OSS 会强制增加下载响应头,导致浏览器强制下载文件。使用自定义域名访问文件不会强制增加下载响应头,从而实现在浏览器中预览文件。关于使用 OSS 的默认 Bucket 域名访问文件,触发自动下载的生效时间和生效对象,请参见 附录:强制下载命中的 x-oss-ec 规则 。

  • 访问.apk 或.ipa 文件 :出于安全考虑,通过 OSS 默认 Bucket 域名访问.apk 或.ipa 文件时,OSS 会返回 400 错误,错误码为 ApkDownloadForbidden 。使用自定义域名访问.apk 或.ipa 文件不会被阻断。

  • 品牌形象和专业性 :绑定自定义域名,增强品牌形象和专业性,增加用户信任。

  • 防止域名被拦截 :绑定自定义域名,避免默认域名被拦截,确保资源正常访问。

  • 访问方便性 :使用自定义域名访问 OSS Bucket,更加简便,利于访问分享资源。

  • 链接的持久性 :绑定自定义域名,确保链接持久性,即使存储位置变化,仍可访问资源。

使用限制

  • 不支持绑定中文域名。

  • 域名未在图片处理绑定。

  • 每个域名只能绑定至一个 Bucket。

  • 每个 Bucket 最多可以绑定 100 个域名。

  • 通过 OSS 管理控制台绑定自定义域名时,不允许绑定泛域名(将域名前缀设置为*,从而将主域名的所有子域名都指向 Bucket 默认域名)。通过 CDN 加速 OSS 时,允许绑定泛域名,但该域名不会在 OSS 管理控制台显示。

  • 绑定的自定义域名中涉及的顶级域名必须满足指定后缀的要求,否则会被视为无效域名,最终导致域名绑定失败。更多信息,请参见 顶级域名分类解析 。

前提条件

  • 已 创建存储空间 。

  • 已 注册域名 。支持绑定非阿里云注册的域名。如果您还未注册域名,您可以在阿里云域名服务平台注册域名。

  • 如果要绑定的 Bucket 在中国内地,确保域名已备案,且账号已实名认证。如何备案和实名认证,请参见 ICP 备案流程 、 个人实名认证 、 企业实名认证 。

操作步骤

步骤一:绑定自定义域名

根据域名所属服务提供商(可在 域名信息查询(WHOIS) 页面查询)和所属账号(可在 云解析 DNS 控制台 查询),参考对应的步骤将域名绑定至 OSS Bucket。

绑定当前阿里云账号注册的域名

将当前阿里云账号注册的域名,绑定至 OSS Bucket 的操作步骤如下:

  1. 登录 OSS 管理控制台 。

  2. 单击 Bucket 列表 ,然后单击目标 Bucket 名称。

  3. 在左侧导航栏,选择 Bucket 配置 > 域名管理 。

  4. 在 域名管理 页面,单击 绑定域名 。

  5. 在 绑定域名 面板,输入不带协议的自定义域名,例如 static.example.com ,然后单击 确认绑定 。

    自定义域名示例

    场景

    域名示例

    描述

    静态网站托管

    example.com

    使用主域名,用户可以通过主域名访问托管在 OSS 上的完整网站内容。

    静态资源服务

    static.example.com

    使用子域名,用于集中管理和提供网站的静态资源(如图片、样式表和脚本等)。

    图片服务

    images.example.com

    使用子域名,为网站或移动应用提供图片资源。

    视频存储和播放

    video.example.com

    使用子域名,以存储和快速访问视频内容。

    文件共享和下载

    downloads.example.com

    使用子域名,提供便捷的文件下载服务。

    备份和日志存储

    backup.example.com

    使用子域名,用于存储备份数据或日志文件,简化数据管理流程。

    API 文档托管

    docs.example.com

    使用子域名,用于展示 API 文档,方便开发者进行访问。

  6. 添加 CNAME 记录,将自定义域名 static.example.com 解析至被绑定的 Bucket 的默认外网域名。

    自动添加

    在 绑定域名 面板,开启 自动添加 CNAME 记录 。

    1.png

    开启后, 云解析 DNS 会自动添加一条 CNAME 记录。示例如下: 1.png

    手动添加

    如果没有在 绑定域名 面板,开启 自动添加 CNAME 记录 ,您需要在 云解析 DNS 控制台 手动添加一条 CNAME 记录,否则绑定的自定义域名不会生效。

    1. 登录 云解析 DNS 控制台 。

    2. 在 公网 DNS 解析 > 权威域名解析 ,单击目标域名右侧的 解析设置 。

    3. 单击 添加记录 ,填写域名解析信息。

      参数

      说明

      示例值

      记录类型

      选择 CNAME 记录将域名解析指向另一个域名

      CNAME

      主机记录

      填写要绑定的域名的前缀。

      static

      解析请求来源

      解析域名时使用的线路。 建议选择 默认 ,系统将自动选择最佳线路。

      默认

      记录值

      填写 Bucket 的外网访问域名。Bucket 域名的结构为 <bucketname>.<endpoint> 。关于不同地域的外网 Endpoint,请参见 OSS 地域和访问域名 。

      examplebucket.oss-cn-hangzhou.aliyuncs.com

      TTL

      域名的更新周期,保留默认值即可。

      说明

      生效 TTL 的时间有一定的延迟,请以实际为准。

      10 分钟

    4. 单击 确定 。

      完成后, 云解析 DNS 会出现一条 CNAME 记录。示例如下: 1.png

绑定其他阿里云账号注册的域名

将阿里云 A 账号注册的域名,绑定至阿里云 B 账号的 OSS Bucket 的操作步骤如下:

  1. 使用阿里云 B 账号,获取 TXT 记录的主机记录和记录值。

    1. 登录 OSS 管理控制台 。

    2. 单击 Bucket 列表 ,然后单击目标 Bucket 名称。

    3. 在左侧导航栏,选择 Bucket 配置 > 域名管理 。

    4. 在 域名管理 页面,单击 绑定域名 。

    5. 在 绑定域名 面板,输入不带协议的要绑定的阿里云 A 账号的自定义域名,例如 static.example.com ,然后复制页面显示的 主机记录 和 记录值 。

      自定义域名示例

      场景

      域名示例

      描述

      静态网站托管

      example.com

      使用主域名,用户可以通过主域名访问托管在 OSS 上的完整网站内容。

      静态资源服务

      static.example.com

      使用子域名,用于集中管理和提供网站的静态资源(如图片、样式表和脚本等)。

      图片服务

      images.example.com

      使用子域名,为网站或移动应用提供图片资源。

      视频存储和播放

      video.example.com

      使用子域名,以存储和快速访问视频内容。

      文件共享和下载

      downloads.example.com

      使用子域名,提供便捷的文件下载服务。

      备份和日志存储

      backup.example.com

      使用子域名,用于存储备份数据或日志文件,简化数据管理流程。

      API 文档托管

      docs.example.com

      使用子域名,用于展示 API 文档,方便开发者进行访问。

  2. 使用阿里云 A 账号,添加 TXT 记录。

    1. 登录 云解析 DNS 控制台 。

    2. 在域名解析列表中,单击目标域名右侧的 解析设置 。

    3. 单击 添加记录 ,填写域名解析信息。

      参数

      说明

      示例值

      记录类型

      选择域名指向的类型为 TXT。

      TXT

      主机记录

      阿里云云解析 DNS 已自动帮你填写了主域名。因此,填写时,不需要手动填写主域名部分。

      • 如果绑定的是主域名,填写 _dnsauth 。例如域名为 example.com ,填写 _dnsauth 。

      • 如果绑定的是子域名,填写 _dnsauth.<域名前缀> 。例如域名为 static.example.com ,填写 _dnsauth.static 。

      _dnsauth.static

      解析请求来源

      解析域名时使用的线路。 建议选择 默认 ,系统将自动选择最佳线路。

      默认

      记录值

      填写使用阿里云 B 账号获取的 TXT 记录中的 CnameToken。

      b0d777f7ccddeae93358d908ed59****

      TTL

      域名的更新周期,保留默认值即可。

      说明

      生效 TTL 的时间有一定的延迟,请以实际为准。

      10 分钟

    4. 单击 确定 。

  3. 使用阿里云 B 账号,在 OSS 控制台的 绑定域名 面板,单击 验证域名所有权并绑定 。

  4. 使用阿里云 A 账号,添加 CNAME 记录。

    1. 在域名解析列表中,单击目标域名右侧的 解析设置 。

    2. 单击 添加记录 ,填写域名解析信息。

      参数

      说明

      示例值

      记录类型

      选择域名指向的类型为 CNAME。

      CNAME

      主机记录

      根据域名前缀填写主机记录。

      • 如果是主域名,例如 example.com ,输入 @ 。

      • 如果是子域名,输入域名的前缀。例如域名为 static.example.com ,输入 static。

      static

      解析请求来源

      解析域名时使用的线路。 建议选择 默认 ,系统将自动选择最佳线路。

      默认

      记录值

      填写 Bucket 的外网访问域名。Bucket 域名的结构为 <bucketname>.<endpoint> 。关于不同地域的外网 Endpoint,请参见 OSS 地域和访问域名 。

      examplebucket.oss-cn-hangzhou.aliyuncs.com

      TTL

      域名的更新周期,保留默认值即可。

      说明

      生效 TTL 的时间有一定的延迟,请以实际为准。

      10 分钟

    3. 单击 确定 。

绑定非阿里云账号注册的域名

将在其他域名服务提供商注册的域名,绑定至 OSS Bucket 的操作步骤如下:

  1. 在阿里云 OSS,生成 TXT 记录的主机记录和记录值。

    1. 登录 OSS 管理控制台 。

    2. 单击 Bucket 列表 ,然后单击目标 Bucket 名称。

    3. 在左侧导航栏,选择 Bucket 配置 > 域名管理 。

    4. 在 域名管理 页面,单击 绑定域名 。

    5. 在 绑定域名 面板,输入不带协议的在其他域名服务提供商注册的域名,例如 static.example.com ,然后复制页面显示的 主机记录 和 记录值 。

      自定义域名示例

      场景

      域名示例

      描述

      静态网站托管

      example.com

      使用主域名,用户可以通过主域名访问托管在 OSS 上的完整网站内容。

      静态资源服务

      static.example.com

      使用子域名,用于集中管理和提供网站的静态资源(如图片、样式表和脚本等)。

      图片服务

      images.example.com

      使用子域名,为网站或移动应用提供图片资源。

      视频存储和播放

      video.example.com

      使用子域名,以存储和快速访问视频内容。

      文件共享和下载

      downloads.example.com

      使用子域名,提供便捷的文件下载服务。

      备份和日志存储

      backup.example.com

      使用子域名,用于存储备份数据或日志文件,简化数据管理流程。

      API 文档托管

      docs.example.com

      使用子域名,用于展示 API 文档,方便开发者进行访问。

  2. 在域名服务提供商的 DNS 解析平台,参考下表添加 TXT 记录。

    参数

    说明

    示例值

    记录类型

    选择域名指向的类型为 TXT。

    TXT

    主机记录

    如果其他域名服务提供商的 DNS 解析平台已自动帮你填写了主域名,填写时,不需要手动填写主域名部分。

    • 如果绑定的是主域名,填写 _dnsauth 。例如域名为 example.com ,填写 _dnsauth 。

    • 如果绑定的是子域名,填写 _dnsauth.<域名前缀> 。例如域名为 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

    记录值

    填写 Bucket 的外网访问域名。Bucket 域名的结构为 <bucketname>.<endpoint> 。关于不同地域的外网 Endpoint,请参见 OSS 地域和访问域名 。

    examplebucket.oss-cn-hangzhou.aliyuncs.com

步骤二:验证自定义域名

绑定自定义域名后,当用户通过自定义域名发起请求时,该请求会通过 DNS 解析到 Bucket 默认域名。您可以使用 nslookup 或 dig 命令来验证自定义域名解析是否生效。

nslookup

将 static.example.com 替换为您要查询的域名,然后执行以下命令。

nslookup -type=CNAME static.example.com

域名解析结果显示绑定的 Bucket 的外网访问域名,说明自定义域名解析已生效。

1.png

dig

将 static.example.com 替换为您要查询的域名,然后执行以下命令。

dig CNAME static.example.com

域名解析结果显示绑定的 Bucket 的外网访问域名,说明自定义域名解析已生效。

2.png

步骤三:使用自定义域名

自定义域名解析生效后,您可以使用 HTTP 协议和自定义域名构造包含签名和有效期的 URL,URL 的格式为 http://YourDomain/ObjectName?签名参数 ,然后使用该 URL 访问 OSS 文件。

  1. 获取预签名 URL。

    使用 OSS 控制台

    1. 登录 OSS 管理控制台 。

    2. 单击 Bucket 列表 ,然后单击目标 Bucket 名称。

    3. 在左侧导航栏,选择 文件管理 > 文件列表 。

    4. 在文件列表页面,单击目标文件名称。

    5. 在 详情 面板的 自有域名 ,选择绑定的自定义域名,其他保持默认值,然后单击 复制文件 URL 。

      image

    使用图形化管理工具 ossbrowser

    ossbrowser 支持 Object 级别的操作与控制台支持的操作类似,请按照 ossbrowser 界面指引完成获取预签名 URL 的操作。如何下载 ossbrowser,请参见 图形化管理工具 ossbrowser 2.0(预览版) 。

    1. 使用自定义域名登录 ossbrowser。

      image

    1. 获取文件 URL。

      1.png

    使用阿里云 SDK

    使用自定义域名新建 OssClient 并生成预签名 URL。

    Java

    import com.aliyun.oss.*;
    import com.aliyun.oss.common.auth.*;
    import com.aliyun.oss.common.comm.SignVersion;
    import com.aliyun.oss.model.GeneratePresignedUrlRequest;
    import java.net.URL;
    import java.util.Date;
    public class Demo {
        public static void main(String[] args) throws Throwable {
            // yourCustomEndpoint请填写您的自定义域名。例如http://static.example.com。
            String endpoint = "yourCustomEndpoint";
            // 请填写您存储空间所在的Region信息,例如cn-hangzhou
            String region = "cn-hangzhou";
            // 填写Bucket名称,例如examplebucket。
            String bucketName = "examplebucket";
            // 填写Object完整路径,例如exampleobject.txt。Object完整路径中不能包含Bucket名称。
            String objectName = "exampleobject.txt";
            // 从环境变量中获取访问凭证。运行本代码示例之前,请先配置环境变量
            EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
            // 创建OSSClient实例。
            // 当OSSClient实例不再使用时,调用shutdown方法以释放资源。
            ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
            // 请注意,设置true开启CNAME选项
            clientBuilderConfiguration.setSupportCname(true);
            // 显式声明使用 V4 签名算法
            clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
            OSS ossClient = OSSClientBuilder.create()
                    .endpoint(endpoint)
                    .credentialsProvider(credentialsProvider)
                    .clientConfiguration(clientBuilderConfiguration)
                    .region(region)
                    .build();
            try {
                // 指定生成的预签名URL过期时间,单位为毫秒。本示例以设置过期时间为1小时为例。
                Date expiration = new Date(new Date().getTime() + 3600 * 1000L);
                // 生成预签名URL。
                GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, objectName, HttpMethod.GET);
                // 设置过期时间。
                request.setExpiration(expiration);
                // 通过HTTP GET请求生成预签名URL。
                URL signedUrl = ossClient.generatePresignedUrl(request);
                // 打印预签名URL。
                System.out.println("signed url for getObject: " + signedUrl);
            } catch (OSSException oe) {
                System.out.println("Caught an OSSException, which means your request made it to OSS, "
                        + "but was rejected with an error response for some reason.");
                System.out.println("Error Message:" + oe.getErrorMessage());
                System.out.println("Error Code:" + oe.getErrorCode());
                System.out.println("Request ID:" + oe.getRequestId());
                System.out.println("Host ID:" + oe.getHostId());
            } catch (ClientException ce) {
                System.out.println("Caught an ClientException, which means the client encountered "
                        + "a serious internal problem while trying to communicate with OSS, "
                        + "such as not being able to access the network.");
                System.out.println("Error Message:" + ce.getMessage());
            } finally {
                if (ossClient != null) {
                    ossClient.shutdown();
    }

    Python

    # -*- coding: utf-8 -*-
    import oss2
    from oss2.credentials import EnvironmentVariableCredentialsProvider
    # 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
    auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
    # 填写Endpoint对应的Region信息,例如cn-hangzhou。注意,v4签名下,必须填写该参数
    region = "cn-hangzhou"
    # 填写自定义域名,例如static.example.com。
    endpoint = 'http://static.example.com'
    # yourBucketName填写存储空间名称。
    bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region, is_cname=True)
    # 填写Object完整路径,例如exampledir/exampleobject.txt。Object完整路径中不能包含Bucket名称。
    object_name = 'exampledir/exampleobject.txt'
    # 生成下载文件的预签名URL,有效时间为600秒。
    # 生成预签名URL时,OSS默认会对Object完整路径中的正斜线(/)进行转义,从而导致生成的预签名URL无法直接使用。
    # 设置slash_safe为True,OSS不会对Object完整路径中的正斜线(/)进行转义,此时生成的预签名URL可以直接使用。
    url = bucket.sign_url('GET', object_name, 600, slash_safe=True, params=params)
    print('预签名URL的地址为:', url)

    Node.js

    const OSS = require("ali-oss");
    // 定义一个生成预签名 URL 的函数
    async function generateSignatureUrl(fileName) {
      // 获取预签名URL
      const client = await new OSS({
          // 使用自定义域名作为Endpoint。
          endpoint: 'http://static.example.com', 
          // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
          accessKeyId: process.env.OSS_ACCESS_KEY_ID,
          accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
          bucket: 'examplebucket',
          // yourregion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
          region: 'oss-cn-hangzhou',
          authorizationV4: true,
          cname: true
      return await client.signatureUrlV4('GET', 3600, {
          headers: {} // 请根据实际发送的请求头设置此处的请求头
      }, fileName);
    // 调用函数并传入文件名
    generateSignatureUrl('yourFileName').then(url => {
      console.log('Generated Signature URL:', url);
    }).catch(err => {
      console.error('Error generating signature URL:', err);
    });

    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\OssClient;
    use OSS\Core\OssException;
    use OSS\Http\RequestCore;
    use OSS\Http\ResponseCore;
    use OSS\Credentials\EnvironmentVariableCredentialsProvider;
    // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
    $provider = new EnvironmentVariableCredentialsProvider();
    // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为http://static.example.com。
    $endpoint = "http://static.example.com";
    // 填写Bucket名称。
    $bucket= "examplebucket";
    // 填写不包含Bucket名称在内的Object完整路径。
    $object = "exampleobject.txt";
    // 指定预签名URL的过期时间为600s(最长可达32400s)。
    $timeout = 600;
    try {
        $config = array(  
            "provider" => $provider,
            "endpoint" => $endpoint,
            'signatureVersion'=>OssClient::OSS_SIGNATURE_VERSION_V4,
            "cname"	=> true,
            "region"=> "cn-hangzhou"
        $ossClient = new OssClient($config);
        // 生成预签名URL。
        $signedUrl = $ossClient->signUrl($bucket, $object, $timeout, "GET");
        print_r($signedUrl);
    } catch (OssException $e) {
        printf(__FUNCTION__ . ": FAILED\n");
        printf($e->getMessage() . "\n");
        return;
    }

    Go

    package main
    import (
    	"context"
    	"flag"
    	"log"
    	"time"
    	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
    	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
    // 定义全局变量
    var (
    	region     string // 存储区域
    	bucketName string // 存储空间名称
    	objectName 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.")
    	flag.StringVar(&objectName, "object", "", "The name of the object.")
    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")
    	// 检查object名称是否为空
    	if len(objectName) == 0 {
    		flag.PrintDefaults()
    		log.Fatalf("invalid parameters, object name required")
    	// 加载默认配置并设置凭证提供者和区域
    	cfg := oss.LoadDefaultConfig().
    		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
    		WithRegion(region).
    		WithEndpoint("http://static.example.com").
    		WithUseCName(true)
    	// 创建OSS客户端
    	client := oss.NewClient(cfg)
    	// 生成GetObject的预签名URL
    	result, err := client.Presign(context.TODO(), &oss.GetObjectRequest{
    		Bucket: oss.Ptr(bucketName),
    		Key:    oss.Ptr(objectName),
    		//RequestPayer: oss.Ptr("requester"), // 指定请求者身份
    		oss.PresignExpires(10*time.Minute),
    	if err != nil {
    		log.Fatalf("failed to get object presign %v", err)
    	log.Printf("request method:%v\n", result.Method)
    	log.Printf("request expiration:%v\n", result.Expiration)
    	log.Printf("request url:%v\n", result.URL)
    	if len(result.SignedHeaders) > 0 {
    		//当返回结果包含预签名头时,使用预签名URL发送GET请求时也包含相应的请求头,以免出现不一致,导致请求失败和预签名错误
    		log.Printf("signed headers:\n")
    		for k, v := range result.SignedHeaders {
    			log.Printf("%v: %v\n", k, v)
    }

    使用命令行工具 ossutil

    使用自定义域名通过 presign(生成预预签名 URL) 命令生成文件的预签名 URL。

    ossutil presign oss://examplebucket/exampleobject.txt --endpoint "http://static.example.com” --addressing-style "cname"

    如需 ossutil 命令自动使用自定义域名,而无需每次在命令中手动指定自定义域名,您可以在 配置文件 中添加自定义域名,

  2. 在浏览器中访问预签名 URL。

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

相关 API

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

  • 关于获取已创建的 CnameToken 的接口,请参见 GetCnameToken 。

  • 关于为某个 Bucket 绑定自定义域名的接口,请参见 PutCname 。

  • 关于查询某个 Bucket 下绑定的所有自定义域名的接口,请参见 ListCname 。

  • 关于删除某个 Bucket 已绑定的自定义域名的接口,请参见 DeleteCname 。

  • 关于使用阿里云解析 DNS 添加 TXT 解析记录或 CNAME 解析记录的接口,请参见 AddDomainRecord - 根据传入参数添加解析记录 。

后续操作

通过 HTTPS 协议访问 OSS 文件

自定义域名在未配置 SSL 证书的情况下,默认不支持 HTTPS 协议访问。通过 HTTPS 协议访问自定义域名时,浏览器会显示不安全连接警告。为了通过 HTTPS 协议访问 OSS 文件,需要为自定义域名 配置证书 。

httpsandpresigned

使用不带签名的长期有效的 URL 访问 OSS 文件

警告

如需获取不存在签名和过期时间的 URL,即 URL 的格式为 http://YourDomainName/ObjectName ,您需要将文件设置为公共读。设置为公共读后,互联网上任何用户都可以访问该文件,这有可能造成您数据的外泄以及费用激增,建议您使用包含签名和过期时间的 URL。

您可以通过以下两种方式将文件设置为公共读:

  • 设置文件为公共读 :将 OSS 文件的权限设置为公共读。在这种情况下,文件的 URL 将没有有效期,任何人都可以访问。为了防止文件被其他网站盗用,您需要在 OSS 中配置 防盗链 。

  • CDN 加速 OSS 资源 :保持 OSS 文件的权限为私有,通过 CDN 提供公共读访问。在这种情况下,文件的 URL 将没有有效期,任何人都可以访问。为了防止文件被其他网站盗用,您需要在 CDN 配置 防盗链 。

https

防止 OSS 文件被其他网站盗用

默认情况下,任何网站都可以显示您的 OSS 文件,这可能导致额外的请求费用和下行流量费用。您可以通过 防盗链 ,设置 Referer 黑名单或白名单来限制访问来源。配置防盗链后,未授权的网站将无法显示您的 OSS 文件,同时失败的请求也不会产生请求费用和下行流量费用。

防盗链

使用 OSS 托管静态网站

如果您使用 OSS 作为静态网站的服务器,直接存储和提供静态文件(如 HTML、CSS、JavaScript 等),以便用户通过互联网访问这些内容,除了绑定自定义域名外,您还需要为 Bucket 设置 静态网站托管 。

1

提升 OSS 文件在不同地域的下载速度

OSS Bucket 中的文件存储在某个地域(例如杭州)。为了提高不同地域用户下载 OSS 文件的速度,您可以使用 CDN 加速 OSS 。开启 CDN 加速后,OSS 文件会分发到各个地域的 CDN 缓存节点。用户在访问文件时,可以从离他们更近的缓存节点获取内容,从而有效提升下载速度。

说明

在使用 CDN 加速 OSS 的情况下,建议将 CDN 域名用于文件下载,而对于文件上传,您可以继续使用原有的 Bucket 默认域名。

image

提升 OSS 文件的远距离传输速度

OSS Bucket 中的文件存储在某个地域(例如杭州)。非中国内地的用户访问时,可能因传输距离较远导致上传和下载体验非常差。为提升 OSS 文件的远距离传输速度,您可以开启 传输加速 ,将自定义域名绑定到 OSS 的传输加速域名,而不是 Bucket 默认域名。

1

常见问题

设置了 Content-Disposition: inline ,无法预览 ?

为确保数据传输安全,使用 OSS 的 Bucket 默认域名( <bucketName>.oss-<regionId>.aliyuncs.com )或传输加速域名( <bucketName>.oss-accelerate.aliyuncs.com )访问文件时,OSS 会强制增加下载响应头( x-oss-force-download: true 和 Content-Disposition: attachment )。浏览器检测到 Content-Disposition: attachment 时,会强制下载。使用 OSS 域名访问文件时,请求流程如下:

2.png

您可以在已注册的域名(例如 example.com)上自定义一个子域名(例如 static.example.com),并将其绑定至 Bucket,然后使用自定义域名访问文件。此时,OSS 不会在返回中强制增加下载响应头。由于 OSS 没有设置 Content-Disposition 字段,浏览器将根据文件的 MIME 类型自动决定处理方式。对于大多数常见的文件类型,浏览器会直接显示文件内容,而不是进行下载。

1.png

不支持选择 OSS 作为备案的云服务怎么办?

对于直接使用阿里云 OSS 托管静态网站的用户,由于 OSS 服务不支持备案,您可以采取以下步骤来满足备案要求:

  1. 购买用于备案服务器:建议您购买一台最低配置、时长至少 3 个月的 ECS 实例 ,例如 ECS 99 套餐 ,以满足备案条件。

  2. 进行备案:使用该 ECS 实例进行相应的备案操作。

  3. 使用备案后的域名:备案成功后,您可以将域名指向阿里云 OSS,实现静态网站的托管。

已有主机记录与当前添加 CNAME 记录生成的主机记录相同,暂时无法自动添加 CNAME 记录

原因

当已有主机记录与当前自动添加的 CNAME 记录相同时,可能有以下几种情况:

  • 冲突记录:已存在一个使用相同主机记录的记录,但记录类型可能与 CNAME 不同。例如,可能已经存在一个 A 记录。

  • 重复记录:已存在一个使用相同主机记录的记录,且记录类型为 CNAME 记录。这可能是因为先前已手动添加了相同的记录。

解决方案

在这种情况下,您可以在阿里云 云解析 DNS 控制台 根据您的需求来决定如何处理:

  • 如果您希望保留已有的冲突或重复主机记录,您可以重新自定义一个子域名进行绑定。

  • 如果您不希望保留已有的主机记录:

    • 如果是冲突记录,您可以删除该记录,然后创建 CNAME 记录解析至 Bucket 域名。

    • 如果是重复记录,您可以修改记录,将其解析至 Bucket 域名。

域名绑定在其他 Bucket 上怎么办?

域名绑定在其他 Bucket 上了,有以下两种解决方法:

  • 自定义一个子域名。例如,OSS 提示 oss.example.com 已经被其他 Bucket 绑定了,您可以自定义一个子域名,例如 static.example.com,然后绑定这个新的子域名。

  • 重新绑定。例如,OSS 提示 oss.example.com 已经被其他 Bucket 绑定了,您需要解除绑定了这个域名的 Bucket,然后重新绑定到当前 Bucket 上。

    如何解除 Bucket 绑定的域名

    1. 如果开启了 CDN 加速,需要先关闭 CDN 加速。

      您需要修改 CDN 加速服务的源站信息,使加速域名不再指向 OSS 的 Bucket 域名。具体操作,请参见 配置源站 。

    2. 解绑自定义域名。

      1. 登录 OSS 管理控制台 。

      2. 单击 Bucket 列表 ,然后单击目标 Bucket 名称。

      3. 在左侧导航栏,选择 Bucket 配置 > 域名管理 。

      4. 在域名列表中,单击目标域名右侧的 域名绑定配置 。

      5. 在 域名绑定配置 面板,单击 解除绑定 , 然后单击 确定 。

    3. 删除域名解析。

      解绑自定义域名后,您需要手动删除配置的 TXT 解析记录和 CNAME 解析记录。具体操作,请参见 删除记录 。

NeedVerifyDomainOwnership

你需要验证域名所有权。具体操作,请参见 绑定自定义域名时返回错误码 NeedVerifyDomainOwnership,怎么办? 。

绑定自定义域名后,还是无法预览文件?

如果绑定自定义域名并且 CNAME 解析生效后,仍然无法预览文件,请排查以下设置:

设置

异常原因

解决方法

OSS

Content-Type 的值与实际的文件类型不一致。浏览器无法正确解析和渲染该文件,而只能将其作为下载文件处理。

根据文件类型,设置合理的 Content-Type。具体操作,请参见 如何设置 Content-Type(MIME)? 。

Content-Disposition 被设置为 attachment 。浏览器检测到 Content-Disposition: attachment 时,会触发下载行为。

将 Content-Disposition 设置为 inline 。具体步骤,请参见 管理文件元数据 。

CDN

缓存资源未刷新。

刷新 CDN 缓存资源。具体步骤,请参见 刷新和预热资源 。

浏览器

不支持预览该格式的文件,例如.doc、.ppt、.pdf、.mov 文件。

  • 为浏览器安装插件,以支持预览该格式的文件。

  • 不需要为浏览器安装插件,对于.doc、.ppt、.pdf 等办公文件,进行 WebOffice 在线预览 处理,以支持预览该格式的文件。

  • 不需要为浏览器安装插件,对于.mov 等视频文件,进行 视频转码 处理,以支持预览该格式的文件。

已经正常解析到 WAF 且有内容的域名可以绑定至 Bucket 吗?

可以正常绑定。WAF 解析和 CNAME 解析不会发生冲突,因为它们在不同的层面上进行解析和操作。如何将 WAF 接入 OSS,请参见 CDN 回源 OSS 私有 Bucket 场景下串接 WAF 最佳实践 。

绑定自定义域名后,之前的文件 URL 是否可以继续使用?

可以继续使用。如何获取之前的文件 URL,请参见 使用预预签名 URL 下载文件 。

使用自定义域名就是公网访问吗?

一般是通过公网访问。公网用户通常需要以预览的方式访问您的 OSS 文件,因此自定义域名默认解析到 Bucket 的外网访问域名。

如何使用自定义域名访问 OSS 文件时是下载行为?

如需实现使用自定义域名访问 OSS 文件时是下载行为,您可以将 Content-Disposition 设置为 attachment 。具体操作,请参见 如何配置通过自定义域名访问 OSS 文件实现强制下载? 。

配置了域名解析,没有生效?

可能是本地 DNS 缓存导致,您可以使用以下命令清除 DNS 缓存,然后尝试访问。

Window

 ipconfig /flushdns

macOS

 sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder

Linux

 sudo systemd-resolve --flush-caches

为什么在使用 <video> 标签时,如果服务器设置了 Content-Disposition: attachment ,某些浏览器仍然会选择播放视频,而不是下载?

使用 <video> 标签时,浏览器会主动请求视频流,并优先考虑 MIME 类型。如果服务器返回的 MIME 类型适合播放(如 video/mp4 ),浏览器会选择播放,而忽略 Content-Disposition: attachment 的指示。

上一篇:域名管理 下一篇:绑定自定义域名至OSS传输加速域名
该文章对您有帮助吗?
 
推荐文章
闯红灯的松球  ·  python脚本-通过数据库建表语句生成表格_根据建表语句生成表结构-CSDN博客
1 年前
眼睛小的乌冬面  ·  mysql如何使用正则替换字段中所有字母 mysql正则表达式提取字符串_detailtoo的技术博客_51CTO博客
1 年前
买醉的钥匙  ·  ChatGPT大更新!联网/插件功能无需排队,Plus用户下周即可体验|netflix_新浪财经_新浪网
2 年前
腹黑的书包  ·  ibm db2 errorcode=-4214 sqlstate=28000-掘金
2 年前
发财的李子  ·  生成并运行 C++ 控制台应用项目 | Microsoft Learn
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号