全部產品
Search
文件中心

Object Storage Service:Python靜態網站託管(鏡像回源)

更新時間:Oct 26, 2024

您可以將儲存空間(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