在阿里云上给 OSS 配置自定义域名,到这一步卡住的人远比想象中多。域名绑完了,浏览器里敲进去要么 403,要么直接打不开,排查半天才发现问题出在解析、证书或者 Bucket 权限这一层。这篇阿里云OSS自定义域名配置教程,不会从零开始念控制台,而是先把“绑定后为什么访问不了”这个高频故障拆开讲清楚,后面再逐步补齐解析绑定和 HTTPS 证书的设置细节。
本文由 云国际服务商『 云老大 飞弟:@yunlaoda360 / YunLaoDa-云服务器•运维部门•撰写』如需转载请注明!
一、为什么绑定自定义域名后无法访问OSS?

域名绑定成功但在浏览器里访问时页面一片白或直接报错,原因很少是单点故障,它更像由三个环节的配置缺口叠加而成。很多人一上来就怀疑是 HTTPS 证书没配好,实际上在证书生效之前,CNAME 解析和 Bucket 层面的权限设置才是最先应该被验证的两道门槛。下面从最常见的三种情形拆解。
1. 域名解析未生效,用的到底是不是 CNAME?
不少人习惯性地给域名加一条 A 记录指向某个 IP,但 OSS 的 Bucket 域名背后没有固定 IP,A 记录绑上去早晚会失效。正确的做法是配置 CNAME,记录值必须精确指向 <bucket-name>.oss-cn-<region>.aliyuncs.com 格式的 Bucket 域名。可以用 dig <your-domain> CNAME +short 命令验证,如果返回的是 Bucket 域名,说明解析通路已打通;如果返回空或出现 A 记录的结果,就需要回到 DNS 控制台检查记录类型。还有一个容易忽略的点是 TTL,刚添加或修改记录后,本地 ISP 的 DNS 缓存可能还没刷新,等上几分钟再测能减少误判。
2. CNAME 记录值写错,为什么 OSS 控制台不报错?
CNAME 指向了错误的 Bucket 域名或者多拼了一个字符,DNS 解析本身并不会失败,因为记录在语法上仍然是一条合法的 CNAME。问题出在阿里云 OSS 一侧:当请求到达 OSS 时,服务端会校验请求中的 Host 头是否匹配到已绑定的自定义域名,不匹配就直接拒绝。常见失误是把地域节点写错,比如将杭州区域的 oss-cn-hangzhou 写成了 oss-cn-hangzhous,或者忘记在 Bucket 控制台的“域名管理”里添加这条自定义域名并完成所有权验证。所有权验证这一步如果被跳过,即便 DNS 解析正确,OSS 也不会承认这个域名的访问请求,返回的就是一个毫无提示的 403。
3. OSS Bucket 权限设置遗漏,为什么访问时出现 403 或跨域错误?
Bucket 默认的读写权限通常是私有,如果自定义域名只是用来做静态资源分发,需要至少在“权限管理”中将 Bucket 设置为公共读,或者为指定文件设置更高精度的权限策略。另外,如果前端代码通过 Ajax 请求 OSS 上的资源,但未在“跨域设置”里加入自定义域名的来源规则,浏览器会直接拦截响应,报出 CORS 错误。这两个权限配置项常常被当成了“可选步骤”跳过,结果就是解析和证书全部配齐,页面还是加载不出资源。排查时可以直接用 curl -I https://<your-domain>/<object-key> 测试,如果响应码是 403 且响应头中没有 x-oss-request-id,说明请求可能没到达 OSS;如果带该请求 ID 但仍返回 403,那几乎可以确定是 Bucket 权限或防盗链设置的问题。
二、阿里云OSS自定义域名解析配置步骤

