標籤:問題 false source 預設 mod 最大串連數 串連 自動 reac
最近比較喜歡用Node.js做一些簡單的應用,一直想要部署到生產環境中,但是手上只有一台windows server 2008伺服器,並且已經開啟了IIS服務,運行了很多.Net開發的網站,80連接埠已經被佔用了。
起初是想用nginx來作為web伺服器監聽80連接埠,將所有web訪問轉寄到對應的IIS和node,但由於已啟動並執行老網站眾多,如此配置實在需要大量的精力,於是突發奇想,能不能直接利用IIS來託管node服務呢?進過一番搜尋之後發現了iisnode模組,可以很輕鬆的解決這個問題。下面就把實操步驟分享出來,方便有同樣需求的朋友參考。
首先iisnode是一個IIS Module載入到IIS以後,就可以在任意網站中通過Web.config指定某些路徑轉交給node程式執行,通過參數配置,可以設定啟動的node進程個數,以及最大串連數等。並且可以監聽網站檔案變化,自動重啟node服務等功能。
iisnode代碼託管在github上,如果不想自己編譯,可以直接通過以下連結下載適合自己的版本。
https://github.com/tjanczuk/iisnode/wiki/iisnode-releases
比如我的伺服器是windows server 2008 64位系統,選擇下載“iisnode for iis 7/8 (x64)”安裝程式
只要版本正確,安裝過程並沒有需要特別注意的,自己根據提示一步一步完成即可。
之後還需要安裝一下IIS的URL Rewrite模組(需要利用rewrite功能轉寄相關的請求交給node服務來執行)
:http://www.iis.net/downloads/microsoft/url-rewrite
軟體全部安裝完成之後,在IIS中建立網站,將目錄指定到我們的nodejs應用目錄即可,最後關鍵的一步,在目下建立web.config設定檔並寫入如下的內容:
<configuration> <system.webServer> <handlers> <add name="iisnode" path="app.js" verb="*" modules="iisnode" resourceType="Unspecified" requireAccess="Script" /> </handlers> <rewrite> <rules> <rule name="all"> <match url="/*" /> <action type="Rewrite" url="app.js" /> </rule> </rules> </rewrite> <iisnode promoteServerVars="REMOTE_ADDR" /> </system.webServer></configuration>
作用是將目前的目錄的所有請求都利用iisnode模組轉寄到node服務,並指定了node的執行目錄。其中的app.js就是node應用的入口檔案(可以按照自己的目錄結構進行修改)。
一切就緒,現在開啟瀏覽器訪問網站,就可以看到效果了。
如果啟動並執行時候出現如下錯誤:
500.19配置錯誤 不能在此路徑中使用此配置節。如果在父層級上鎖定了該節,便會出現這種情況。鎖定是預設設定的(overrideModeDefault="Deny"),或者是通過包含 overrideMode="Deny" 或舊有的 allowOverride="false" 的位置標記明確設定的。
通過cmd運行如下代碼即可解決:
%windir%\system32\inetsrv\appcmd unlock config -section:system.webServer/handlers
其中的handlers是報錯的節點名字。
另外如果是Express的項目,建議把web.config檔案改為如下內容
<configuration> <system.webServer> <handlers> <add name="iisnode" path="launch.js" verb="*" modules="iisnode" resourceType="Unspecified" requireAccess="Script" /> </handlers> <rewrite> <rules> <rule name="all"> <match url="/*" /> <action type="Rewrite" url="launch.js" /> </rule> </rules> </rewrite> <iisnode promoteServerVars="REMOTE_ADDR" /> </system.webServer></configuration>
並建立程式入口檔案launch.js 代碼如下:
#!/usr/bin/env noderequire(‘./bin/www‘);
如此操作的原因請參考博文:http://heeroluo.net/article/detail/118/suffering-from-iisnode
利用iisnode模組,讓你的Node.js應用跑在Windows系統IIS中