您可以將儲存空間(Bucket)設定為靜態網站託管模式並設定鏡像回源的跳轉規則(RoutingRule)。靜態網站託管模式配置生效後,訪問網站相當於訪問Bucket,並且能夠自動跳轉至指定的索引頁面和錯誤頁面。鏡像回源的跳轉規則配置生效後,可用於資料無縫遷移到OSS的情境。
注意事項
本文以華東1(杭州)外網Endpoint為例。如果您希望通過與OSS同地區的其他阿里雲產品訪問OSS,請使用內網Endpoint。關於OSS支援的Region與Endpoint的對應關係,請參見OSS訪問網域名稱、資料中心、開放連接埠。
本文以從環境變數讀取存取憑證為例。如何配置訪問憑證,請參見配置訪問憑證。
本文以OSS網域名稱建立OSSClient為例。如果您希望通過自訂網域名、STS等方式建立OSSClient,請參見初始化。
要設定靜態網站託管或者鏡像回源,您必須有
oss:PutBucketWebsite
許可權;要擷取靜態網站託管或者鏡像回源,您必須有oss:GetBucketWebsite
許可權;要刪除靜態網站託管或者鏡像回源,您必須有oss:DeleteBucketWebsite
許可權。具體操作,請參見為RAM使用者授權自訂的權限原則。
靜態網站託管
設定靜態網站託管
以下代碼用於設定靜態網站託管:
#-*-coding:utf-8-*- import oss2 from oss2.models import BucketWebsite from oss2.credentials import EnvironmentVariableCredentialsProvider # 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) # 填寫Bucket所在地區對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。 endpoint = "https://oss-cn-hangzhou.aliyuncs.com" # 填寫Endpoint對應的Region資訊,例如cn-hangzhou。注意,v4簽名下,必須填寫該參數 region = "cn-hangzhou" # examplebucket填寫儲存空間名稱。 bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region) # 開啟靜態網站託管模式,並將預設首頁設定為index.html,預設404頁設定為error.html。 bucket.put_bucket_website(BucketWebsite('index.html', 'error.html'))
查看靜態網站託管配置
以下代碼用於查看靜態網站託管配置:
#-*-coding:utf-8-*- import oss2 from oss2.models import BucketWebsite from oss2.credentials import EnvironmentVariableCredentialsProvider # 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) # 填寫Bucket所在地區對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。 endpoint = "https://oss-cn-hangzhou.aliyuncs.com" # 填寫Endpoint對應的Region資訊,例如cn-hangzhou。注意,v4簽名下,必須填寫該參數 region = "cn-hangzhou" # examplebucket填寫儲存空間名稱。 bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region) try: # 如果指定的Bucket未開啟靜態網站託管模式,則調用get_bucket_website時會拋出NoSuchWebsite異常。 website = bucket.get_bucket_website() print('Index file is {0}, error file is {1}'.format(website.index_file, website.error_file)) except oss2.exceptions.NoSuchWebsite as e: print('Website is not configured, request_id={0}'.format(e.request_id))
刪除靜態網站託管配置
以下代碼用於刪除靜態網站託管配置:
#-*-coding:utf-8-*- import oss2 from oss2.models import BucketWebsite from oss2.credentials import EnvironmentVariableCredentialsProvider # 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) # 填寫Bucket所在地區對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。 endpoint = "https://oss-cn-hangzhou.aliyuncs.com" # 填寫Endpoint對應的Region資訊,例如cn-hangzhou。注意,v4簽名下,必須填寫該參數 region = "cn-hangzhou" # examplebucket填寫儲存空間名稱。 bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region) # 刪除靜態網站託管配置。 bucket.delete_bucket_website()
鏡像回源
鏡像回源主要用於資料無縫遷移到OSS的情境。例如某服務已經在使用者建立的來源站點或者在其他雲產品上運行,現因業務發展,需要將服務遷移至OSS,遷移時需保證服務的正常運行。您可以在遷移過程中使用鏡像回源規則擷取未遷移至OSS的部分資料,保證服務的正常運行。
設定鏡像回源
例如,當要求者訪問目標Bucket中不存在的檔案時,可以通過指定回源條件和回源地址,從來源站點中擷取目標檔案。例如您在華東1(杭州)有名為examplebucket的Bucket,您希望要求者訪問Bucket根目錄下examplefolder目錄中不存在的檔案時,可以從https://www.example.com/網站的examplefolder目錄擷取目標檔案。
以下代碼用於設定符合上述情境的鏡像回源規則:
#-*-coding:utf-8-*- import oss2 from oss2.models import BucketWebsite, MirrorHeadersSet, RedirectMirrorHeaders, Redirect, RoutingRule, \ REDIRECT_TYPE_MIRROR, Condition from oss2.credentials import EnvironmentVariableCredentialsProvider # 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) # 填寫Bucket所在地區對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。 endpoint = "https://oss-cn-hangzhou.aliyuncs.com" # 填寫Endpoint對應的Region資訊,例如cn-hangzhou。注意,v4簽名下,必須填寫該參數 region = "cn-hangzhou" # examplebucket填寫儲存空間名稱。 bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region) # 開啟靜態網站託管模式,並將預設首頁設定為index.html,預設404頁設定為error.html。 index_file = 'index.html' error_file = 'error.html' # 設定匹配的條件。 condition1 = Condition(key_prefix_equals='examplefolder', http_err_code_return_equals=404) # 指定鏡像回源時攜帶的Header。 mirror_headers_set_1 = MirrorHeadersSet("myheader-key5", "myheader-value5") mirror_headers_set_2 = MirrorHeadersSet("myheader-key6", "myheader-value6") set_list = [mirror_headers_set_1, mirror_headers_set_2] pass_list = ['myheader-key1', 'myheader-key2'] remove_list = ['myheader-key3', 'myheader-key4'] mirror_header = RedirectMirrorHeaders(pass_all=True, pass_list=pass_list, remove_list=remove_list, set_list=set_list) # 指定匹配此規則後執行的動作。 redirect1 = Redirect(redirect_type=REDIRECT_TYPE_MIRROR, mirror_url='https://www.example.com/', mirror_pass_query_string=True, mirror_follow_redirect=True, mirror_check_md5=True, mirror_headers=mirror_header) rule1 = RoutingRule(rule_num=1, condition=condition1, redirect=redirect1) website_set = BucketWebsite(index_file, error_file, [rule1]) # 設定鏡像回源。 bucket.put_bucket_website(website_set)
擷取鏡像回源配置
以下代碼用於擷取鏡像回源配置:
#-*-coding:utf-8-*- import oss2 from oss2.models import BucketWebsite, MirrorHeadersSet, RedirectMirrorHeaders, Redirect, RoutingRule, \ REDIRECT_TYPE_MIRROR, Condition from oss2.credentials import EnvironmentVariableCredentialsProvider # 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) # 填寫Bucket所在地區對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。 endpoint = "https://oss-cn-hangzhou.aliyuncs.com" # 填寫Endpoint對應的Region資訊,例如cn-hangzhou。注意,v4簽名下,必須填寫該參數 region = "cn-hangzhou" # examplebucket填寫儲存空間名稱。 bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region) try: # 如果指定的Bucket未開啟靜態網站託管模式,則調用get_bucket_website時會拋出NoSuchWebsite異常。 website_get = bucket.get_bucket_website() # 擷取預設首頁。 print(website_get.index_file) # 擷取預設404頁。 print(website_get.error_file) for rule in website_get.rules: print(rule.rule_num) # 擷取規則匹配的首碼。 print(rule.condition.key_prefix_equals) # 擷取HTTP狀態代碼。 print(rule.condition.http_err_code_return_equals) # 擷取跳轉的類型。 print(rule.redirect.redirect_type) # 擷取鏡像回源的來源站點地址。 print(rule.redirect.mirror_url) # 擷取攜帶的請求參數。 print(rule.redirect.pass_query_string) # 擷取Redirect時Object名稱通過ReplaceKeyWith指定的替換值,ReplaceKeyWith支援變數。 # print(rule.redirect.replace_key_with) # 擷取Redirect時Object名稱的首碼替換值。如果首碼為空白,則將這個字串插入Object名稱的前面。 # print(rule.redirect.replace_key_prefix_with) # 擷取跳轉時的協議。 # print(rule.redirect.proto) # 擷取跳轉時的網域名稱。 # print(rule.redirect.host_name) # 擷取跳轉時返回的狀態代碼。 # print(rule.redirect.http_redirect_code) except oss2.exceptions.NoSuchWebsite as e: print('Website is not configured, request_id={0}'.format(e.request_id))
刪除鏡像回源配置
以下代碼用於刪除鏡像回源配置:
#-*-coding:utf-8-*- import oss2 from oss2.credentials import EnvironmentVariableCredentialsProvider # 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) # 填寫Bucket所在地區對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。 endpoint = "https://oss-cn-hangzhou.aliyuncs.com" # 填寫Endpoint對應的Region資訊,例如cn-hangzhou。注意,v4簽名下,必須填寫該參數 region = "cn-hangzhou" # examplebucket填寫儲存空間名稱。 bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region) # 刪除鏡像回源配置。 bucket.delete_bucket_website()
相關文檔
關於設定靜態網站或者鏡像回源的API介面說明,請參見PutBucketWebsite。
關於擷取靜態網站或者鏡像回源的API介面說明,請參見GetBucketWebsite。
關於刪除靜態網站或者鏡像回源的API介面說明,請參見DeleteBucketWebsite。