天天看點

騰訊雲CLB的7層監聽器URL轉發規則優先級

使用騰訊雲的CLB産品,很多場景會用到http或者https監聽器,使用http(s)監聽器,在設定具體轉發規則的時候,需要注意各個規則的優先級,避免實際轉發情況與預期不符。這裡對轉發規則做一個補充介紹。

首先,我們可以看到官方文檔https://cloud.tencent.com/document/product/214/9032的描述,URL支援使用正規表達式,并且不同的開頭字元代表不同含義,個别字元不支援:

騰訊雲CLB的7層監聽器URL轉發規則優先級

不同形式的URL表達式

然後是關鍵的URL比對順序:

騰訊雲CLB的7層監聽器URL轉發規則優先級

劃重點:比對規則:優先精确比對,之後依照規則模糊比對。後面是對這個規則的舉例介紹,沒什麼問題。

但是呢,這裡其實有個問題,文檔的舉例是依據"/"開頭的URL來的,實際上對于正則表示的URL,優先級的規則不一樣,我們來看一個栗子:

騰訊雲CLB的7層監聽器URL轉發規則優先級
騰訊雲CLB的7層監聽器URL轉發規則優先級

這裡我們設定了兩個不同的轉發規則,轉發到後端rs的不同端口,可以看到兩個規則的正則是包含關系,帶admin的正則更精确一些。

接下來我們看看實際轉發情況:

騰訊雲CLB的7層監聽器URL轉發規則優先級

從clb日志可以看到,實際請求被轉發到30010端口,也就是比對了相對不精确的那個規則,這個結果跟前邊的"/?imageView2/2/w/1620"開頭的轉發URL的規則是不一樣的。

到官網文檔去找相關介紹,發現沒有對這一情況的解釋,于是去核實正則的轉發規則優先級,最終确認到是跟nginx的Location規則一緻,我們到nginx文檔去搜尋一下具體的規則http://nginx.org/en/docs/http/ngx_http_core_module.html#location

騰訊雲CLB的7層監聽器URL轉發規則優先級

nginx Location比對規則

可以看到正則比對的時候,優先級是按照規則的先後順序來的,而前面的例子中,帶admin的規則是排在後面,是以優先級靠後了,這樣我們的測試結果就得到了印證。