本文由簡體中文內容自動轉碼而成。阿里雲不保證此自動轉碼的準確性、完整性及時效性。本文内容請以簡體中文版本為準。

基於ESA邊緣函數的轉寄和重新導向實踐指南

更新時間:2025-03-21 19:14

本文通過邊緣節點的邊緣函數來實現請求的轉寄和重新導向,減少對來源站點的壓力,降低使用者訪問的延遲,有效降低來源站點頻寬和計算資源的消耗。

背景

在Web服務的迭代演化中,業務常面臨網域名稱遷移、介面版本升級、多地區流量調度等情境。傳統基於Web伺服器(如Nginx)或ESA控制台的重新導向或轉寄配置,存在生效延遲高、靈活度差、維護成本高等痛點。本文將以ESA邊緣計算平台為例,來給您介紹邊緣函數在這方面的技術優勢。

傳統服務端URL重新導向和轉寄的三大技術瓶頸

邊緣函數在URL重新導向和轉寄的技術優勢

傳統服務端URL重新導向和轉寄的三大技術瓶頸

邊緣函數在URL重新導向和轉寄的技術優勢

效能壓力大

單台Nginx伺服器在500QPS壓力下,重新導向延遲陡增400%(實測資料)。

分布式效能躍遷

  • 通過300+邊緣節點平行處理,實測支撐50萬QPS無效能衰減。

  • 邊緣節點自動Auto Scaling,重新導向業務不再佔用主商務服務器資源。

靈活性很差

市面常見方案僅支援基礎字串替換,缺失正則捕獲/動態決策能力。

正則編程級控制

支援Regex,可實現動態路徑參數化改寫。

維護成本高

每次策略變更需重啟服務,灰階發布需額外搭建流量泳道。

熱部署能力

策略修改秒級生效,支援按地區灰階發布環境。

方案原理

  1. ESA將使用者請求調度至最優的邊緣節點上,並通過邊緣函數進行處理。

  2. 在邊緣函數中,會對請求按照自訂的規則進行匹配。

  3. 如果是命中重新導向規則的請求,則直接返回給使用者重新導向的地址。

  4. 如果是命中轉寄規則的請求,會對請求進行轉寄,轉寄到對應的來源站點。

方案實現

第一步:添加網站

在開始網站接入前,您需要先將待接入網站的根網域名稱添加至ESA中。

  1. 在ESA控制台,選擇網站管理,單擊新增網站

  2. 输入站点頁面的輸入框中,輸入您要接入網站的根網域名稱(例如example.com),單擊下一步image

  3. 选择区域和接入方式頁面,在区域選擇您的網站需要獲得安全加速服務的地區,並在接入方式處選擇CNAME方式,單擊下一步image

  4. 选择套餐类型頁面,可以通過新購套餐和綁定可選套餐兩種方式為網站綁定適合您的套餐,按照控制台指引完成套餐訂購。

第二步:配置邊緣函數

  1. 登入ESA控制台,在左側導覽列選擇邊緣計算 > 邊緣函數

  2. 邊緣函數頁面,單擊建立函數

  3. 建立函數對話方塊中,您可以選擇ESA提供的模板產生函數代碼,也可以選擇業務需要的模板。選擇完成後,單擊下一步

    image

  4. 配置函數規格等基本資料,完成後單擊提交

    image

    參數

    說明

    參數

    說明

    函數名稱

    請輸入函數名稱。

    說明

    小寫英文字母開頭,可包含小寫英文字母、數字和中劃線,但不能以中劃線結尾,名稱長度2到41個字元,例如routine-name。函數名建立後無法修改。 

    規格

    函數代碼單次執行最多使用的CPU時間(不包含等待網路請求響應的I/O時間),RT最大值120秒,可用記憶體128 MB。不同規格的費用不同,預設選擇5ms規格。更多計費資訊,請參見邊緣函數計費說明

    • 單個請求可用CPU時間片:5ms(預設)

    • 單個請求可用CPU時間片:50ms

    • 單個請求可用CPU時間片:100ms

    描述

    (選填)函數的描述資訊。

    代碼預覽

    函數代碼預覽資訊。

第三步:配置觸發器

ESA邊緣函數中,觸發器定義了函數指令碼的調用方式。通過網域名稱綁定功能,您可以為函數分配一個網域名稱,直接通過該網域名稱訪問函數。

例如:您已在ESA添加了網站example.com,您想通過function.example.com訪問邊緣函數,那麼function.example.comfunction.example.com/userfunction.example.com/login等請求均會被轉寄至邊緣函數。

  1. 在左側功能表列單擊邊緣計算 > 邊緣函數,在邊緣函數列表頁面選擇目標函數,在操作列單擊詳情

  2. 在函數詳情頁面,切換至觸發器頁簽,單擊添加網域名稱。為邊緣函數分配訪問網域名稱function.example.com,單擊確定

  3. 在網域名稱綁定地區找到上一步所建立的邊緣函數網域名稱,在操作列單擊查看DNS記錄,在DNS記錄管理頁面複製邊緣函數網域名稱對應的CNAME值。

    function_cname

  4. 登入Alibaba Cloud DNS控制台,在左側功能表列單擊公網DNS解析 > 權威網域名稱解析,在權威網域名稱頁簽下找到目標網站的網域名稱,單擊解析設定

  5. 解析設定中單擊添加記錄,按以下配置添加記錄,單擊確定

    配置項

    說明

    樣本值

    配置項

    說明

    樣本值

    記錄類型

    選擇網域名稱指向的類型。

    CNAME

    主機記錄

    根據網域名稱首碼填寫主機記錄。

    function

    記錄值

    填寫邊緣函數網域名稱對應的CNAME值。

    function.example.com.a1.initmm.com

    TTL

    網域名稱的更新周期,保留預設值。

    10分鐘

  6. 重新整理DNS記錄頁面,檢查邊緣函數網域名稱對應CNAME狀態是否從待配置轉變為已配置

    說明

    CNAME生效時間可能需要數分鐘,配置完成之後,如果沒有及時生效,請耐心等待。

