通過配置重寫策略,您可以在將請求轉寄給目標後端服務之前修改請求的路徑和主機域,以滿足特定的業務環境和架構要求。重寫策略能夠精確地控制請求的路徑和主機域,並確保將請求正確地路由到適當的服務或端點。
重寫策略
重寫主要用於修改原始請求的路徑(Path)和主機域(Host)。
路徑(Path)重寫
對於路徑(Path)重寫,雲原生網關支援三種重寫入模式:精確重寫、首碼重寫和正則重寫。
精確重寫
精確重寫可以完全修改原始請求的Path。
樣本一
原始請求的Path為/app/test,但轉寄給後端服務的Path為/foo/bar,建議配置方式如下:
路由匹配條件:匹配方式為精確匹配,Path為
/app/test。重寫:重寫方式為精確重寫,Path為
/foo/bar。
精確重寫要求路由的匹配方式為精確匹配或正則匹配,首碼匹配不支援精確重寫。
首碼重寫
首碼重寫可以修改原始請求的Path首碼。
樣本一
原始請求的Path為/app/test,但轉寄給後端服務的Path為/test,配置方式建議如下:
路由匹配條件:匹配方式為首碼匹配,Path為
/app/。重寫:重寫方式為首碼重寫,Path為
/。
路由匹配條件的Path必須設定為/app/,因為首碼重寫只會修改首碼匹配字串。如果路由匹配條件的Path設定為/app,那麼經重寫後的Path結果將會是//test,不符合預期。
樣本二
原始請求的Path為/v1/test,但轉寄給後端服務的Path為/v2/test。配置方式建議如下:
路由匹配條件:匹配方式為首碼匹配,Path為
/v1。重寫:重寫方式為首碼重寫,Path為
/v2。
首碼重寫要求路由的匹配方式為首碼匹配,精確匹配和正則匹配不支援首碼重寫。由於路由匹配方式為首碼匹配且可以匹配所有帶有指定首碼Path的請求,所以您在配置首碼重寫時需要關注是否需要對所有這些請求進行重寫,否則建議使用精確重寫。
正則重寫
正則重寫可以部分修改原始請求的Path。正則重寫包括兩個元素,一個是模式比對串,用於匹配Path上需要修改的部分;另一個是替換串,用於替換匹配成功的Path部分。關於Regex的規範,請參見Regex文法。
樣本一
原始請求的Path為/aaa/one/bbb/one/ccc,但轉寄給後端服務的Path為/aaa/two/bbb/two/ccc,配置方式建議如下:
路由匹配條件:匹配方式為精確匹配,Path為
/aaa/one/bbb/one/ccc。重寫:重寫方式為正則重寫,模式串為
one,替換串為two。
樣本二
原始請求的Path為/httpbin/(.*)/(.*),希望去掉首碼/httpbin並且將兩個Regex部分進行位置交換,配置方式建議如下:
路由匹配條件:匹配方式為正則匹配,Path為
/httpbin/(.*)/(.*)。重寫:重寫方式為正則重寫,模式串為
/httpbin/(.*)/(.*),替換串為/\2/\1,其中\1表示第一個正則匹配到的字串,\2表示第二個正則匹配到的字串,對應Nginx中的$1,$2用法。
正則重寫屬於高階用法,文法較為複雜且一般用於特殊的情境,建議您選擇精確重寫。
主機域(Host)重寫
對於主機域(Host)重寫,雲原生網關支援精確重寫。
例如,原始請求的Host為test.com,但轉寄給後端服務的Host為dev.com,在重寫策略中將重寫主機設定為dev.com。
配置重寫策略
登入MSE網關管理主控台,並在頂部功能表列選擇地區。
在左側導覽列,選擇云原生网关 > 网关列表,單擊目標網關名稱。
在左側導覽列,單擊路由管理,然後選擇路由頁簽。
在需要變更的路由規則操作列下方,單擊策略配置。
在策略配置頁簽,單擊重寫配置路由規則,然後單擊儲存。
說明若原路徑的匹配方式為精確匹配或正則匹配時,重寫路徑匹配方式可以選擇精確重寫。
若原路徑的匹配方式為首碼匹配時,重寫路徑匹配方式可以選擇首碼重寫或正則重寫。
若原路徑的匹配方式為正則匹配時,重寫路徑匹配方式可以選擇精確重寫或正則重寫。
重寫規則配置完成後,開啟開啟右側的開關。在開啟對話方塊,單擊確認。
開啟:網關轉寄請求到後端時,會按照您配置的重寫策略對原請求的路徑(Path)和主機域(Host)進行修改。
關閉:網關轉寄請求到後端時,不會對原請求的路徑(Path)和主機域(Host)進行修改。
結果驗證
假設業務對外暴露需要使用同一首碼app1進行區分,實際後端地址沒有此首碼。您可以選擇首碼重寫Path,將首碼/app1/重寫為/,這樣可以保證請求正確轉寄。
測試請求地址:
curl -I http://121.196.XX.XX/demo/item/list重寫後的測試請求地址(轉寄到後端Path仍為
/demo/item/list):curl -I http://121.196.XX.XX/app1/demo/item/list
相關文檔
如果您想瞭解重新導向路由的更多資訊,請參見路由方式概述。