我的問題是:
wan(使用者)<->防火牆<-> web(DMZ) <->防火牆 <->AP(intra)<->防火牆<->DB(intra)
例:查詢abc.com會從web導進ap處理
因要使用這個模式來架設網站,
又要在不動程式的情況下完成,且都是win2012主機
目前想到的是web(DMZ)這台架設iis reverse proxy加url rewrite來用,
做導向到AP上的網站查詢或後台管理存取DB,
但是在第一段架設iis reverse proxy加url rewrite就碰上問題了,
GOOGLE了很久看了少少的相關文章,看起來都很簡單,
但都沒有達到我要的方式,我也不知道那裡錯了,所以上來問問有經驗的大大們~
問題:
假設我要查abc.com網址,真正的網站在ap上,
abc.com要由web導向ap,所以abc.com的dns是要指向web這台嗎?
在WEB這台IIS是不是也要架一個空網站呢?
url rewrite的重寫對應要如何寫呢?
原始值是寫abc.com嗎?還是新值寫法是abc.com呢?
我測試原始值是寫abc.com,新值寫123.com或ip,但在url打abc.com是有轉到ap,
但是網址卻由原本的abc.com/test改成123.com/test 或ip/test ,這樣就沒有達到隱藏及proxy的義意吧~
對外代表網址就是abc.com,我是在ap這台上想錯方向嗎?這個對應的用法應該是如何呢?
你這樣傳遞 URL 並沒有達到三層的效果...三層的定義至少有:
Presentaion Tier (Web)
Application Tier (AP)
Data Access Tier (DB)
但是你的設計上, 把 Presentation Tier 的工作, 直接 Proxy 給後面的 Application Tier 去做了, 等於沒有拆分開來....
我認為可以這樣修正:
請在 DMZ 上面的 IIS, 開發一個 backend AP, 負責接收前端的需求, 然後把運算要求, 改用 REST 或 XML 的協定 (或是 XMLRPC, SOAP...隨便你), 把運算指令傳遞給後端的 AP Server, 讓他去運算, 最終結果透過前述的協定路徑傳回給 DMZ Web, 然後由 DMZ Web 決定要如何呈現給前端 Client 的 Browser 看.
舉實際的例子:
前端 Client 想看某種報表, 他連進 DMZ Web, 在網頁上填寫報表所要的條件之後, 按下送出鈕, DMZ Web 收到她的條件, 先檢查裡面是否有不合理或惡意的元素? 確認符合製作報表的參數之後, 將所有報表參數, 打包成 REST/XML 格式, 傳遞給後端的 AP Server, 讓 AP Server 負責去撈 DB 的資料, 在 AP Server 內合併出報表的原始資料, 然後將原始資料透過 REST/XML 傳回給 DMZ Web, DMZ Web 再根據這個 Client 的屬性, 權限, 和牠個人喜愛, 輸出針對此 Client 專用的 HTML/CSS/Javascript 給他的 Browser, 呈現出報表的外觀...
如果中間等待 AP 運算的時間太長, 你可能還需要加個 Message Queue 的機制, 避免前端的 DMZ Web 卡死或是 Timeout....
簡單說:
DMZ Web 必須要決定網頁如何呈現? 不是把整串 URL 原封不動丟給後面就沒事; AP Server 只負責商業邏輯和資料內容, 不需要管資料在網頁上呈現的外觀. 如果你把這個網頁呈現的工作 Proxy/Forward 給 AP Server 去做的話, 就變成 AP Server 一個人負擔兩種 Tier 的工作....