第四步:調試並發布函數

  1. 登入ESA控制台

  2. 在左側導覽列,選擇邊緣計算 > 邊緣函數

  3. 邊緣函數頁面,選擇您建立的函數,單擊詳情

    image

  4. 詳情頁面,選擇代碼頁簽,將下方的示範代碼粘貼到編輯器中。

    // 需求情境,想要實現的功能如下:
    // 1. 如果請求的Path部分是以”/esa/“開頭,以”.html“結尾的,則直接將請求轉寄到ESA的官網。
    // 2. 如果請求的Path部分是以”/product“開頭,則將使用者請求重新導向阿里雲官網產品頁。
    // 3. 如果請求未匹配上述規則,則重新導向到阿里雲官網首頁。
    
    
    // 定義Regex:如Path部分是以”/esa/“開頭,以”.html“結尾的
    const productPageRegex = /^\/esa\/.*\.html$/;
    
    function handleRequest(request) {
      const url = new URL(request.url);
      const pathName = url.pathname;
    
       // 如果Path部分是以”/esa/“開頭,以”.html“結尾的,則直接將請求轉寄到ESA產品頁
      if(productPageRegex.test(pathName)) {
        const newUrl = 'https://www.aliyun.com/product/esa';
        return fetch(new Request(newUrl, request)); 
      }
    
      // 滿足以”/product“開頭,直接重新導向到首頁阿里雲官網產品頁。
      if (pathName.startsWith('/product')) {
        const newUrl = 'https://www.aliyun.com/product/list';  
        return Response.redirect(newUrl, 301);
      }
      
      // 如果請求未匹配上述規則,則重新導向到阿里雲官網首頁。
      const newUrl = 'https://www.aliyun.com/';  
      return Response.redirect(newUrl, 301); 
    }
    
    export default {
      fetch(request) {
        return handleRequest(request);
      }
    }
  5. ESA在控制台代碼開發工具右側提供了一套調試環境,完成代碼開發後,您可以先單擊儲存,然後直接在右側工具列構造HTTP的要求方法、要求標頭、請求體,構造完成後單擊請求按鈕,控制台將直接返回您的請求經過函數處理後的響應結果。

  6. 調試完代碼後,單擊產生版本。您可以在部署頁簽,查看產生的版本。

    image

  7. 選擇上一步產生的版本,點擊發布。您可以選擇在測試環境、灰階環境或生產環境發布。本次實踐作為示範,直接在生產環境發布。

    說明

    建議的發布順序:先發布測試環境,待測試完成之後,再發布到各個灰階環境。所有灰階環境全部發布完成後,再發布至生產環境。

方案驗證及清理

方案驗證

重要

您在驗證的時候,需要將下方樣本中的function.example.com替換成您在第三步中綁定的網域名稱。

  1. 驗證ESA邊緣函數的URL轉寄。

    直接在瀏覽器中輸入http://function.example.com/esa/info.html,可以看到瀏覽器在頁面地址欄不變的情況下,展示了阿里雲ESA的首頁,此時邊緣函數的中的轉寄處理已經生效。

  2. 驗證ESA邊緣函數的URL重新導向。

    直接在瀏覽器中輸入http://function.example.com/product,可以看到瀏覽器會自動跳轉到阿里雲產品頁,並且地址欄的地址也會變為https://www.aliyun.com/product/list

    開啟瀏覽器的開發人員工具,找到http://function.example.com/product的請求資訊,可以看到Status Code301 Moved Permanently;回應標頭(Response Headers)中Location的值為https://www.aliyun.com/product/list

    此時,ESA邊緣函數的重新導向操作已經生效。

    esa_redirect

資源清理

在本方案中,您建立多個雲資源執行個體。測試完方案後,如果不再需要這些資源,您可以參考以下規則處理對應產品的執行個體,避免繼續產生費用:

  1. 刪除ESA加速節點。

    登入ESA控制台,在左側導覽列單擊網站管理,在網站管理列表頁面右側操作列單擊刪除

  2. 刪除邊緣函數。

    ESA控制台,在左側導覽列單擊邊緣計算 > 邊緣函數,在邊緣函數列表頁面右側操作列單擊刪除

  3. 刪除DNS解析記錄。

    登入Alibaba Cloud DNS控制台,在權威網域名稱解析頁簽下找到目標網站的網域名稱,單擊解析設定。找到第三步:配置觸發器中配置的主機記錄,點擊刪除按鈕。

  • 本頁導讀 (M)
  • 背景
  • 方案原理
  • 方案實現
  • 第一步:添加網站
  • 第二步:配置邊緣函數
  • 第三步:配置觸發器
  • 第四步:調試並發布函數
  • 方案驗證及清理
  • 方案驗證
  • 資源清理
文檔反饋
phone 聯絡我們

立即和Alibaba Cloud在線服務人員進行交談,獲取您想了解的產品信息以及最新折扣。

alicare alicarealicarealicare