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

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

 更新時間:2015年03月02日 09:08:47   投稿:junjie  
這篇文章主要介紹了運行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端口,明顯會產(chǎn)生沖突。幸好,有一個叫做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)建站點,指向Express程序的目錄,關(guān)鍵是還要增加一個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)容也可以通過IIS管理器的可視化界面配置。大概意思把所有請求重寫到bin/www,而且使用iisnode擴(kuò)展運行bin/www。然而,打開站點后,卻出現(xiàn)了這樣的錯誤提示:

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

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

起初是覺得不明所以,后來突然醒悟,ASP.NET里面的bin目錄是個不允許訪問的特殊目錄。把請求重寫到bin/www,恰好命中了這條規(guī)則。所以呢,改一下目錄名就好了,比如把bin改成launch(事實證明這不是好做法,后面再說),web.config也要對應(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管理器中重啟站點后再次訪問,終于運行起來了,不容易啊!不過還是高興得太早了。

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

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

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

<iisnode promoteServerVars="REMOTE_ADDR" />

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

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

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

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

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

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

繼續(xù)測試,又發(fā)現(xiàn)另外一個問題。正常來說,博客后臺的文件上傳功能會把文件傳到public/upload這個目錄下,但實際上卻在launch目錄(即原來的bin目錄)下生成了public/upload文件夾。其實原因是作為程序入口的www文件是在launch目錄下,所以launch目錄成了應(yīng)用程序的執(zhí)行目錄。我的解決辦法是,把launch目錄的名字改回bin,在根目錄下創(chuàng)建一個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還不是一個成熟的產(chǎn)品,當(dāng)然Node.js也不是(至今還沒1.0),一切都有待進(jìn)一步探索和完善。

相關(guān)文章

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

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

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

    node.js安裝及HbuilderX配置詳解

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

    npm安裝時的錯誤排查的方法

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

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

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

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

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

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

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

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

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

    Node express 官方示例cors跨域解析

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

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

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

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

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

最新評論

开江县| 阜南县| 平远县| 武胜县| 湟源县| 保亭| 会宁县| 勃利县| 富平县| 易门县| 罗定市| 凤城市| 名山县| 太谷县| 沅江市| 巢湖市| 安阳市| 察隅县| 昌平区| 潮州市| 乌苏市| 石嘴山市| 绵竹市| 嘉善县| 上虞市| 丰城市| 富川| 轮台县| 蓝田县| 阳春市| 武功县| 双桥区| 华容县| 肇源县| 汉源县| 九江市| 博兴县| 泗阳县| 塔河县| 湘阴县| 隆德县|