檔案上傳到OSS後,OSS會使用Bucket的預設網域名稱組建檔案訪問地址。當您在瀏覽器中通過預設網域名稱訪問檔案時,會觸發強制下載行為。如果您希望在瀏覽器中預覽檔案,則需要為Bucket綁定自訂網域名,並通過自訂網域名訪問Bucket中的檔案。對於綁定自訂網域名不會影響您對預設網域名稱的使用,您仍然可以繼續使用OSS提供的預設網域名稱。
前提條件
已建立Bucket。具體步驟,請參見建立儲存空間。
註冊網域名。支援綁定非阿里雲註冊的網域名稱。如果您還未註冊網域名稱,您可以在阿里雲網域名稱服務 (DNS)平台註冊網域名稱。具體步驟,請參見註冊網域名稱。
如果要綁定的Bucket在中國內地,確保網域名稱已備案,且帳號已實名認證。如何備案和實名認證,請參見ICP備案流程、阿里雲帳號實名登記常見問題。
使用情境
檔案預覽:通過自訂網域名訪問OSS Bucket,避免OSS強制增加下載回應標頭,實現在瀏覽器中預覽檔案。
訪問.apk或者.ipa的檔案:出於安全考慮,通過OSS預設公網網域名稱訪問2023年08月15日後建立的Bucket中尾碼為.apk或者.ipa的檔案,伺服器返回400錯誤。使用自有網域名稱訪問尾碼為.apk或者.ipa的檔案時將不會被阻斷。
品牌形象和專業性:將自訂網域名綁定到OSS Bucket,提供個人化網域名稱,增強品牌形象和專業性,增加使用者信任度。
防止網域名稱被攔截:一些應用或平台可能會對Bucket預設網域名稱進行攔截。您可以為Bucket綁定自訂網域名,以確保您的OSS Bucket中的資源能夠被正常訪問。
訪問方便性:使用自訂網域名訪問OSS Bucket,方便易記,相比使用OSS預設網域名稱,更簡潔友好,輕鬆訪問和分享資源。
使用者體驗最佳化:通過自訂網域名,提高訪問速度,結合CDN加速技術,實現快速內容分發和下載,減少延遲,提升使用者體驗。
連結的持久性:綁定自訂網域名到OSS Bucket後,即使後續儲存位置或服務有變化,使用者仍可使用相同網域名稱訪問資源,確保連結的持久性,長期可訪問和使用儲存資源。
背景資訊
訪問Bucket預設網域名稱或傳輸加速網域名稱會預設下載檔案,而訪問自訂網域名會預設預覽檔案的原因如下:
訪問Bucket預設網域名稱或傳輸加速網域名稱
出於資料轉送安全考慮,使用OSS提供的Bucket預設網域名稱(<bucketName>.oss-<regionId>.aliyuncs.com
)或傳輸加速網域名稱(<bucketName>.oss-accelerate.aliyuncs.com
)訪問Bucket的檔案(網頁、圖片)時,OSS會在返回中強制增加下載回應標頭(x-oss-force-download: true
和Content-Disposition: attachment
)。瀏覽器檢測到Content-Disposition: attachment
時,會觸發強制下載行為。使用OSS提供的網域名稱訪問檔案時,觸發下載行為的請求流程如下:
關於使用OSS的預設Bucket網域名稱或傳輸加速網域名稱訪問檔案,觸發自動下載的生效時間和生效對象,請參見附錄:強制下載命中的x-oss-ec規則。
訪問自訂網域名
您可以在登入的網域名稱(例如example.com)上自訂一個子網域名稱(例如static.example.com),並將其綁定至Bucket,然後使用自訂網域名訪問檔案。此時,OSS不會在返回中強制增加下載回應標頭。由於OSS沒有設定Content-Disposition
欄位,瀏覽器會預設將其設定為inline
。瀏覽器會直接顯示檔案內容,而不是下載檔案。使用自訂網域名訪問檔案,預設預覽行為的請求流程如下:
使用限制
不支援綁定中文網域名稱。
每個網域名稱只能綁定至一個Bucket。
每個Bucket最多可以綁定100個網域名稱。
通過OSS管理主控台綁定自訂網域名時,不允許綁定泛網域名稱(將網域名稱首碼設定為*,從而將主網域名稱的所有子網域名稱都指向Bucket預設網域名稱)。通過CDN加速OSS時,允許綁定泛網域名稱,但該網域名稱不會在OSS管理主控台顯示。
操作步驟
步驟一:綁定自訂網域名
根據網域名稱所屬服務提供者和所屬帳號,參考對應的步驟將網域名稱綁定至OSS Bucket。
如果您不確定網域名稱所屬服務提供者,您可以在網域名稱資訊查詢(WHOIS)頁面進行查詢。
如果您不確定網域名稱是否屬於當前阿里雲帳號,您可以在Alibaba Cloud DNS控制台進行查詢。
綁定當前阿里雲帳號註冊的網域名稱
將當前阿里雲帳號註冊的網域名稱,綁定至OSS Bucket的操作步驟如下:
登入OSS管理主控台。
單擊Bucket 列表,然後單擊目標Bucket名稱。
在左側導覽列,選擇Bucket 配置>網域名稱管理。
在網域名稱管理頁面,單擊綁定域名。
在綁定域名面板,輸入要綁定的網域名稱,例如
static.example.com
,然後單擊確認綁定。添加CNAME記錄,將自訂網域名
static.example.com
解析至被綁定的Bucket的預設外網網域名稱。自動添加
開啟自動添加 CNAME 記錄。
開啟後,OSS會在Alibaba Cloud DNS自動添加一條CNAME記錄。樣本如下:
手動添加
如果沒有開啟自動添加 CNAME 記錄,您需要在Alibaba Cloud DNS控制台手動添加一條CNAME記錄,否則綁定的自訂網域名不會生效。
在公網DNS解析 > 權威網域名稱解析,單擊目標網域名稱右側的解析設定。
單擊添加記錄,填寫網域名稱解析資訊。
參數
說明
樣本值
記錄類型
選擇CNAME記錄將網域名稱解析指向另一個網域名稱
CNAME
主機記錄
填寫要綁定的網域名稱的首碼。
static
解析請求來源
解析網域名稱時使用的線路。 建議選擇預設,系統將自動選擇最佳線路。
預設
記錄值
填寫Bucket的外網訪問網域名稱。Bucket網域名稱的結構為<bucketname>.<endpoint>。關於不同地區的外網Endpoint,請參見OSS地區和訪問網域名稱。
examplebucket.oss-cn-hangzhou.aliyuncs.com
TTL
網域名稱的更新周期,保留預設值即可。
說明生效TTL的時間有一定的延遲,請以實際為準。
10分鐘
單擊確定。
完成後,Alibaba Cloud DNS會出現一條CNAME記錄。樣本如下:
綁定其他阿里雲帳號註冊的網域名稱
將阿里雲A帳號註冊的網域名稱,綁定至阿里雲B帳號的OSS Bucket的操作步驟如下:
使用阿里雲B帳號,擷取TXT記錄的主機記錄和記錄值。
登入OSS管理主控台。
單擊Bucket 列表,然後單擊目標Bucket名稱。
在左側導覽列,選擇Bucket 配置>網域名稱管理。
在網域名稱管理頁面,單擊綁定域名。
在綁定域名面板,輸入要綁定的阿里雲A帳號的自訂網域名,例如
static.example.com
,然後複製頁面顯示的主機記錄和記錄值。
使用阿里雲A帳號,添加TXT記錄。
在網域名稱解析列表中,單擊目標網域名稱右側的解析設定。
單擊添加記錄,填寫網域名稱解析資訊。
參數
說明
樣本值
記錄類型
選擇網域名稱指向的類型為TXT。
TXT
主機記錄
阿里雲Alibaba Cloud DNS已自動幫你填寫了主網域名稱。因此,填寫時,不需要手動填寫主網域名稱部分。
如果綁定的是主網域名稱,填寫
_dnsauth
。例如網域名稱為example.com
,填寫_dnsauth
。如果綁定的是子網域名稱,填寫
_dnsauth.<網域名稱首碼>
。例如網域名稱為static.example.com
,填寫_dnsauth.static
。
_dnsauth.static
解析請求來源
解析網域名稱時使用的線路。 建議選擇預設,系統將自動選擇最佳線路。
預設
記錄值
填寫使用阿里雲B帳號擷取的TXT記錄中的CnameToken。
b0d777f7ccddeae93358d908ed59****
TTL
網域名稱的更新周期,保留預設值即可。
說明生效TTL的時間有一定的延遲,請以實際為準。
10分鐘
單擊確定。
使用阿里雲B帳號,在OSS控制台的綁定域名面板,單擊驗證網域名稱所有權並綁定。
使用阿里雲A帳號,添加CNAME記錄。
在網域名稱解析列表中,單擊目標網域名稱右側的解析設定。
單擊添加記錄,填寫網域名稱解析資訊。
參數
說明
樣本值
記錄類型
選擇網域名稱指向的類型為CNAME。
CNAME
主機記錄
根據網域名稱首碼填寫主機記錄。
如果是主網域名稱,例如
example.com
,輸入@。如果是子網域名稱,輸入欄位名的首碼。例如網域名稱為
static.example.com
,輸入static。
static
解析請求來源
解析網域名稱時使用的線路。 建議選擇預設,系統將自動選擇最佳線路。
預設
記錄值
填寫Bucket的外網訪問網域名稱。Bucket網域名稱的結構為<bucketname>.<endpoint>。關於不同地區的外網Endpoint,請參見OSS地區和訪問網域名稱。
examplebucket.oss-cn-hangzhou.aliyuncs.com
TTL
網域名稱的更新周期,保留預設值即可。
說明生效TTL的時間有一定的延遲,請以實際為準。
10分鐘
單擊確定。
綁定非阿里雲帳號註冊的網域名稱
將在其他網域名稱服務 (DNS)供應商註冊的網域名稱,綁定至OSS Bucket的操作步驟如下:
在阿里雲OSS,產生TXT記錄的主機記錄和記錄值。
登入OSS管理主控台。
單擊Bucket 列表,然後單擊目標Bucket名稱。
在左側導覽列,選擇Bucket 配置>網域名稱管理。
在網域名稱管理頁面,單擊綁定域名。
在綁定域名面板,輸入在其他網域名稱服務 (DNS)供應商註冊的網域名稱,例如
static.example.com
,然後複製頁面顯示的主機記錄和記錄值。
在網域名稱服務 (DNS)供應商的DNS解析平台,參考下表添加TXT記錄。
參數
說明
樣本值
記錄類型
選擇網域名稱指向的類型為TXT。
TXT
主機記錄
如果其他網域名稱服務 (DNS)供應商的DNS解析平台已自動幫你填寫了主網域名稱,填寫時,不需要手動填寫主網域名稱部分。
如果綁定的是主網域名稱,填寫
_dnsauth
。例如網域名稱為example.com
,填寫_dnsauth
。如果綁定的是子網域名稱,填寫
_dnsauth.<網域名稱首碼>
。例如網域名稱為static.example.com
,填寫_dnsauth.static
。
_dnsauth.static
記錄值
填寫從阿里雲OSS擷取的TXT記錄中的CnameToken。
b0d777f7ccddeae93358d908ed59****
在阿里雲OSS控制台的綁定域名面板,單擊驗證網域名稱所有權並綁定。
在網域名稱服務 (DNS)供應商的DNS解析平台,參考下表添加CNAME記錄。
參數
說明
樣本值
記錄類型
選擇網域名稱指向的類型為CNAME。
CNAME
主機記錄
根據網域名稱首碼填寫主機記錄。
如果是主網域名稱,例如
example.com
,輸入@。如果是子網域名稱,輸入欄位名首碼。例如網域名稱為
static.example.com
,輸入static。
static
記錄值
填寫Bucket的外網訪問網域名稱。Bucket網域名稱的結構為<bucketname>.<endpoint>。關於不同地區的外網Endpoint,請參見OSS地區和訪問網域名稱。
examplebucket.oss-cn-hangzhou.aliyuncs.com
步驟二:驗證自訂網域名
綁定自訂網域名後,您可以使用nslookup
或dig
命令來驗證自訂網域名解析是否生效。如果網域名稱解析結果顯示為您綁定的Bucket的外網訪問網域名稱,則說明自訂網域名的CNAME解析已生效。
nslookup
將static.example.com
替換為您要查詢的網域名稱,然後執行以下命令。
nslookup -type=CNAME static.example.com
成功返回樣本如下。
dig
將static.example.com
替換為您要查詢的網域名稱,然後執行以下命令。
dig CNAME static.example.com
成功返回樣本如下。
步驟三:使用自訂網域名
自訂網域名生效後,您可以直接通過HTTP協議訪問檔案。
HTTP協議無法確保資料在傳輸過程中的安全性,即資料可能存在被第三方截取或篡改的風險。考慮到資料安全的重要性,強烈推薦您採用HTTPS協議進行訪問。具體操作,請參見使用HTTPS協議。
上傳檔案。
具體操作,請參見簡單上傳。
擷取檔案URL。
臨時檔案URL
擷取臨時有效檔案URL的操作步驟如下:
設定檔案讀寫權限ACL為私人。
具體操作,請參見設定Object ACL。
私人檔案URL的格式為
http://YourDomain/ObjectName?簽名參數
。您可以通過以下方法擷取檔案URL並設定URL的有效時間長度。
使用OSS控制台
登入OSS管理主控台。
單擊Bucket列表,然後單擊目標Bucket名稱。
在左側導覽列,選擇
。在檔案清單頁面,單擊目標檔案名稱。
在詳情面板的自有網域名稱,選擇綁定的自訂網域名,其他保持預設值,然後單擊複製檔案URL。
使用圖形化管理工具ossbrowser
ossbrowser支援Object層級的操作與控制台支援的操作類似,請按照ossbrowser介面指引完成擷取簽名URL的操作。
如何下載並使用ossbrowser,請參見圖形化管理工具ossbrowser 2.0(預覽版)。
使用阿里雲SDK
使用自訂網域名建立OssClient。
使用OssClient調用generatePresignedUrl介面擷取簽名URL。
各語言SDK樣本,請參見簽名版本1。
Java
// yourEndpoint填寫自訂網域名。 String endpoint = "yourEndpoint"; // 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請先配置環境變數。 EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider(); // 建立ClientBuilderConfiguration執行個體,您可以根據實際情況修改預設參數。 ClientBuilderConfiguration conf = new ClientBuilderConfiguration(); // 設定是否支援CNAME。CNAME用於將自訂網域名綁定到目標Bucket。 conf.setSupportCname(true); // 建立OSSClient執行個體。 OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider, conf); // 關閉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; // 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數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', // 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 accessKeyId: process.env.OSS_ACCESS_KEY_ID, accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET, authorizationV4: true, // yourRegion填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou。 region: 'yourRegion', cname: true });
Python
# -*- coding: utf-8 -*- import oss2 from oss2.credentials import EnvironmentVariableCredentialsProvider # 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請先配置環境變數。 auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider()) # 填寫自訂網域名,例如example.com。 cname = 'http://example.com' # 填寫Bucket名稱,並設定is_cname=True來開啟CNAME。CNAME是指將自訂網域名綁定到儲存空間。 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。 // yourRegion填寫Bucket所在地區。以華東1(杭州)為例,yourRegion填寫為oss-cn-hangzhou。 region: 'yourRegion', endpoint: "example.com", authorizationV4: true, // 從STS服務擷取的臨時存取金鑰(AccessKey ID和AccessKey Secret)。 accessKeyId: "yourAccessKeyId", accessKeySecret: "yourAccessKeySecret", // 從STS服務擷取的安全性權杖(SecurityToken)。 stsToken: 'yourSecurityToken', // 填寫Bucket名稱,例如examplebucket。 bucket: "examplebucket", cname: true, }); </script> </body> </html>
.NET
using Aliyun.OSS; using Aliyun.OSS.Common; // 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數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"; // 建立ClientConfiguration執行個體,按照您的需要修改預設參數。 var conf = new ClientConfiguration(); // 開啟CNAME開關。CNAME是指將自訂網域名綁定到儲存空間的過程。 conf.IsCname = true; // 建立OssClient執行個體。 var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
Android
// yourEndpoint填寫自訂網域名。 String endpoint = "yourEndpoint"; // 從STS服務擷取的臨時存取金鑰(AccessKey ID和AccessKey Secret)。 String accessKeyId = "yourAccessKeyId"; String accessKeySecret = "yourAccessKeySecret"; // 從STS服務擷取的安全性權杖(SecurityToken)。 String securityToken = "yourSecurityToken"; // yourEndpoint填寫Bucket所在地區。以華東1(杭州)為例,region填寫為cn-hangzhou。 String region = "yourRegion"; OSSCredentialProvider credentialProvider = new OSSStsTokenCredentialProvider(accessKeyId, accessKeySecret, securityToken); ClientConfiguration config = new ClientConfiguration(); config.setSignVersion(SignVersion.V4); // 建立OSSClient執行個體。 OSSClient oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider); oss.setRegion(region);
Go
package main import ( "log" "github.com/aliyun/aliyun-oss-go-sdk/oss" ) // handleError 用於處理不可恢複的錯誤,並記錄錯誤資訊後終止程式。 func handleError(err error) { log.Fatalf("Error: %v", err) } // setupClient 用於設定並建立OSS用戶端執行個體,支援CNAME。 // 參數: // // endpoint - 自訂網域名,即綁定到儲存空間的自訂網域名。 // // 返回建立的OSS用戶端執行個體。 func setupClient(endpoint string) (*oss.Client, error) { // 從環境變數中擷取訪問憑證。 provider, err := oss.NewEnvironmentVariableCredentialsProvider() if err != nil { return nil, err } // 建立OSSClient執行個體,並啟用CNAME支援。 // yourRegion填寫Bucket所在地區,以華東1(杭州)為例,填寫為cn-hangzhou。其它Region請按實際情況填寫。 clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)} clientOptions = append(clientOptions, oss.Region("yourRegion")) clientOptions = append(clientOptions, oss.UseCname(true)) // 設定簽名版本 clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4)) client, err := oss.New(endpoint, "", "", clientOptions...) if err != nil { return nil, err } return client, nil } func main() { // yourEndpoint填寫Bucket對應的自訂網域名。 // 樣本:填寫為 "custom-domain-for-your-bucket.com"。 endpoint := "yourEndpoint" // 檢查環境變數是否已經設定。 if endpoint == "" { log.Fatal("Please set yourEndpoint.") } // 設定並建立OSS用戶端執行個體,支援CNAME。 client, err := setupClient(endpoint) if err != nil { handleError(err) } // 輸出用戶端資訊。 log.Printf("Client: %#v\n", client) }
iOS
// yourEndpoint填寫自訂網域名。 NSString *endpoint = @"yourEndpoint"; // 從STS服務擷取的臨時存取金鑰(AccessKey ID和AccessKey Secret)。 NSString *accessKeyId = @"yourAccessKeyId"; NSString *accessKeySecret = @"yourAccessKeySecret"; // 從STS服務擷取的安全性權杖(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帳號資訊。*/ /* yourEndpoint填寫Bucket所在地區對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。*/ std::string Endpoint = "yourEndpoint"; /* 初始化網路等資源。*/ InitializeSdk(); ClientConfiguration conf; /* 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。*/ auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>(); OssClient client(Endpoint, credentialsProvider, conf); /* 釋放網路等資源。*/ 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); /* 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數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,將自訂網域名綁定到儲存空間上。*/ 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; /* 初始化全域變數,在程式生命週期內只需要調用一次。*/ if (aos_http_io_initialize(NULL, 0) != AOSE_OK) { return -1; } /* 初始化記憶體池和options。*/ aos_pool_create(&p, NULL); options = oss_request_options_create(p); init_options(options); /* 邏輯代碼,此處省略。*/ /* 釋放記憶體池,相當於釋放了請求過程中各資源分派的記憶體。*/ aos_pool_destroy(p); /* 釋放之前分配的全域資源,在程式生命週期內只需要調用一次。*/ aos_http_io_deinitialize(); return 0; }
Ruby
require 'aliyun/oss' client = Aliyun::OSS::Client.new( # 使用自訂網域名作為Endpoint。 endpoint: 'http://example.com', # 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數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
通過設定檔設定Bucket和自訂網域名的映射關係。詳情請參見配置ossutil。
通過sign產生經過簽名的檔案URL。詳情請參見sign(產生簽名URL)。
長期檔案URL
警告如需擷取長期有效檔案URL,即不存在到期時間。您需要將讀檔案讀寫權限ACL設定為公用讀取。設定為公用讀取後,檔案的互連網上任何使用者都可以對該Object進行訪問,這有可能造成您資料的外泄以及費用激增,建議您使用臨時檔案URL。
擷取長期有效檔案URL的操作步驟如下:
設定檔案讀寫權限ACL為公用讀取。
具體操作,請參見設定Object ACL。
拼接檔案URL。
綁定自訂網域名後,如果檔案讀寫權限ACL為公用讀取,則無需進行簽名操作。公用讀取檔案URL的格式為
http://YourDomainName/ObjectName
。例如,您為華東1(杭州)地區的examplebucket綁定了自訂網域名static.example.com,且該Bucket下包含example.jpg的檔案,則該檔案URL為
http://static.example.com/example.jpg
。
在瀏覽器中,訪問產生的檔案URL。
後續操作
使用HTTPS協議
HTTPS協議在HTTP的基礎上整合了SSL/TLS安全性通訊協定層,從而為資料轉送提供了強大的加密保護。使用HTTPS協議訪問之前,您需要購買相應的數位憑證並完成認證託管。具體步驟,請參見綁定自訂網域名的認證託管。
使用CDN加速
如果您希望提升靜態資源訪問的速度和穩定性,您可以為OSS開啟CDN加速,然後將自訂網域名綁定到CDN加速網域名稱上。具體操作,請參見綁定CDN加速網域名稱。
避免盜刷
如果您希望避免Bucket內的資源被其他人盜用,您可以通過設定Referer列表(包括白名單Referer和黑名單Referer)以及是否允許空Referer的方式,限制您Bucket內資源的訪問來源。具體步驟,請參見防盜鏈。
加速跨境傳輸
如果您希望提升跨境訪問的速度和穩定性,您可以將自訂網域名綁定到OSS傳輸加速網域名稱上。具體操作,請參見綁定CDN加速網域名稱。
託管靜態網站
如果您希望將您的靜態網站託管到OSS,並使用自訂網域名訪問,您需要為儲存空間設定靜態網站託管。具體步驟,請參見靜態網站託管。
常見問題
備案時不支援選擇OSS作為雲端服務怎麼辦
已有主機記錄與當前添加CNAME記錄產生的主機記錄相同,暫時無法自動添加CNAME記錄
網域名稱綁定在自己的其他Bucket上
NeedVerifyDomainOwnership
綁定自訂網域名後,還是無法預覽檔案?
已經正常解析到WAF且有內容的網域名稱可以綁定至Bucket嗎?
綁定自訂網域名後,之前的檔案URL是否可以繼續使用?
使用自訂網域名就是公網訪問嗎?
如何使用自訂網域名訪問OSS檔案時是下載行為?
如何解除自訂網域名綁定?
相關API
關於建立網域名稱所有權驗證所需的CnameToken的介面,請參見CreateCnameToken。
關於擷取已建立的CnameToken的介面,請參見GetCnameToken。
關於為某個Bucket綁定自訂網域名的介面,請參見PutCname。
關於查詢某個Bucket下綁定的所有自訂網域名的介面,請參見ListCname。
關於刪除某個Bucket已綁定的自訂網域名的介面,請參見DeleteCname。
關於使用阿里雲解析DNS添加TXT解析記錄或CNAME解析記錄的介面,請參見AddDomainRecord - 根據傳入參數添加解析記錄。