绑定自定义域名的核心动作就两步:在域名 DNS 里配一条 CNAME 记录指向 OSS 的 Bucket 域名,再回 OSS 控制台把该域名添加并完成所有权校验。多数踩坑都出在这两件事的衔接上——要么只配了 DNS 没在 OSS 绑定,要么用错了记录类型。下面把三个关键环节拆开说清楚。
1. 如何添加域名解析记录
无论域名托管在阿里云还是其他服务商,操作路径大同小异:进入域名解析列表,添加一条记录,记录类型选 CNAME,主机记录填要用的前缀(如 static),记录值填你的 OSS Bucket 域名,格式是 <bucket>.oss-cn-<region>.aliyuncs.com。TTL 可以先用默认值,生效后可视需要调低。如果域名服务商就在阿里云,解析通常 1-2 分钟就能全球生效;在其他服务商则取决于其与根服务器的同步速度,一般不超过 10 分钟。配置后务必到 OSS 控制台的「域名管理」中添加同一域名并完成验证,否则即便解析生效也会遇到 403 报错,这是容易被忽略的一步。
2. CNAME 与 A 记录的区别
很多用户习惯性地在 DNS 里加 A 记录指向 IP,这在 OSS 上完全行不通。OSS 的接入 IP 是动态变化的,而且面向公网的是负载均衡后的虚拟地址,不存在一个固定 IP 给你绑。正确做法只有 CNAME 一种——把域名的解析权委托给 OSS 的 Bucket 域名,由阿里云的 DNS 系统负责解析出真实 IP。用 A 记录即便短期内碰巧生效,一遇后端扩容、节点迁移就会立刻中断访问。实际运维中,我们见过不止一次因误配 A 记录导致域名偶尔能访问、大部分时间超时的案例,排查半天才发现是记录类型用错。
3. 验证解析是否生效的方法
别光靠浏览器打开看一眼,要用命令行工具确认底层解析结果。推荐两种方式:dig <你的域名> CNAME +short,若返回的字符串正是 OSS 的 Bucket 域名则解析无误;若返回空或直接出现 IP 地址,说明未配置 CNAME 或有缓存干扰。另一种是用 curl -I https://<你的域名>/<某个文件> 看响应头,出现 x-oss-request-id 且状态码 200 就代表整条链路已经贯通。注意解析生效有传播延迟,如果刚加完记录立马测试不生效是正常的,等 5-10 分钟再测会更加可靠。另外,国内地域 OSS 要求域名已完成工信部备案,否则即使解析正确也会被拦截,终端看到的是连接重置或阿里云的备案提醒页面。
三、OSS绑定自定义域名操作指南
在把域名真正挂到Bucket上之前,有一组现实问题必须先理顺:不少团队操作到一半才发现域名没备案,或者把DNS记录配成了A记录,最后访问被OSS直接拦截。实际上,这个过程并不复杂,但步骤之间有强依赖关系,跳过任何一环都会带来莫名其妙的403。
1. 进入OSS控制台操作
登录阿里云控制台后,进入对象存储OSS,在左侧菜单找到“域名管理”。这里看到的默认域名形如 <bucket-name>.oss-cn-hangzhou.aliyuncs.com,虽然可以直接用,但对下游CDN回源和用户感知都不友好。绑定自定义域名的入口就在“绑定用户域名”按钮,点击后会要求输入已在阿里云备案通过的域名——国内地域Bucket这一点是硬性要求,没有备案号系统直接拒绝添加。但令不少人感到意外的是,即使域名备案信息同步正常,这里仍需完成一次所有权验证:要么让系统自动添加TXT记录(适用于域名也在阿里云解析的场景),要么需要手动去DNS控制台加一条特定的TXT记录。这个验证环节不是形式,阿里云会实际发起DNS查询,普通生效时间在3-10分钟。
2. 填写自定义域名与上传文件
域名验证通过后,界面会让你选择是否自动添加CNAME记录。这里建议手动处理,原因在于自动添加只能生成一条指向Bucket地域节点的记录,无法精细控制线路和TTL。正确的CNAME目标应当类似 <bucket-name>.oss-cn-shanghai.aliyuncs.com,且不能用A记录替代,因为OSS的IP会随调度变化。之后在Bucket里上传一个测试文件,比如一个名为 test.html 的静态页面,然后给这个文件设置公共读权限。很多人在“权限管理”里漏了这一步,导致测试时始终返回403 AccessDenied,误以为是解析没生效。如果需要HTTPS,这时就要进入该域名的“证书配置”卡,选用阿里云SSL证书服务签发的免费证书,证书生效后开启“HTTPS强制跳转”功能,否则浏览器会因混合内容问题直接标记页面不安全。
3. 绑定后如何测试访问
解析生效和证书下发之后,不要依赖浏览器地址栏的直观反应,因为浏览器缓存、HSTS策略都可能造成误判。更可靠的方式是用 curl -I https://你的域名/test.html 发一个HEAD请求,关注两个返回头:一是状态码必须为200,二是响应头里必须出现 x-oss-request-id,这说明请求已经穿透回到OSS源站。如果返回301/302跳转,多半是CDN或强制HTTPS配置正在同步;如果返回403,优先检查Bucket权限策略里是否授权给匿名用户读取。还有一些团队失败在域名解析本身,用 dig 你的域名 CNAME +short 可以直接判断当前解析记录是否明确指向Bucket域名,返回结果如果为空或显示出A记录,那就是最基础的那一环还没走通。整个过程下来,正常耗时在15分钟以内,但首次配置往往卡在备案与权限两个高发区。
四、HTTPS证书申请与配置详解

