在IIS7中使用ARR(Application Request Routing)反向 Proxy虛擬目錄到Nodejs網站

來源:互聯網
上載者:User

標籤:tst   部署   cti   reg   注意   步驟   cal   指南   重寫   

在IIS7中使用ARR(Application Request Routing)反向 Proxy虛擬目錄到Nodejs網站

目標:

 1.訪問www.arrdemo.com/proxy 跳轉到 localhost:8898的Nodejs網站

 2.Nodejs網站的頁面可以返回到瀏覽器,包括js,css,圖片

 3.Nodejs網站的 res.redirect(‘ ‘) 重新導向要正確,包括站內跳轉和站外跳轉

步驟:1. 建立網站綁定網域名稱www.arrdemo.com,配置host檔案指向本機,建立虛擬目錄proxy。  

注意去掉虛擬目錄->壓縮->"啟用動態內容壓縮"和“啟用靜態內容壓縮” 前面的勾選。否則會出現如下錯誤:

HTTP 錯誤 500.52 - URL Rewrite Module Error.HTTP 響應的內容已編碼(“gzip”)時,無法應用出站重寫規則。
  2.啟動Nodejs網站 http://localhost:8898

  這個網站是《nodejs開發指南》上的microblog執行個體,學習過程中改成了Express4.13.1版本。

  3.安裝ARR,啟用Proxy

   (http://www.iis.net/downloads/microsoft/application-request-routing)

  安裝完成後,開啟IIS->選中伺服器名稱->雙擊 右側功能視圖 IIS 節點下的Application Request Routing Cache->點擊 右側操作視圖Proxy節點下的Server Proxy Settings->勾選上Enable Proxy前面的複選框

     

 

 

 

 

 4.配置虛擬目錄的URL重寫規則

  在IIS節點,網站節點,虛擬目錄節點都可以配置URL重新規則,並且一級級繼承。配置完成後資訊儲存到對應的web.config檔案中。所以如果 www.arrdemo.com部署在多個伺服器上,每個伺服器的proxy虛擬目錄都需要重新導向時可以採取拷貝proxy下的web.config檔案 的方式快速部署。這裡只在proxy虛擬目錄下部署,排除繼承的影響。

  首先,配置入站規則。 把http://www.arrdemo.com/proxy/reg 這樣的url重寫成 http://localhost:8898/reg

 

雙擊"URL重寫",從入站規則下選擇空白規則模板。剩下的注意細看圖片注釋:

到這一步正常情況下在瀏覽器裡輸入http://www.arrdemo.com/proxy,應該可以看到有內容輸出了,但是沒有任何樣式和js效果。如:

這是因為入站規則能把請求轉寄到nodejs裡,nodejs返回的html內容再轉寄到瀏覽器。但html裡的css和js還有圖片的路徑一般都是相對網站根路徑的,不會加上虛擬目錄proxy,所以前端看不到任何樣式。

這時候該出站規則上場了。。。。。。。

 然後 ,配置出站規則。 把http://localhost:8898/bootstrap/..... 這樣的url轉換成http://www.arrdemo.com/proxy/bootstrap/.....

我這裡就拿已經配置好的規則示範了。規則多了分先後順序,如果匹配上了是否”停止處理“很重要。比如:匹配上兩個重新類型的規則,那麼就會在輸出裡出現proxy/proxy的情形,導致出錯。

第一個規則 bbbb,處理輸出的js、css、圖片等路徑不對問題。

 

做完第一個規則,本應萬事大吉,只剩喝酒了。然而。。。。然而。。。。。開啟網頁登陸後跳轉到首頁的地址變成了 www.arrdemo.com 沒有加上proxy。接著下一規則走起。。。

第二個規則處理res.redirect(‘/‘); 這種站內跳轉 

站內跳轉需要在輸出時添加proxy,主要是檢查  {RESPONSE_STATUS} 變數為302, 然後在 重寫時輸出 /proxy{R:1},規則如下(請細看圖):

這樣處理後站內跳轉的就沒問題了。

 

第三個規則處理res.redirect(‘http://www.baidu.com‘); 這種站外跳轉

  跟第二個規則的區別就是這種跳轉不做任何操作,直接拋出,規則如下:

現在再去瀏覽器裡訪問一下試試吧,如果還不行,請重啟網站。

總結:

1.完整的設定檔奉上

proxy 下的 web.config

2.尋找資料除了百度、必應最應該想到的就是官網協助文檔

每一步操作右側都有個協助的連結,點進去是詳細的英文文檔。

不過也不要完全相信,比如配置重新導向跳轉時,文檔裡是這樣的:

<outboundRules>    <!-- This rule changes the domain in the HTTP location header for redirection responses -->    <rule name="Change Location Header">        <match serverVariable="RESPONSE_LOCATION" pattern="^http://[^/]+/(.*)" />        <conditions>            <add input="{RESPONSE_STATUS}" pattern="^301" />        </conditions>        <action type="Rewrite" value="http://{HTTP_HOST}/{R:1}"/>    </rule></outboundRules>

我明明感覺應該是302啊,這裡為什麼是301;還有Rewrite 裡那麼寫真的對嗎?我不確定,不過也得到一個思路使用RESPONSE_STATUS變數。

微服務、nodejs好像很火的樣子,我也在嘗試。希望這篇文章可以讓node+nginx實現網域名稱解析的人們多一種解決思路 node+iis+arr實現網域名稱解析。

在IIS7中使用ARR(Application Request Routing)反向 Proxy虛擬目錄到Nodejs網站

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.