在 CDN 中部署應用程式要求路由
作者:Won Yoo
本檔的本節適用于 IIS 7 和更新版本的 Microsoft 應用程式要求路由第 2 版。
目標
若要在內容傳遞網路/邊緣快取網路中成功設定子/邊緣快取節點,以及在內容傳遞網路/邊緣快取網路中部署的子/邊緣快取節點和父快取節點, (CDN/ECN) 環境中。 本逐步解說的重點在於瞭解子/邊緣快取節點上和父快取節點上的 URL 重寫規則。 最後,本逐步解說將逐步指示來設定下列組態:
此設定的一些重點如下:
來源查閱是由子/邊緣快取節點完成。
- 客戶清單 (,也就是使用 URL 重寫中的重寫對應明確管理可接受的原始伺服器清單) 。
- 重寫對應中找不到的主機名稱會遭到封鎖。
在大部分的情況下,父快取節點會設定為正向 Proxy。
SAN 已設定為由子/邊緣快取節點共用。
實際上,有 3 層的快取:
- 子/邊緣快取節點。
- 三。
- 父快取節點。
必要條件
本逐步解說假設您已熟悉 ARR 第 2 版中的磁片快取和快取階層管理設定。 如果您尚未這麼做,強烈建議您先檢閱下列逐步解說,再繼續進行:
如果尚未安裝應用程式要求路由第 2 版,您可以在:
- microsoft Application Request Routing Version 2 for IIS 7 (x86) here (
https://download.microsoft.com/download/4/D/F/4DFDA851-515F-474E-BA7A-5802B3C95101/ARRv2_setup_x86.EXE
) 。 - microsoft Application Request Routing Version 2 for IIS 7 (x64) here (
https://download.microsoft.com/download/3/4/1/3415F3F9-5698-44FE-A072-D4AF09728390/ARRv2_setup_x64.EXE
) .
請遵循 安裝應用程式要求路由第 2 版一文中所述的步驟來安裝 ARR 第 2 版。
設定子/Edge 快取節點
步驟 1 - 設定磁片快取
遵循 安裝應用程式要求路由第 2 版一文,設定並啟用磁片快取。 本文也會討論如何設定 SAN 以作為次要快取磁片磁碟機位置。
步驟 2 - 定義父快取節點的伺服器陣列
遵循 使用應用程式要求路由 的快取階層管理一文,定義伺服器陣列並新增父快取節點。
步驟 3 - 為子/邊緣快取節點建立其他 URL 重寫規則
此時,使用 myParentCacheNodes 作為伺服器陣列的名稱,下列 URL 重寫規則已寫入位於 的 applicationHost.config 檔案 %windir%\system32\inetsrv\config\
中:
<rewrite>
<globalRules>
<rule name="ARR_myParentCacheNodes_loadbalance" patternSyntax="Wildcard" stopProcessing="true">
<match url="*" />
<action type="Rewrite" url="http://myParentCacheNodes/{R:0}" />
</rule>
</globalRules>
</rewrite>
上述規則不足以進行 CDN/ECN 部署,因為快取節點已分層,而下一層快取節點 (也就是說,父快取節點) 不知道如何在父快取層發生快取遺漏時尋找源伺服器。
本逐步解說會先讓子快取節點對應源伺服器,再將要求路由傳送至父快取節點,以解決問題。 有兩種最常見的方式會根據子快取節點收到的 URL 來對應源伺服器:
- CDN/ECN 的客戶會指定為子域。 在此情況下,子快取節點的相同 IP 位址可能會有許多主機名稱系結。
例如、http://customer1.mycnd.net/
http://customer2.mycdn.net/
等。 - CDN/ECN 的客戶會指定為 URL 中的第一個路徑。
例如、http://static.mycdn.net/customer1/
http://static.mycdn.net/customer2/
等。
在本逐步解說中,第一個範例用於示範。 您也可以撰寫類似的規則,以啟用第二個案例。
定義 URL 重寫對應,可用來查閱源伺服器的主機名稱。 啟動 IIS 管理員。
選取並展開伺服器的根目錄。 這是您的子 (邊緣) 快取節點。
按兩下 [URL 重寫]。
在 [ 動作 ] 窗格中,按一下 [ 檢視重寫地圖]。
在 [ 動作 ] 窗格中,按一下 [ 新增重寫對應]。
在 [ 新增重寫對應 ] 對話方塊中,將重寫對應命名為 OriginServers。
在重寫對應中,您將明確識別子快取節點接收的主機名稱與對應原始主機名稱之間的對應。 在 [ 動作 ] 窗格中,按一下 [ 新增對應專案...]。
在 [ 新增對應專案 ] 對話方塊中,新增子快取節點接收的主機名稱和原始主機名稱。 在下列範例中,ARR 子快取節點會收到 customer1.mycdn.net 作為主機名稱標頭。 對應的源伺服器 images.customer1.com。
視需要重複步驟 8,以包含 CDN/ECN 提供服務的所有客戶。 這是您可以管理客戶明確清單的方式,以確保您的服務只提供給您的客戶。
若要封鎖不在重寫對應清單上的客戶,請將此重寫對應的預設值設定為 # ,這是每個 RFC 無法當做主機名稱標頭一部分使用的不合法字元。 在 [ 動作 ] 窗格中,按一下 [編輯地圖設定...]。
在 [ 編輯重寫對應] 對話方塊中,輸入 # 作為此重寫地圖的預設值。
使用 OriginServers 重寫對應中設定的規則來重寫主機名稱標頭。 當快取遺漏且要求路由傳送至父快取節點時,要求會有符合源伺服器的主機名稱。 這就是為什麼在大部分的情況下,父快取節點會設定為正向 Proxy。 當父快取節點有快取遺漏時,要求只會根據父快取節點收到的主機名稱標頭路由傳送至源伺服器。
在 URL 重寫 UI 中,找出規則。 在本逐步解說中,規則的名稱應該 ARR_myParentCacheNodes_loadbalance。
選取規則,然後在 [ 動作 ] 窗格中,按一下 [ 編輯]。
按一下 [新增條件 ] 以新增兩個規則。
第一個規則會使用您在步驟 6 中建立的 OriginServers 重寫對應。 下列規則會比對主機標頭做為索引鍵,以符合OriginServers中的專案:
第二個規則會將預設值設定為 # 當主機標頭不符合 OriginServers中的專案時。 如上所述, # 不是有效的字元,無法當做主機名稱使用。 下列規則稍後會用來確保只有客戶 (如 OriginServers 中主機名稱所代表) 由 ARR 提供服務:
選取 [跨條件追蹤擷取群組]。
若要將HTTP_HOST值設定為符合上述條件,請按一下 [伺服器變數]。
輸入下列值以重設HTTP_HOST:
按一下 [確定] 以儲存變更。
在 [ 動作 ] 窗格中,按一下 [ 套用 ] 以儲存變更。
若要確認已寫入正確的規則,請使用 [記事本] 開啟applicationHost.config檔案。 組態檔位於
%windir%\system32\inetsrv\config\
。找出伺服器陣列 myParentCacheNodes的 URL 重寫規則。 這看起來像下面這樣:
<rewrite> <globalRules> <rule name="ARR_myParentCacheNodes_loadbalance" patternSyntax="Wildcard" stopProcessing="true"> <match url="*" /> <conditions trackAllCaptures="true"> <add input="{OrigServers:{HTTP_HOST}}" pattern="*" /> <add input="{C:1}" negate="true" pattern="#" /> </conditions> <serverVariables> <set name="HTTP_HOST" value="{C:1}" replace="true" /> </serverVariables> <action type="Rewrite" url="http://myParentCacheNodes/{R:0}" /> </rule> </globalRules> </rewrite>
強烈建議使用。 若要封鎖不符合上述重寫對應中所定義主機名稱的要求,請建立預設的 URL 重寫規則,以傳送 400 回應給這類要求。
啟動 IIS 管理員。
選取並展開伺服器的根目錄。 這是您的子 (邊緣) 快取節點。
按兩下 [URL 重寫]。
在 [ 動作] 窗格中,按一下 [ 新增規則]。
在 [ 新增規則 (s) ] 對話方塊中,選取 [ 空白規則]。
輸入下列值,然後儲存規則:
名字: 不是我的客戶
使用: 通 配 符
模式: *
動作類型: 自訂回應
狀態碼: 400
子狀態碼: 0規則的順序很重要。 URL 重寫規則會從上到下進行處理。 在此範例中,如果傳入主機名稱符合上述重寫對應中指定的其中一個主機名稱,則會執行第一個規則 ARR_myParentCacheNodes_Loadbalance。 如果傳入主機名稱不符合上述重寫對應中定義的任何主機名稱,則會執行第二個規則 「不是我的客戶」。
子/邊緣快取節點組態已完成。
為了簡化其他子快取節點的設定,可以使用共用組態來管理子快取節點的組態。 否則,必須在 CDN/ECN 環境中的所有子快取節點上個別進行上述設定變更。 若要深入瞭解共用設定,請參閱 共用組態 一文。
設定父快取節點
有兩種方式可將 ARR 設定為父快取節點:
- 將 ARR 設定為正向 Proxy。
- 使用重寫對應將 ARR 設定為「反向」Proxy。
即使使用上述第二個選項,重寫對應只會使用相同的值重寫傳入主機名稱,有效地使其成為正向 Proxy。 重寫對應是用來明確設定父快取將接受的主機名稱清單,類似于上述子快取節點的設定方式。 在本逐步解說的第二個部分中,將會使用第一個選項來設定父快取節點,作為直接的向前 Proxy。
步驟 1 - 設定磁片快取
遵循 在應用程式要求路由中設定和啟用磁片快取一文來設定和啟用磁片快 取。
步驟 2 - 將 ARR 設定為轉寄 Proxy
啟用 ARR 作為 Proxy。 啟動 IIS 管理員。
此設定不包含任何伺服器陣列。 所有設定都是在伺服器層級完成。
按兩下 [應用程式要求路由快取]。
在 [ 動作] 窗格中,按一下 [伺服器 Proxy 設定]。
選取 [ 啟用 Proxy] 核取方塊,然後按一下 [ 套用]。 您剛在伺服器層級啟用 ARR 作為 Proxy。
若要將 ARR 轉換成正向 Proxy,請按一下流覽窗格中的伺服器節點。
按兩下 [URL 重寫]。
在 [ 動作] 窗格中,按一下 [ 新增規則...]。
在 [ 新增規則 (s) ] 對話方塊中,選取 [ 空白規則]。
輸入下列值,然後儲存規則:
名字: 轉寄 Proxy
使用: 通 配 符
模式: *
條件:
輸入: {HTTP_HOST}
類型: 符合模式
模式: *
動作類型: 重寫
重寫 URL: HTTP://{C:1}/{R:0}父快取節點組態已完成。
為了簡化其他父快取節點的設定,可以使用共用組態來管理父快取節點的組態。 否則,必須在 CDN/ECN 環境中的所有父快取節點上個別進行上述設定變更。 若要深入瞭解共用組態,請參閱下列 文章 。
總結
您現在已使用進階 URL 重寫規則,成功設定子快取節點 () 和父快取節點 (2 層式快取階層 CDN/ECN 環境中的) 。 若要驗證功能,您可以遵循設定 和啟用應用程式要求路由中的磁片快取 一文中的步驟 4 和步驟 5。 如果發生錯誤,請遵循 使用失敗的要求追蹤規則對應用程式要求路由進行疑難排解 一文中的步驟,啟用失敗的要求追蹤規則。
如需其他 ARR 第 2 版逐步解說,請參閱 應用程式要求路由第 2 版 概觀一文中的檔。