綁定自定義域名至Bucket默認(rèn)域名
本文中含有需要您注意的重要提示信息,忽略該信息可能對(duì)您的業(yè)務(wù)造成影響,請(qǐng)務(wù)必仔細(xì)閱讀。
文件上傳到OSS后,OSS會(huì)使用Bucket默認(rèn)域名生成文件訪問(wèn)地址。使用瀏覽器訪問(wèn)該地址時(shí),會(huì)觸發(fā)強(qiáng)制下載行為。如果您有在瀏覽器中預(yù)覽文件的需求,需要為Bucket綁定自定義域名,然后通過(guò)自定義域名訪問(wèn)該Bucket中的文件。綁定自定義域名后,不影響繼續(xù)使用OSS提供的域名。
前提條件
已創(chuàng)建Bucket。具體步驟,請(qǐng)參見創(chuàng)建存儲(chǔ)空間。
已注冊(cè)二級(jí)域名。支持綁定非阿里云注冊(cè)的域名。如果您還未注冊(cè)域名,您可以在阿里云域名服務(wù)平臺(tái)注冊(cè)域名。具體步驟,請(qǐng)參見注冊(cè)域名。
如果要綁定的Bucket在中國(guó)內(nèi)地,確保域名已備案,且賬號(hào)已實(shí)名認(rèn)證。如何備案和實(shí)名認(rèn)證,請(qǐng)參見ICP備案全流程、個(gè)人實(shí)名認(rèn)證、企業(yè)實(shí)名認(rèn)證和個(gè)體工商戶認(rèn)證。
使用場(chǎng)景
文件預(yù)覽:通過(guò)自定義域名訪問(wèn)OSS Bucket,避免OSS強(qiáng)制增加下載響應(yīng)頭,實(shí)現(xiàn)在瀏覽器中預(yù)覽文件。
品牌形象和專業(yè)性:將自定義域名綁定到OSS Bucket,提供個(gè)性化域名,增強(qiáng)品牌形象和專業(yè)性,增加用戶信任度。
防止域名被攔截:一些應(yīng)用或平臺(tái)可能會(huì)對(duì)Bucket默認(rèn)域名進(jìn)行攔截。您可以為Bucket綁定自定義域名,以確保您的OSS Bucket中的資源能夠被正常訪問(wèn)。
訪問(wèn)方便性:使用自定義域名訪問(wèn)OSS Bucket,方便易記,相比使用OSS默認(rèn)域名,更簡(jiǎn)潔友好,輕松訪問(wèn)和分享資源。
用戶體驗(yàn)優(yōu)化:通過(guò)自定義域名,提高訪問(wèn)速度,結(jié)合CDN加速技術(shù),實(shí)現(xiàn)快速內(nèi)容分發(fā)和下載,減少延遲,提升用戶體驗(yàn)。
鏈接的持久性:綁定自定義域名到OSS Bucket后,即使后續(xù)存儲(chǔ)位置或服務(wù)有變化,用戶仍可使用相同域名訪問(wèn)資源,確保鏈接的持久性,長(zhǎng)期可訪問(wèn)和使用存儲(chǔ)資源。
背景信息
訪問(wèn)Bucket默認(rèn)域名或傳輸加速域名會(huì)默認(rèn)下載文件,而訪問(wèn)自定義域名會(huì)默認(rèn)預(yù)覽文件的原因如下:
訪問(wèn)Bucket默認(rèn)域名或傳輸加速域名
出于數(shù)據(jù)傳輸安全考慮,使用OSS提供的Bucket默認(rèn)域名(<bucketName>.oss-<regionId>.aliyuncs.com
)或傳輸加速域名(<bucketName>.oss-accelerate.aliyuncs.com
)訪問(wèn)Bucket的文件(網(wǎng)頁(yè)、圖片)時(shí),OSS會(huì)在返回中強(qiáng)制增加下載響應(yīng)頭(x-oss-force-download: true
和Content-Disposition: attachment
)。瀏覽器檢測(cè)到Content-Disposition: attachment
時(shí),會(huì)觸發(fā)強(qiáng)制下載行為。使用OSS提供的域名訪問(wèn)文件時(shí),觸發(fā)下載行為的請(qǐng)求流程如下:
關(guān)于使用OSS的默認(rèn)Bucket域名或傳輸加速域名訪問(wèn)文件,觸發(fā)自動(dòng)下載的生效時(shí)間和生效對(duì)象,請(qǐng)參見附錄:強(qiáng)制下載命中的x-oss-ec規(guī)則。
訪問(wèn)自定義域名
您可以在已注冊(cè)的域名(例如example.com)上自定義一個(gè)子域名(例如static.example.com),并將其綁定至Bucket,然后使用自定義域名訪問(wèn)文件。此時(shí),OSS不會(huì)在返回中強(qiáng)制增加下載響應(yīng)頭。由于OSS沒(méi)有設(shè)置Content-Disposition
字段,瀏覽器會(huì)默認(rèn)將其設(shè)置為inline
。瀏覽器會(huì)直接顯示文件內(nèi)容,而不是下載文件。使用自定義域名訪問(wèn)文件,默認(rèn)預(yù)覽行為的請(qǐng)求流程如下:
使用限制
不支持綁定中文域名。
每個(gè)域名只能綁定至一個(gè)Bucket。
每個(gè)Bucket最多可以綁定100個(gè)域名。
通過(guò)OSS管理控制臺(tái)綁定自定義域名時(shí),不允許綁定泛域名(將域名前綴設(shè)置為*,從而將二級(jí)域名的所有子域名都指向Bucket默認(rèn)域名)。通過(guò)CDN加速OSS時(shí),允許綁定泛域名,但該域名不會(huì)在OSS管理控制臺(tái)顯示。
操作步驟
步驟一:綁定自定義域名
根據(jù)域名所屬服務(wù)提供商和所屬賬號(hào),參考對(duì)應(yīng)的步驟將域名綁定至OSS Bucket。
如果您不確定域名所屬服務(wù)提供商,您可以在域名信息查詢(WHOIS)頁(yè)面進(jìn)行查詢。
如果您不確定域名是否屬于當(dāng)前阿里云賬號(hào),您可以在云解析DNS控制臺(tái)進(jìn)行查詢。
綁定的自定義域名中涉及的頂級(jí)域名必須滿足指定后綴的要求,否則會(huì)被視為無(wú)效域名,最終導(dǎo)致域名綁定失敗。更多信息,請(qǐng)參見頂級(jí)域名后綴列表。
綁定當(dāng)前阿里云賬號(hào)注冊(cè)的域名
將當(dāng)前阿里云賬號(hào)注冊(cè)的域名,綁定至OSS Bucket的操作步驟如下:
單擊Bucket 列表,然后單擊目標(biāo)Bucket名稱。
在左側(cè)導(dǎo)航欄,選擇Bucket 配置>域名管理。
在域名管理頁(yè)面,單擊綁定域名。
在綁定域名面板,輸入要綁定的域名,例如
static.example.com
,然后單擊確認(rèn)綁定。開啟自動(dòng)添加 CNAME 記錄。
成功提交后,云解析DNS會(huì)根據(jù)您填寫的域名自動(dòng)添加一條CNAME記錄,將自定義域名解析至被綁定的Bucket的外網(wǎng)訪問(wèn)域名。
說(shuō)明如果您沒(méi)有開啟自動(dòng)添加 CNAME 記錄,在提交后,您需要在云解析DNS控制臺(tái)手動(dòng)添加一條CNAME記錄,否則綁定的自定義域名不會(huì)生效。
綁定其他阿里云賬號(hào)注冊(cè)的域名
將阿里云A賬號(hào)注冊(cè)的域名,綁定至阿里云B賬號(hào)的OSS Bucket的操作步驟如下:
使用阿里云B賬號(hào),獲取TXT記錄的主機(jī)記錄和記錄值。
單擊Bucket 列表,然后單擊目標(biāo)Bucket名稱。
在左側(cè)導(dǎo)航欄,選擇Bucket 配置>域名管理。
在域名管理頁(yè)面,單擊綁定域名。
在綁定域名面板,輸入要綁定的阿里云A賬號(hào)的自定義域名,例如
static.example.com
,然后復(fù)制頁(yè)面顯示的主機(jī)記錄中的_dnsauth
和記錄值。重要復(fù)制TXT記錄值后,請(qǐng)保持綁定域名面板,直到最終完成提交。如果關(guān)閉綁定域名面板,TXT記錄值會(huì)失效,導(dǎo)致之后驗(yàn)證域名所有權(quán)失敗。
使用阿里云A賬號(hào),添加TXT記錄。
在域名解析列表中,單擊目標(biāo)域名右側(cè)的解析設(shè)置。
單擊添加記錄,填寫域名解析信息。
參數(shù)
說(shuō)明
示例值
記錄類型
選擇域名指向的類型為TXT。
TXT
主機(jī)記錄
填寫使用阿里云B賬號(hào)獲取的TXT記錄的主機(jī)記錄。
_dnsauth
解析請(qǐng)求來(lái)源
解析域名時(shí)使用的線路。 建議選擇默認(rèn),系統(tǒng)將自動(dòng)選擇最佳線路。
默認(rèn)
記錄值
填寫使用阿里云B賬號(hào)獲取的TXT記錄中的CnameToken。
b0d777f7ccddeae93358d908ed59****
TTL
域名的更新周期,保留默認(rèn)值即可。
說(shuō)明生效TTL的時(shí)間有一定的延遲,請(qǐng)以實(shí)際為準(zhǔn)。
10分鐘
單擊確定。
使用阿里云B賬號(hào),在OSS控制臺(tái)的綁定域名面板,單擊驗(yàn)證域名所有權(quán)并綁定。
使用阿里云A賬號(hào),添加CNAME記錄。
在域名解析列表中,單擊目標(biāo)域名右側(cè)的解析設(shè)置。
單擊添加記錄,填寫域名解析信息。
參數(shù)
說(shuō)明
示例值
記錄類型
選擇域名指向的類型為CNAME。
CNAME
主機(jī)記錄
根據(jù)域名前綴填寫主機(jī)記錄。
如果是二級(jí)域名,例如
example.com
,輸入@。如果是三級(jí)域名,輸入三級(jí)域名的前綴。例如域名為
static.example.com
,輸入static。
static
解析請(qǐng)求來(lái)源
解析域名時(shí)使用的線路。 建議選擇默認(rèn),系統(tǒng)將自動(dòng)選擇最佳線路。
默認(rèn)
記錄值
填寫B(tài)ucket的外網(wǎng)訪問(wèn)域名。Bucket域名的結(jié)構(gòu)為<bucketname>.<endpoint>。關(guān)于不同地域的外網(wǎng)Endpoint,請(qǐng)參見訪問(wèn)域名和數(shù)據(jù)中心。
examplebucket.oss-cn-hangzhou.aliyuncs.com
TTL
域名的更新周期,保留默認(rèn)值即可。
說(shuō)明生效TTL的時(shí)間有一定的延遲,請(qǐng)以實(shí)際為準(zhǔn)。
10分鐘
單擊確定。
綁定非阿里云賬號(hào)注冊(cè)的域名
將在其他域名服務(wù)提供商注冊(cè)的域名,綁定至OSS Bucket的操作步驟如下:
在阿里云OSS,生成TXT記錄的主機(jī)記錄和記錄值。
單擊Bucket 列表,然后單擊目標(biāo)Bucket名稱。
在左側(cè)導(dǎo)航欄,選擇Bucket 配置>域名管理。
在域名管理頁(yè)面,單擊綁定域名。
在綁定域名面板,輸入在其他域名服務(wù)提供商注冊(cè)的域名,例如
static.example.com
,然后復(fù)制頁(yè)面顯示的主機(jī)記錄中的_dnsauth
和記錄值。重要復(fù)制TXT記錄值后,請(qǐng)保持綁定域名面板,直到最終完成提交。如果關(guān)閉綁定域名面板,TXT記錄值會(huì)失效,導(dǎo)致之后驗(yàn)證域名所有權(quán)失敗。
在域名服務(wù)提供商的DNS解析平臺(tái),參考下表添加TXT記錄。
參數(shù)
說(shuō)明
示例值
記錄類型
選擇域名指向的類型為TXT。
TXT
主機(jī)記錄
填寫從阿里云OSS獲取的TXT記錄的主機(jī)記錄,并按照域名服務(wù)提供商的DNS解析平臺(tái)要求進(jìn)行填寫。
_dnsauth
記錄值
填寫從阿里云OSS獲取的TXT記錄中的CnameToken。
b0d777f7ccddeae93358d908ed59****
在阿里云OSS控制臺(tái)的綁定域名面板,單擊驗(yàn)證域名所有權(quán)并綁定。
在域名服務(wù)提供商的DNS解析平臺(tái),參考下表添加CNAME記錄。
參數(shù)
說(shuō)明
示例值
記錄類型
選擇域名指向的類型為CNAME。
CNAME
主機(jī)記錄
根據(jù)域名前綴填寫主機(jī)記錄。
如果是二級(jí)域名,例如
example.com
,輸入@。如果是三級(jí)域名,輸入三級(jí)域名的前綴。例如域名為
static.example.com
,輸入static。
static
記錄值
填寫B(tài)ucket的外網(wǎng)訪問(wèn)域名。Bucket域名的結(jié)構(gòu)為<bucketname>.<endpoint>。關(guān)于不同地域的外網(wǎng)Endpoint,請(qǐng)參見訪問(wèn)域名和數(shù)據(jù)中心。
examplebucket.oss-cn-hangzhou.aliyuncs.com
步驟二:驗(yàn)證自定義域名
綁定自定義域名后,您可以使用nslookup
或dig
命令來(lái)檢查CNAME解析的結(jié)果。如果域名解析結(jié)果顯示為您綁定的Bucket的外網(wǎng)訪問(wèn)域名,則說(shuō)明自定義域名的CNAME解析已生效。
nslookup
將example.com替換為您要查詢的域名,然后執(zhí)行以下命令。
nslookup -type=CNAME example.com
成功返回示例如下。
dig
將example.com替換為您要查詢的域名,然后執(zhí)行以下命令。
dig CNAME example.com
成功返回示例如下。
步驟三:使用自定義域名
自定義域名生效后,您可以直接通過(guò)HTTP協(xié)議訪問(wèn)文件。
HTTP協(xié)議無(wú)法確保數(shù)據(jù)在傳輸過(guò)程中的安全性,即數(shù)據(jù)可能存在被第三方截取或篡改的風(fēng)險(xiǎn)。考慮到數(shù)據(jù)安全的重要性,強(qiáng)烈推薦您采用HTTPS協(xié)議進(jìn)行訪問(wèn)。具體操作,請(qǐng)參見使用HTTPS協(xié)議。
上傳文件。
具體操作,請(qǐng)參見簡(jiǎn)單上傳。
獲取文件URL。
臨時(shí)文件URL
獲取臨時(shí)有效的文件URL的操作步驟如下:
設(shè)置文件讀寫權(quán)限ACL為私有。
具體操作,請(qǐng)參見設(shè)置Object ACL。
私有文件URL的格式為
http://YourDomain/ObjectName?簽名參數(shù)
。您可以通過(guò)以下方法獲取文件URL并設(shè)置URL的有效時(shí)長(zhǎng)。
使用OSS控制臺(tái)
單擊Bucket列表,然后單擊目標(biāo)Bucket名稱。
在左側(cè)導(dǎo)航欄,選擇
。在文件列表頁(yè)面,單擊目標(biāo)文件名稱。
在詳情面板的自有域名,選擇綁定的自定義域名,其他保持默認(rèn)值,然后單擊復(fù)制文件URL。
使用圖形化管理工具ossbrowser
ossbrowser支持Object級(jí)別的操作與控制臺(tái)支持的操作類似,請(qǐng)按照ossbrowser界面指引完成獲取簽名URL的操作。關(guān)于如何使用ossbrowser,請(qǐng)參見快速使用ossbrowser。
使用阿里云SDK
使用自定義域名新建OssClient。
使用OssClient調(diào)用generatePresignedUrl接口獲取簽名URL。
各語(yǔ)言SDK示例,請(qǐng)參見簽名版本1。
Java
// yourEndpoint填寫自定義域名。 String endpoint = "yourEndpoint"; // 從環(huán)境變量中獲取訪問(wèn)憑證。運(yùn)行本代碼示例之前,請(qǐng)先配置環(huán)境變量。 EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider(); // 創(chuàng)建ClientBuilderConfiguration實(shí)例,您可以根據(jù)實(shí)際情況修改默認(rèn)參數(shù)。 ClientBuilderConfiguration conf = new ClientBuilderConfiguration(); // 設(shè)置是否支持CNAME。CNAME用于將自定義域名綁定到目標(biāo)Bucket。 conf.setSupportCname(true); // 創(chuàng)建OSSClient實(shí)例。 OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider, conf); // 關(guān)閉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'; } use OSS\Credentials\EnvironmentVariableCredentialsProvider; use OSS\OssClient; use OSS\CoreOssException; // 從環(huán)境變量中獲取訪問(wèn)憑證。運(yùn)行本代碼示例之前,請(qǐng)確保已設(shè)置環(huán)境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 $provider = new EnvironmentVariableCredentialsProvider(); // 填寫自定義域名,例如http://example.com。 $endpoint = "http://example.com"; try { $config = array( "provider" => $provider, "endpoint" => $endpoint, "cname" => true ); $ossClient = new OssClient($config); } catch (OssException $e) { print $e->getMessage(); }
Node.js
const OSS = require('ali-oss') const client = new OSS({ // 使用自定義域名作為Endpoint。 endpoint: 'http://img.example.com', // 從環(huán)境變量中獲取訪問(wèn)憑證。運(yùn)行本代碼示例之前,請(qǐng)確保已設(shè)置環(huán)境變量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
# -*- coding: utf-8 -*- import oss2 from oss2.credentials import EnvironmentVariableCredentialsProvider # 從環(huán)境變量中獲取訪問(wèn)憑證。運(yùn)行本代碼示例之前,請(qǐng)先配置環(huán)境變量。 auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider()) # 填寫自定義域名,例如example.com。 cname = 'http://example.com' # 填寫B(tài)ucket名稱,并設(shè)置is_cname=True來(lái)開啟CNAME。CNAME是指將自定義域名綁定到存儲(chǔ)空間。 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>Document</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。 endpoint: "example.com", // 從STS服務(wù)獲取的臨時(shí)訪問(wèn)密鑰(AccessKey ID和AccessKey Secret)。 accessKeyId: "yourAccessKeyId", accessKeySecret: "yourAccessKeySecret", // 從STS服務(wù)獲取的安全令牌(SecurityToken)。 stsToken: 'yourSecurityToken', // 填寫B(tài)ucket名稱,例如examplebucket。 bucket: "examplebucket", cname: true, }); </script> </body> </html>
.NET
using Aliyun.OSS; using Aliyun.OSS.Common; // 從環(huán)境變量中獲取訪問(wèn)憑證。運(yùn)行本代碼示例之前,請(qǐng)確保已設(shè)置環(huán)境變量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 string endpoint = "yourDomain"; // 創(chuàng)建ClientConfiguration實(shí)例,按照您的需要修改默認(rèn)參數(shù)。 var conf = new ClientConfiguration(); // 打開CNAME開關(guān)。CNAME是指將自定義域名綁定到存儲(chǔ)空間的過(guò)程。 conf.IsCname = true; // 創(chuàng)建OssClient實(shí)例。 var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
Android
// yourEndpoint填寫自定義域名。 String endpoint = "yourEndpoint"; // 從STS服務(wù)獲取的臨時(shí)訪問(wèn)密鑰(AccessKey ID和AccessKey Secret)。 String accessKeyId = "yourAccessKeyId"; String accessKeySecret = "yourAccessKeySecret"; // 從STS服務(wù)獲取的安全令牌(SecurityToken)。 String securityToken = "yourSecurityToken"; OSSCredentialProvider credentialProvider = new OSSStsTokenCredentialProvider(accessKeyId, accessKeySecret, securityToken); // 創(chuàng)建OSSClient實(shí)例。 OSSClient oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider);
Go
package main import ( "fmt" "github.com/aliyun/aliyun-oss-go-sdk/oss" "os" ) func main(){ // 從環(huán)境變量中獲取訪問(wèn)憑證。運(yùn)行本代碼示例之前,請(qǐng)先配置環(huán)境變量。 provider, err := oss.NewEnvironmentVariableCredentialsProvider() if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // yourEndpoint填寫B(tài)ucket對(duì)應(yīng)的自定義域名。 // oss.UseCname(true)用于開啟CNAME。CNAME用于將自定義域名綁定至存儲(chǔ)空間。 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
// yourEndpoint填寫自定義域名。 NSString *endpoint = @"yourEndpoint"; // 從STS服務(wù)獲取的臨時(shí)訪問(wèn)密鑰(AccessKey ID和AccessKey Secret)。 NSString *accessKeyId = @"yourAccessKeyId"; NSString *accessKeySecret = @"yourAccessKeySecret"; // 從STS服務(wù)獲取的安全令牌(SecurityToken)。 NSString *securityToken = @"yourSecurityToken"; id<OSSCredentialProvider> credentialProvider = [[OSSStsTokenCredentialProvider alloc] initWithAccessKeyId:accessKeyId secretKeyId:accessKeySecret securityToken:securityToken]; OSSClient *client = [[OSSClient alloc] initWithEndpoint:endpoint credentialProvider:credentialProvider];
C++
#include <alibabacloud/oss/OssClient.h> using namespace AlibabaCloud::OSS; int main(void) { /* 初始化OSS賬號(hào)信息。*/ /* yourEndpoint填寫B(tài)ucket所在地域?qū)?yīng)的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。*/ std::string Endpoint = "yourEndpoint"; /* 初始化網(wǎng)絡(luò)等資源。*/ InitializeSdk(); ClientConfiguration conf; /* 從環(huán)境變量中獲取訪問(wèn)憑證。運(yùn)行本代碼示例之前,請(qǐng)確保已設(shè)置環(huán)境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。*/ auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>(); OssClient client(Endpoint, credentialsProvider, conf); /* 釋放網(wǎng)絡(luò)等資源。*/ ShutdownSdk(); return 0; }
C
#include "oss_api.h" #include "aos_http_io.h" /* 填寫自定義域名。*/ const char *endpoint = "yourCustomEndpoint"; void init_options(oss_request_options_t *options) { options->config = oss_config_create(options->pool); /* 用char*類型的字符串初始化aos_string_t類型。*/ aos_str_set(&options->config->endpoint, endpoint); /* 從環(huán)境變量中獲取訪問(wèn)憑證。運(yùn)行本代碼示例之前,請(qǐng)確保已設(shè)置環(huán)境變量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,將自定義域名綁定到存儲(chǔ)空間上。*/ 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; /* 初始化全局變量,在程序生命周期內(nèi)只需要調(diào)用一次。*/ if (aos_http_io_initialize(NULL, 0) != AOSE_OK) { return -1; } /* 初始化內(nèi)存池和options。*/ aos_pool_create(&p, NULL); options = oss_request_options_create(p); init_options(options); /* 邏輯代碼,此處省略。*/ /* 釋放內(nèi)存池,相當(dāng)于釋放了請(qǐng)求過(guò)程中各資源分配的內(nèi)存。*/ aos_pool_destroy(p); /* 釋放之前分配的全局資源,在程序生命周期內(nèi)只需要調(diào)用一次。*/ aos_http_io_deinitialize(); return 0; }
Ruby
require 'aliyun/oss' client = Aliyun::OSS::Client.new( # 使用自定義域名作為Endpoint。 endpoint: 'http://example.com', # 從環(huán)境變量中獲取訪問(wèn)憑證。運(yùn)行本代碼示例之前,請(qǐng)確保已設(shè)置環(huán)境變量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) )
使用命令行工具ossutil
通過(guò)配置文件設(shè)置Bucket和自定義域名的映射關(guān)系。詳情請(qǐng)參見配置ossutil。
通過(guò)sign生成經(jīng)過(guò)簽名的文件URL。詳情請(qǐng)參見sign(生成簽名URL)。
長(zhǎng)期文件URL
警告如需獲取長(zhǎng)期有效的文件URL,即不存在過(guò)期時(shí)間。您需要將讀文件讀寫權(quán)限ACL設(shè)置為公共讀。設(shè)置為公共讀后,文件的互聯(lián)網(wǎng)上任何用戶都可以對(duì)該Object進(jìn)行訪問(wèn),這有可能造成您數(shù)據(jù)的外泄以及費(fèi)用激增,建議您使用臨時(shí)文件URL。
獲取長(zhǎng)期有效的文件URL的操作步驟如下:
設(shè)置文件讀寫權(quán)限ACL為公共讀。
具體操作,請(qǐng)參見設(shè)置Object ACL。
拼接文件URL。
綁定自定義域名后,如果文件讀寫權(quán)限ACL為公共讀,則無(wú)需進(jìn)行簽名操作。公共讀文件URL的格式為
http://YourDomainName/ObjectName
。例如,您為華東1(杭州)地域的examplebucket綁定了自定義域名static.example.com,且該Bucket下包含example.jpg的文件,則該文件URL為
http://static.example.com/example.jpg
。
在瀏覽器中,訪問(wèn)生成的文件URL。
后續(xù)操作
使用HTTPS協(xié)議
HTTPS協(xié)議在HTTP的基礎(chǔ)上整合了SSL/TLS安全協(xié)議層,從而為數(shù)據(jù)傳輸提供了強(qiáng)大的加密保護(hù)。使用HTTPS協(xié)議訪問(wèn)之前,您需要購(gòu)買相應(yīng)的數(shù)字證書并完成證書托管。具體步驟,請(qǐng)參見綁定自定義域名的證書托管。
使用CDN加速
如果您希望提升靜態(tài)資源訪問(wèn)的速度和穩(wěn)定性,您可以為OSS開啟CDN加速,然后將自定義域名綁定到CDN加速域名上。具體操作,請(qǐng)參見綁定CDN加速域名。
避免盜刷
如果您希望避免Bucket內(nèi)的資源被其他人盜用,您可以通過(guò)設(shè)置Referer列表(包括白名單Referer和黑名單Referer)以及是否允許空Referer的方式,限制您Bucket內(nèi)資源的訪問(wèn)來(lái)源。具體步驟,請(qǐng)參見防盜鏈。
加速跨境傳輸
如果您希望提升跨境訪問(wèn)的速度和穩(wěn)定性,您可以將自定義域名綁定到OSS傳輸加速域名上。具體操作,請(qǐng)參見綁定CDN加速域名。
托管靜態(tài)網(wǎng)站
如果您希望將您的靜態(tài)網(wǎng)站托管到OSS,并使用自定義域名訪問(wèn),您需要為存儲(chǔ)空間設(shè)置靜態(tài)網(wǎng)站托管。具體步驟,請(qǐng)參見靜態(tài)網(wǎng)站托管概述。
常見問(wèn)題
已有主機(jī)記錄與當(dāng)前添加CNAME記錄生成的主機(jī)記錄相同,暫時(shí)無(wú)法自動(dòng)添加CNAME記錄
當(dāng)已有主機(jī)記錄與當(dāng)前自動(dòng)添加的CNAME記錄相同時(shí),可能有以下幾種情況:
沖突記錄:已存在一個(gè)使用相同主機(jī)記錄的記錄,但記錄類型可能與CNAME不同。例如,可能已經(jīng)存在一個(gè)A記錄。
重復(fù)記錄:已存在一個(gè)使用相同主機(jī)記錄的記錄,且記錄類型為CNAME記錄。這可能是因?yàn)橄惹耙咽謩?dòng)添加了相同的記錄。
在這種情況下,您可以在阿里云云解析DNS控制臺(tái)根據(jù)您的需求來(lái)決定如何處理:
如果您希望保留已有的沖突或重復(fù)主機(jī)記錄,您可以重新自定義一個(gè)子域名進(jìn)行綁定。
如果您不希望保留已有的主機(jī)記錄:
如果是沖突記錄,您可以刪除該記錄,然后創(chuàng)建CNAME記錄解析至Bucket域名。
如果是重復(fù)記錄,您可以修改記錄,將其解析至Bucket域名。
域名綁定在自己的其他Bucket上
您需要解除Bucket綁定的域名,然后重新綁定到當(dāng)前Bucket上。具體操作,請(qǐng)參見OSS的域名管理中綁定域名時(shí)提示“域名綁定在自己的其他Bucket上”。
NeedVerifyDomainOwnership
你需要驗(yàn)證域名所有權(quán)。具體操作,請(qǐng)參見綁定自定義域名時(shí)返回錯(cuò)誤碼NeedVerifyDomainOwnership,怎么辦?。
綁定自定義域名后,還是無(wú)法預(yù)覽文件?
如果綁定自定義域名并且CNAME解析生效后,仍然無(wú)法預(yù)覽文件,請(qǐng)排查以下設(shè)置:
設(shè)置 | 異常原因 | 解決方法 |
OSS |
| 根據(jù)文件類型,設(shè)置合理的Content-Type。具體操作,請(qǐng)參見如何設(shè)置Content-Type(MIME)?。 |
| 將Content-Disposition設(shè)置為 | |
CDN | 緩存資源未刷新。 | 刷新CDN緩存資源。具體步驟,請(qǐng)參見刷新和預(yù)熱資源。 |
瀏覽器 | 不支持預(yù)覽該格式的文件,例如表格文件、文本文件、演示文件以及PDF文件。 | 您可以為瀏覽器安裝插件以支持預(yù)覽該格式的文件。或者,您也可以使用智能媒體管理IMM的文檔在線預(yù)覽處理。具體步驟,請(qǐng)參見文檔在線預(yù)覽。 |
已經(jīng)正常解析到WAF且有內(nèi)容的域名可以綁定至Bucket嗎?
可以正常綁定。WAF解析和CNAME解析不會(huì)發(fā)生沖突,因?yàn)樗鼈冊(cè)诓煌膶用嫔线M(jìn)行解析和操作。
綁定自定義域名后,之前的文件URL是否可以繼續(xù)使用?
可以繼續(xù)使用。如何獲取之前的文件URL,請(qǐng)參見使用文件URL分享文件。
使用自定義域名就是公網(wǎng)訪問(wèn)嗎?
一般是通過(guò)公網(wǎng)訪問(wèn)。公網(wǎng)用戶通常需要以預(yù)覽的方式訪問(wèn)您的OSS文件,因此自定義域名默認(rèn)解析到Bucket的外網(wǎng)訪問(wèn)域名。
如何使用自定義域名訪問(wèn)OSS文件時(shí)是下載行為?
如需實(shí)現(xiàn)使用自定義域名訪問(wèn)OSS文件時(shí)是下載行為,您可以將Content-Disposition
設(shè)置為attachment。具體操作,請(qǐng)參見如何配置通過(guò)自定義域名訪問(wèn)OSS文件實(shí)現(xiàn)強(qiáng)制下載?。
如何解除自定義域名綁定?
當(dāng)您不再使用自定義域名時(shí),您可以參考以下步驟解綁自定義域名。
相關(guān)API
關(guān)于創(chuàng)建域名所有權(quán)驗(yàn)證所需的CnameToken的接口,請(qǐng)參見CreateCnameToken。
關(guān)于獲取已創(chuàng)建的CnameToken的接口,請(qǐng)參見GetCnameToken。
關(guān)于為某個(gè)Bucket綁定自定義域名的接口,請(qǐng)參見PutCname。
關(guān)于查詢某個(gè)Bucket下綁定的所有自定義域名的接口,請(qǐng)參見ListCname。
關(guān)于刪除某個(gè)Bucket已綁定的自定義域名的接口,請(qǐng)參見DeleteCname。
關(guān)于使用阿里云解析DNS添加TXT解析記錄或CNAME解析記錄的接口,請(qǐng)參見AddDomainRecord - 根據(jù)傳入?yún)?shù)添加解析記錄。