最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

運(yùn)行Node.js的IIS擴(kuò)展iisnode安裝配置筆記

 更新時(shí)間:2015年03月02日 09:08:47   投稿:junjie  
這篇文章主要介紹了運(yùn)行Node.js的IIS擴(kuò)展iisnode安裝配置筆記,iisnode的擴(kuò)展可以把Node.js程序托管到IIS,托管之后也意味著可以使用IIS里面的各種功能,需要的朋友可以參考下

今年年初打算用Node.js基于Express框架重寫博客程序,從此告別ASP.NET。然而,我目前用的VPS是Windows Server系統(tǒng)、IIS服務(wù)器,如果讓Express和IIS都監(jiān)聽80端口,明顯會(huì)產(chǎn)生沖突。幸好,有一個(gè)叫做iisnode的擴(kuò)展可以把Node.js程序托管到IIS。而且,這樣托管之后也意味著可以使用IIS里面的各種功能(進(jìn)程管理、GZip壓縮、日志、緩存、權(quán)限控制、域名綁定等)。

要使用iisnode,得安裝:

1.Node.js
2.IIS的URL Rewrite模塊
3.iisnode

裝好之后,還是按照常規(guī)操作,在IIS管理器中創(chuàng)建站點(diǎn),指向Express程序的目錄,關(guān)鍵是還要增加一個(gè)web.config文件:

復(fù)制代碼 代碼如下:

<configuration>
    <system.webServer>
        <handlers>
            <add name="iisnode" path="bin/www" verb="*" modules="iisnode" resourceType="Unspecified" requireAccess="Script" />
        </handlers>

        <rewrite>
            <rules>
                <rule name="all">
                    <match url="/*" />
                    <action type="Rewrite" url="bin/www" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

這段內(nèi)容也可以通過(guò)IIS管理器的可視化界面配置。大概意思把所有請(qǐng)求重寫到bin/www,而且使用iisnode擴(kuò)展運(yùn)行bin/www。然而,打開站點(diǎn)后,卻出現(xiàn)了這樣的錯(cuò)誤提示:

復(fù)制代碼 代碼如下:

請(qǐng)求篩選模塊被配置為拒絕包含 hiddenSegment 節(jié)的 URL 中的路徑

起初是覺得不明所以,后來(lái)突然醒悟,ASP.NET里面的bin目錄是個(gè)不允許訪問(wèn)的特殊目錄。把請(qǐng)求重寫到bin/www,恰好命中了這條規(guī)則。所以呢,改一下目錄名就好了,比如把bin改成launch(事實(shí)證明這不是好做法,后面再說(shuō)),web.config也要對(duì)應(yīng)調(diào)整:
復(fù)制代碼 代碼如下:

<configuration>
    <system.webServer>
        <handlers>
            <add name="iisnode" path="launch/www" verb="*" modules="iisnode" resourceType="Unspecified" requireAccess="Script" />
        </handlers>

        <rewrite>
            <rules>
                <rule name="all">
                    <match url="/*" />
                    <action type="Rewrite" url="launch/www" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

在IIS管理器中重啟站點(diǎn)后再次訪問(wèn),終于運(yùn)行起來(lái)了,不容易??!不過(guò)還是高興得太早了。

在測(cè)試程序功能的過(guò)程中,竟然發(fā)現(xiàn)獲取到的IP為空。在Express框架中,IP是通過(guò)req.ip獲取的,而req.ip又是從請(qǐng)求頭的REMOTE_ADDR獲取值。通過(guò)一段簡(jiǎn)單的測(cè)試代碼,發(fā)現(xiàn)REMOTE_ADDR的值也為空。很明顯,從IIS到Node.js的過(guò)程中,這段頭信息丟失了。Google一番之后,發(fā)現(xiàn)iisnode確有此問(wèn)題,官方提供的解決方案是使用X-Forword-For,不過(guò)我又發(fā)現(xiàn)了另外一個(gè)辦法。

Web.config中有一段配置(加到</system.webServer>前)可以保留REMOTE_ADDR:

復(fù)制代碼 代碼如下:

<iisnode promoteServerVars="REMOTE_ADDR" />

根據(jù)說(shuō)明,保留的REMOTE_ADDR會(huì)被改名為x-iisnode-REMOTE_ADDR,所以還得把req.ip的值覆蓋一次,在Express的app.js中增加一個(gè)中間件函數(shù):

復(fù)制代碼 代碼如下:

app.use(function(req, res, next) {
    req.ip = req.headers['x-iisnode-REMOTE_ADDR'];
    next();
});

然而,這樣調(diào)整后,獲取到的IP還是空,這不免讓人懷疑,req.ip的賦值是不是失敗了。看一下Express的源代碼可以發(fā)現(xiàn),req.ip是通過(guò)define getter的方式定義的,所以要覆蓋它就得再define一次:
復(fù)制代碼 代碼如下:

app.use(function(req, res, next) {
    Object.defineProperty(req, 'ip', {
        get: function() { return this.headers['x-iisnode-REMOTE_ADDR']; }
    });
    next();
});

這樣問(wèn)題終于解決了,但這不是一個(gè)好方法,要是以后Express把req.ip設(shè)成只讀就麻煩了。

