欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

運(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框架重寫(xiě)博客程序,從此告別ASP.NET。然而,我目前用的VPS是Windows Server系統(tǒng)、IIS服務(wù)器,如果讓Express和IIS都監(jiān)聽(tīng)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)求重寫(xiě)到bin/www,而且使用iisnode擴(kuò)展運(yùn)行bin/www。然而,打開(kāi)站點(diǎn)后,卻出現(xiàn)了這樣的錯(cuò)誤提示:

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

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

起初是覺(jué)得不明所以,后來(lái)突然醒悟,ASP.NET里面的bin目錄是個(gè)不允許訪問(wèn)的特殊目錄。把請(qǐng)求重寫(xiě)到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的賦值是不是失敗了??匆幌翬xpress的源代碼可以發(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)文章

  • 推薦 21 款優(yōu)秀的高性能 Node.js 開(kāi)發(fā)框架

    推薦 21 款優(yōu)秀的高性能 Node.js 開(kāi)發(fā)框架

    Node.js是JavaScript中最為流行的框架之一,易于創(chuàng)建可擴(kuò)展的Web應(yīng)用。Node.js包含不同類(lèi)型框架,包括MVC, full-stack,REST API以及Generators。借助這些框架使Node.js更加易于使用,它還支持眾多特性功能,只需幾個(gè)步驟就可快速搭建強(qiáng)大的Web應(yīng)用。本文為大家推薦21款
    2014-08-08
  • node.js下LDAP查詢(xún)實(shí)例分享

    node.js下LDAP查詢(xún)實(shí)例分享

    這篇文章主要介紹了node.js下LDAP查詢(xún)實(shí)例分享的相關(guān)資料,需要的朋友可以參考下
    2015-09-09
  • Node使用Selenium進(jìn)行前端自動(dòng)化操作的代碼實(shí)現(xiàn)

    Node使用Selenium進(jìn)行前端自動(dòng)化操作的代碼實(shí)現(xiàn)

    這篇文章主要介紹了Node使用Selenium進(jìn)行前端自動(dòng)化操作的代碼實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Windows系統(tǒng)下Node.js安裝以及環(huán)境配置的完美教程

    Windows系統(tǒng)下Node.js安裝以及環(huán)境配置的完美教程

    相信對(duì)于很多關(guān)注javascript發(fā)展的同學(xué)來(lái)說(shuō),nodejs已經(jīng)不是一個(gè)陌生的詞眼,下面這篇文章主要給大家介紹了關(guān)于Windows系統(tǒng)下Node.js安裝以及環(huán)境配置的完美教程,需要的朋友可以參考下
    2022-06-06
  • node.js程序作為服務(wù)并在windows下開(kāi)機(jī)自啟動(dòng)(用forever)

    node.js程序作為服務(wù)并在windows下開(kāi)機(jī)自啟動(dòng)(用forever)

    這篇文章主要介紹了node.js程序作為服務(wù)并在windows下開(kāi)機(jī)自啟動(dòng)的相關(guān)資料,因?yàn)閷?shí)現(xiàn)的功能比較簡(jiǎn)單,沒(méi)有選擇功能比較強(qiáng)大的pm2,文中選擇利用了forever,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-03-03
  • NodeJS中的命令行程序、工程目錄、NPM

    NodeJS中的命令行程序、工程目錄、NPM

    使用NodeJS編寫(xiě)的東西,要么是一個(gè)包,要么是一個(gè)命令行程序,而前者最終也會(huì)用于開(kāi)發(fā)后者,一般我們會(huì)同時(shí)提供命令行模式和API模式兩種使用方式,并且我們會(huì)借助三方包來(lái)編寫(xiě)代碼,NPM是隨同NodeJS一起安裝的包管理工具,能解決NodeJS代碼部署上的很多問(wèn)題
    2023-11-11
  • 詳解nodejs微信公眾號(hào)開(kāi)發(fā)——4.自動(dòng)回復(fù)各種消息

    詳解nodejs微信公眾號(hào)開(kāi)發(fā)——4.自動(dòng)回復(fù)各種消息

    這篇文章主要介紹了詳解nodejs微信公眾號(hào)開(kāi)發(fā)——4.自動(dòng)回復(fù)各種消息,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-04-04
  • koa-router源碼學(xué)習(xí)小結(jié)

    koa-router源碼學(xué)習(xí)小結(jié)

    這篇文章主要介紹了koa-router源碼學(xué)習(xí)小結(jié),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09
  • 詳解Nodejs的timers模塊

    詳解Nodejs的timers模塊

    本篇文章主要介紹了Nodejs的timers模塊,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-12-12
  • nodejs微信掃碼支付功能實(shí)現(xiàn)

    nodejs微信掃碼支付功能實(shí)現(xiàn)

    本片文章通過(guò)代碼示例給大家詳細(xì)講述了如何用nodejs寫(xiě)出微信掃碼支付這個(gè)功能,有興趣的朋友可以參考下。
    2018-02-02

最新評(píng)論