The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

如何利用 IIS7 的 ARR 模組實做 Reverse Proxy 機制

IIS7 的 ARR ( Application Request Routing ) 模組是個「非常強悍」的網站工具,今天抽空研究了一下,並成功設定 Reverse Proxy 機制,由於初學者要上手 ARR 真的有點困難,即便是對 Regular Expression 有經驗的 IT 人要成功設定都可能會遇到許多障礙,如果沒使用過 URL Rewrite 或不瞭解 Reverse Proxy 的人要上手那可是難上加難,所以今天我就分享一篇完整的安裝、設定過程。

安裝 Application Request Routing 1.0 模組

1. 使用 Microsoft Web Platform Installer 安裝 Application Request Routing 1.0 模組

使用 Microsoft Web Platform Installer 安裝 Application Request Routing 1.0 模組

2. 預設會連帶 URL Rewrite 一併安裝,以及其他必要的相關元件也會自動安裝

預設會連帶 URL Rewrite 一併安裝,以及其他必要的相關元件也會自動安裝

    接著按下 I Accept 就會進行自動安裝了。

image

3. 若順利安裝,會得到以下畫面

若順利安裝,會得到此畫面

開啟 IIS 管理員進行設定

1. 先檢視模組是否安裝正確,你先點選「伺服器節點」,再看看 IIS 區段中有沒有 Application Request Routing 與 URL Rewrite 模組。

先檢視模組是否安裝正確,你先點選「伺服器節點」,再看看 IIS 區段中有沒有 Application Request Routing 與 URL Rewrite 模組

2. 先對 Application Request Routing 進行設定,啟用 Proxy 功能,以及取消勾選 "Reverse rewrite host in response headers" 選項,然後再點選右邊的「套用」按鈕,其他預設值都可以不用修改。此步驟修正完成後必須重新啟動 IIS 才會生效。

啟用 Proxy 功能,以及取消勾選 "Reverse rewrite host in response headers" 選項,然後再點選右邊的「套用」按鈕,其他預設值都可以不用修改

3. 接著設定 URL Rewrite 模組,也是進入門檻最高的地方。首先我們先新增一組規則 ( Add Rules )

設定 URL Rewrite 模組,也是進入門檻最高的地方。首先我們先新增一組規則 ( Add Rules )

4. 在 Add rule with rewrite map 視窗設定一組 rewrite map 的名稱,你可以自己手動輸入,但名稱請不要使用空白或特殊符號!在這裡我們手動設定名稱為 ReverseProxyMap

在 Add rule with rewrite map 視窗設定一組 rewrite map 的名稱,你可以自己手動輸入,但名稱請不要使用空白或特殊符號!在這裡我們手動設定名稱為 ReverseProxyMap

5. 我們先新增幾筆我們要設定的 Reverse Proxy 對應表,這裡的 Rewrite Map 是一組很簡單的 Key/Value 值而已,我的目的是要用來對應 HTTP Request 的 HTTP_HOST 標頭值,並轉譯成另一個網址,以達到 Reverse Proxy 的目的。

我們先新增幾筆我們要設定的 Reverse Proxy 對應表,這裡的 Rewrite Map 是一組很簡單的 Key/Value 值而已,我的目的是要用來對應 HTTP Request 的 HTTP_HOST 標頭值,並轉譯成另一個網址,以達到 Reverse Proxy 的目的。

6. 然後我們點選 Back To Rules 準備進行修改 URL Rewrite 的主要設定。

然後我們點選 Back To Rules 準備進行修改 URL Rewrite 的主要設定。

7. 接著在預設幫你建立的 Rewrite rule1 for ReverseProxyMap 這個 Rule 上按滑鼠右鍵進行編輯(Edit)

接著在預設幫你建立的 Rewrite rule1 for ReverseProxyMap 這個 Rule 上按滑鼠右鍵進行編輯(Edit)

8. 這裡的預設設定大多不是我們要的,為了達到 Reverse Proxy 的功能,我們必須修改 Conditions 與 Action 的參數。

這裡的預設設定大多不是我們要的,為了達到 Reverse Proxy 的功能,我們必須修改 Conditions 與 Action 的參數。

9. 修改 Conditions 參數,將預設的參數改掉,你只要將 Condition input 修改成 {ReverseProxyMap:{HTTP_HOST}} 即可。

 修改 Conditions 參數,將預設的參數改掉,你只要將 Condition input 修改成 {ReverseProxyMap:{HTTP_HOST}} 即可

10. 最後我們將 Action 區段的 Rewrite URL 修改成 http://{C:0}/{R:0},將 Append query string 勾選,以及將 Stop processing of subsequent rules 勾選,在點選「套用」就大功告成了!

 最後我們將 Action 區段的 Rewrite URL 修改成 http://{C:0}/{R:0},將 Append query string 勾選,以及將 Stop processing of subsequent rules 勾選,在點選「套用」就大功告成了!

---

最後,進行測試 http://192.168.2.253/ 所得到的網頁就是 http://www.miniasp.com/ 的網頁內容,也明確的符合 Reverse Proxy 的需求。

接著我自己新增一筆 Rewrite Map Entry,在 Original Value 的地方我設定成 testarr ( 這是一個不存在的網域,所以我有在我本機的 hosts 檔案設定這筆紀錄 ),在 New Value 的地方設定成另一個網站網址。

接著我自己新增一筆 Rewrite Map Entry,在 Original Value 的地方我設定成 testarr ( 這是一個不存在的網域,所以我有在我本機的 hosts 檔案設定這筆紀錄 ),在 New Value 的地方設定成另一個網站網址。

測試成功!以上圖為例,我連結到 http://testarr/ 所得到的網頁就是 http://www.yam.com/ 網頁的內容!

---

Reverse Proxy 只是 ARR ( Application Request Routing ) 模組的一個應用而已,實際上 ARR 能做的事情可多著呢,例如說組織 Server Farms、實做 HTTP Load Balance ( Layer 7 )、實做 External Cache,甚至於搭配 NLB 還可提供 High Availability (高可用性) 與 Scalability (高延展性) 的網站環境。

在以往要實做這些機制都要花許多錢購買硬體或高價產品,免費的產品也很多,不過就是要與非常極度複雜的設定檔對抗!現在我們有 ARR 這套免費的佛心級模組,再也不怕大流量的網站需求了。

有了 ARR 雖然一開始也沒有很好設定,但是當瞭解 ARR 的架構、觀念、設定之後,你將會發現擁有 GUI 是多麼美好的事情。

相關連結