HTTPS 的配置是自定义域名接入 OSS 后最容易“卡住”的一环。从实际处理过的工单看,近七成配了证书却依旧提示“不安全”的案例,根源都不在证书本身,而是证书链拼接、域名匹配或混合内容的问题。在 OSS 场景中,HTTPS 有两条主流实现路径:直接在 OSS 控制台挂载证书,或者前置 CDN 后由 CDN 终结 TLS。后者的性能弹性更好,但会额外引入一层加速成本;前者结构简单,对于非热点分发的静态资源站点已经足够。
1. 免费SSL证书申请途径
目前主流的免费单域名 DV 证书大多通过阿里云 SSL 证书服务签发,品牌为 DigiCert,有效期一年,到期前 30 天支持自动续期。实际申请时要注意两个限制:一是不支持通配符,这意味着 *.example.com 必须单独购买或使用其他方案;二是每个阿里云账号的免费证书配额固定,如果多域名绑定同一 Bucket,可能会吃紧。另一个容易被忽略的渠道是 Let's Encrypt,虽然不直接在 OSS 控制台无缝对接,但配合 Certbot 等工具定期更新后,将证书文件手工上传至“域名管理→证书配置”同样可用。对于不想被单一云厂商锁定的团队,后者反而是更可控的选择。
2. 在OSS控制台开启HTTPS
证书获取完成后,进入对应的 Bucket,在“传输管理→域名管理”中找到已绑定的自定义域名,点击“证书配置”。如果证书已在当前账号的 SSL 证书服务中,直接在下拉列表里选中即可;手动上传的场景则需要把 PEM 格式的公钥和私钥填入,务必补全中间证书链,否则部分移动端或老版本浏览器会判定为不可信。配置完成后,验证的关键一步不是刷新浏览器,而是用 curl -I https://<your-domain>/<object-key> 检查响应头中是否包含 x-oss-request-id 且状态码为 200。曾经有案例因为本地 DNS 缓存导致旧解析残留,用户看到 Chrome 锁图标出现误以为成功,实际上访问的还是 HTTP。
3. 强制HTTPS重定向设置
OSS 控制台提供了一键“强制 HTTPS”开关,位于域名管理页的“HTTPS 设置”区域。开启后,所有 HTTP 请求会被 301 重定向到对应的 HTTPS 地址,省去了在源站前加 Nginx 做重定向的运维成本。但需要留意一个细节:如果前端还有 CDN 或反向代理,重定向策略应在最外层节点执行,否则可能形成“HTTP → CDN → OSS(重定向至 HTTPS)”的多跳损耗。实际遇到过某电商站因重定向链路过长,导致首字节时间增加约 120 ms,在峰值时直接拉高了客户跳出率。因此,如果后续计划接入 CDN,建议暂停 OSS 侧的强制 HTTPS,统一在 CDN 配置中做 HTTP 到 HTTPS 的 302 跳转,并配合 HSTS 头部弥补。
五、常见错误及解决方案
1. 提示域名未备案怎么办
这是国内地域 OSS 最高频的拦路虎。阿里云会直接拦截未备案域名的 HTTP 请求,浏览器通常显示“没有 CNAME 记录”或返回 503,让很多人误以为是解析配置出错。实际排查只要两步:先去工信部备案系统核查域名的备案号是否存在且状态正常,再到阿里云备案管理后台确认该域名已同步进阿里云账号体系。如果域名在其他服务商备案,需要手动提交“接入备案”而非全新备案,接入审核一般 3-5 个工作日。审核通过后 OSS 控制台绑定时就不会再弹“域名未备案”警告,已绑定的访问也会自动恢复。过程中不需要动任何 DNS 或 OSS 配置,纯粹是合规校验问题。
2. HTTPS 证书不匹配错误
浏览器报“ERR_CERT_COMMON_NAME_INVALID”是最常见的证书类错误,根因几乎都是证书绑定的域名与实际访问域名不一致,尤其是在 CDN 回源 OSS 的场景下被放大。阿里云免费 SSL 证书采用单域名模式,如果签发给 www.example.com,裸域 example.com 就无法匹配。解决办法是在申请证书时填入完整的一级域名,并勾选“同时保护 www 子域名”,这样同一张证书会包含两个 SAN,覆盖两种访问形式。上传证书后记得在 OSS 或 CDN 控制台开启“强制 HTTPS 重定向”,否则用户直接输 HTTP 会导致混合内容警告。证书部署后先用 curl -v 检查证书链,如果中间证书缺失,浏览器也会判定为不安全,这种情况通常是上传证书时遗漏了 CA 包,重新上传完整的 PEM 链即可修复。
3. OSS 回源规则冲突处理
当多个自定义域名指向同一个 Bucket 但需要回源到不同目录时,很容易出现优先级误会。阿里云 OSS 的回源规则是按创建时间倒序匹配,一旦某条规则命中就不再继续往下走。很多人把最宽泛的“根目录回源”放在第一条,结果把所有请求都拦走,后面针对特定前缀的规则形同虚设。处理方式是把路径最严格的规则往前调,例如 /static/* 回源到某个目录,/api/* 回源到另一个,最后才放一条兜底规则。如果完全不需要回源功能,直接清空所有规则,避免因为历史错误规则导致部分请求 404。另外,CDN 加速场景下回源 HOST 要单独配置为 OSS 域名,否则 OSS 侧会收到 HTTP HOST 头指向自定义域名,可能引发签权校验失败。
六、验证与优化建议

1. 使用curl命令测试访问
绑定域名和证书后,浏览器的缓存策略容易让人误判生效状态,更可靠的方式是直接用 curl 发起请求。执行 curl -I https://your-domain/object-key,如果返回 HTTP 200 且响应头中出现 x-oss-request-id,说明 OSS 已正确识别并处理了这次请求。当出现 403 时,多半是 Bucket 权限尚未设为公共读,或自定义域名没有在 OSS 控制台完成所有权验证。而证书相关的报错,则需检查证书链是否完整、域名是否与证书绑定的完全一致,以及在控制台是否开启了强制 HTTPS 跳转,避免混合内容被浏览器拦截。
2. 监控域名解析状态
CNAME 记录的生效并非实时,依靠浏览器访问来判断解析成功与否,容易受到本地 DNS 缓存和运营商递归服务器缓存的双重干扰。推荐使用 dig your-domain CNAME +short 这类命令行工具直接查询,理想的返回结果应为 bucket-name.oss-cn-region.aliyuncs.com。如果返回空或意外出现 A 记录,基本可以确定解析配置有误——一个常见误区就是尝试将自定义域名指向某个固定的 OSS IP,而阿里云 OSS 并不会对外暴露持久不变的公网 IP,A 记录终将失效。如果域名和 Bucket 都在阿里云体系内,DNS 变更一般能在几分钟内完成传播,跨服务商则可能需要数小时,此时持续监控解析收敛状态是定位问题的优先动作。
3. 提升访问速度的CDN配合
对单纯依靠单一地域 Bucket 的部署,跨区域的大文件下载往往会碰到明显的带宽瓶颈,这时引入 CDN 是性价比最高的提速手段。操作上,可以在 CDN 控制台添加自定义域名,源站类型直接选择对应的 OSS 域名,既避免了公网直接暴露源站,又能将 HTTPS 证书下沉到 CDN 节点上集中管理,端到端加密链路也更容易维护。不过接入 CDN 也意味着额外的带宽和请求成本,对于访问量不大、或业务主要集中在本地的小型项目,可以先评估实际流量再决定是否开启。如果不想自己一家家比价和反复调优,找像云老大这类服务商做一次整体评估,往往能避开不少配置上的试错成本。