繼續(xù)測(cè)試,又發(fā)現(xiàn)另外一個(gè)問(wèn)題。正常來(lái)說(shuō),博客后臺(tái)的文件上傳功能會(huì)把文件傳到public/upload這個(gè)目錄下,但實(shí)際上卻在launch目錄(即原來(lái)的bin目錄)下生成了public/upload文件夾。其實(shí)原因是作為程序入口的www文件是在launch目錄下,所以launch目錄成了應(yīng)用程序的執(zhí)行目錄。我的解決辦法是,把launch目錄的名字改回bin,在根目錄下創(chuàng)建一個(gè)launch.js去調(diào)用bin/www:

復(fù)制代碼 代碼如下:

#!/usr/bin/env node

require('./bin/www');

然后把程序入口改為launch.js:

復(fù)制代碼 代碼如下:

<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>

顯然,iisnode還不是一個(gè)成熟的產(chǎn)品,當(dāng)然Node.js也不是(至今還沒(méi)1.0),一切都有待進(jìn)一步探索和完善。

相關(guān)文章

  • nodejs基礎(chǔ)之buffer緩沖區(qū)用法分析

    nodejs基礎(chǔ)之buffer緩沖區(qū)用法分析

    這篇文章主要介紹了nodejs基礎(chǔ)之buffer緩沖區(qū)用法,結(jié)合實(shí)例形式分析了buffer緩沖區(qū)的概念、功能、創(chuàng)建、讀寫等相關(guān)操作技巧,需要的朋友可以參考下
    2018-12-12
  • node.js安裝及HbuilderX配置詳解

    node.js安裝及HbuilderX配置詳解

    這篇文章主要介紹了node.js安裝及HbuilderX配置的相關(guān)資料,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • npm安裝時(shí)的錯(cuò)誤排查的方法

    npm安裝時(shí)的錯(cuò)誤排查的方法

    在我們的日常工作中,使用npm來(lái)安裝依賴是非常常見的,然而,有時(shí)候安裝過(guò)程中會(huì)遇到各種各樣的報(bào)錯(cuò),本文主要介紹了npm安裝時(shí)的錯(cuò)誤排查的方法,感興趣的可以了解一下
    2024-08-08
  • node實(shí)現(xiàn)批量上傳本地圖片轉(zhuǎn)為圖片CDN的項(xiàng)目實(shí)踐

    node實(shí)現(xiàn)批量上傳本地圖片轉(zhuǎn)為圖片CDN的項(xiàng)目實(shí)踐

    本文主要介紹了node實(shí)現(xiàn)批量上傳本地圖片轉(zhuǎn)為圖片CDN的項(xiàng)目實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • 使用nodejs?spider爬取圖片及數(shù)據(jù)實(shí)現(xiàn)

    使用nodejs?spider爬取圖片及數(shù)據(jù)實(shí)現(xiàn)

    這篇文章主要為大家介紹了使用nodejs?spider爬取圖片及數(shù)據(jù)實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • nodejs實(shí)現(xiàn)郵箱發(fā)送驗(yàn)證碼功能

    nodejs實(shí)現(xiàn)郵箱發(fā)送驗(yàn)證碼功能

    開發(fā)個(gè)人網(wǎng)站時(shí),注冊(cè)頁(yè)面可以使用郵箱驗(yàn)證,于是記錄一下如何用nodejs/express服務(wù)器實(shí)現(xiàn)郵箱發(fā)送驗(yàn)證碼,不僅可以在郵箱注冊(cè)時(shí)使用,還可以拓展用于各種安全驗(yàn)證,本文給大家介紹了使用nodejs實(shí)現(xiàn)郵箱發(fā)送驗(yàn)證碼功能,需要的朋友可以參考下
    2024-07-07
  • NodeJs安裝npm包一直失敗的解決方法

    NodeJs安裝npm包一直失敗的解決方法

    本篇文章主要介紹了NodeJs安裝npm包一直失敗的解決方法。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-04-04
  • Node express 官方示例cors跨域解析

    Node express 官方示例cors跨域解析

    這篇文章主要為大家介紹了Node express 官方示例cors跨域解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • nodejs實(shí)現(xiàn)jwt的示例代碼

    nodejs實(shí)現(xiàn)jwt的示例代碼

    本文主要介紹了nodejs實(shí)現(xiàn)jwt的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Node.js的cross-env工具包使用介紹

    Node.js的cross-env工具包使用介紹

    這篇文章主要為大家介紹了Node.js的cross-env工具包使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08

最新評(píng)論

盱眙县| 潼关县| 石泉县| 延寿县| 喀喇| 青龙| 蓬莱市| 江城| 昆山市| 博爱县| 荥经县| 盱眙县| 清徐县| 十堰市| 达尔| 浦江县| 望谟县| 本溪| 镇沅| 晋中市| 黑山县| 利辛县| 三亚市| 江门市| 木里| 黄骅市| 辛集市| 巢湖市| 庄河市| 托克托县| 林口县| 涿鹿县| 迭部县| 红河县| 高陵县| 宜宾县| 鹤峰县| 太仆寺旗| 腾冲县| 江永县| 尚志市|