来自 系统操作 2019-09-06 15:48 的文章
当前位置: 六合联盟网 > 系统操作 > 正文

js的IIS扩展iisnode安装配置笔记

今年年终希图用Node.js基于Express框架重写博客程序,从此告别ASP.NET。可是,笔者近来用的VPS是Windows Server系统、IIS服务器,假诺让Express和IIS都监听80端口,明显会生出争持。幸好,有三个叫作iisnode的扩大可以把Node.js程序托管到IIS。而且,这样托管之后也意味能够采取IIS里面包车型大巴各类作用(进度管理、GZip压缩、日志、缓存、权限调控、域名绑定等)。

运转Node.js的IIS扩大iisnode安装配备笔记,node.jsiisnode

现年新禧准备用Node.js基于Express框架重写博客程序,从此告辞ASP.NET。可是,笔者日前用的VPS是Windows Server系统、IIS服务器,固然让Express和IIS都监听80端口,明显会产生争辨。幸好,有一个誉为iisnode的扩充能够把Node.js程序托管到IIS。何况,那样托管之后也象征能够行使IIS里面包车型客车各样成效(进程管理、GZip压缩、日志、缓存、权限决定、域名绑定等)。

要使用iisnode,得安装:

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

装好之后,照旧根据平日操作,在IIS管理器中开创站点,指向Express程序的目录,关键是还要加进二个web.config文件:
复制代码 代码如下:
<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>

这段内容也足以通过IIS管理器的可视化界面配置。大约意思把具有诉求重写到bin/www,何况选择iisnode扩张运维bin/www。可是,张开站点后,却出现了那般的一无所长提示:
复制代码 代码如下:
诉求筛选模块被布置为拒绝满含 hiddenSegment 节的 URAV4L 中的路线

初步是以为不明所以,后来黑马醒来,ASP.NET里面包车型大巴bin目录是个不允许访谈的杰出目录。把乞请重写到bin/www,恰好命中了那条法则。所以呢,改一下目录名就好了,比方把bin改成launch(事实注解那不是好做法,后边再说),web.config也要相应调度:
复制代码 代码如下:
<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管理器中重启站点后再次做客,终于运行起来了,不易于啊!然而照旧美滋滋得太早了。

在测验程序功效的进程中,竟然开采赢获得的IP为空。在Express框架中,IP是透过req.ip获取的,而req.ip又是从供给头的REMOTE_ADDRubicon获取值。通过一段轻松的测量检验代码,发掘REMOTE_ADD中华V的值也为空。很明朗,从IIS到Node.js的经过中,这段头音信错过了。Google一番之后,发掘iisnode确有此难题,官方提供的技术方案是使用X-Forword-For,可是笔者又开掘了别的叁个办法。

Web.config中有一段配置(加到</system.webServer>前)能够保留REMOTE_ADDR:
复制代码 代码如下:
<iisnode promoteServerVars="REMOTE_ADDR" />

根据表明,保留的REMOTE_ADDLX570会被改名换姓为x-iisnode-REMOTE_ADDWrangler,所以还得把req.ip的值覆盖一遍,在Express的app.js中追加一个中间件函数:
复制代码 代码如下:
app.use(function(req, res, next) {
    req.ip = req.headers['x-iisnode-REMOTE_ADDR'];
    next();
});

但是,那样调度后,获取到的IP照旧空,那不免让人嫌疑,req.ip的赋值是还是不是败退了。看一下Express的源代码能够开采,req.ip是通过define getter的方式定义的,所以要覆盖它就得再define贰次:
复制代码 代码如下:
app.use(function(req, res, next) {
    Object.defineProperty(req, 'ip', {
        get: function() { return this.headers['x-iisnode-REMOTE_ADDR']; }
    });
    next();
});

如此那般难题总算化解了,但那不是多少个好措施,如果今后Express把req.ip设成只读就麻烦了。

继承测验,又发掘别的一个难点。正常的话,博客后台的文件上传成效会把公文字传递到public/upload这一个目录下,但实质上却在launch目录(即原本的bin目录)下生成了public/upload文件夹。其实原因是当做程序入口的www文件是在launch目录下,所以launch目录成了应用程序的奉行目录。小编的消除办法是,把launch目录的名字改回bin,在根目录下开创三个launch.js去调用bin/www:
复制代码 代码如下:
#!/usr/bin/env node

require('./bin/www');

下一场把程序入口改为launch.js:

复制代码 代码如下:
<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还不是四个成熟的成品,当然Node.js亦非(于今还没1.0),一切皆有待进一步追究和全面。

今年年终策画用Node.js基于Express框架重写博客程序,从此送别ASP.NET。可是,笔者近些日子用的...

要使用iisnode,得安装:

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

装好之后,照旧根据正规操作,在IIS管理器中创制站点,指向Express程序的目录,关键是还要扩展三个web.config文件:

复制代码 代码如下:

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

这段内容也得以经过IIS管理器的可视化分界面配置。大致意思把富有央求重写到bin/www,况且动用iisnode增添运维bin/www。不过,张开站点后,却出现了这样的荒谬提醒:

复制代码 代码如下:

恳请筛选模块被布署为拒绝包涵 hiddenSegment 节的 UOdysseyL 中的路线

开局是感到不明所以,后来忽然清醒,ASP.NET里面包车型客车bin目录是个区别意访谈的不一样日常目录。把央浼重写到bin/www,恰好命中了那条准则。所以呢,改一下索引名就好了,举个例子把bin改成launch(事实注脚那不是好做法,前边再说),web.config也要对应调度:

复制代码 代码如下:

<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管理器中重启站点后再也探望,终于运维起来了,不轻便呀!不过照旧春风得意得太早了。

在测量试验程序功用的进度中,竟然开掘赢获得的IP为空。在Express框架中,IP是由此req.ip获取的,而req.ip又是从央浼头的REMOTE_ADDWrangler获取值。通过一段轻松的测验代码,开掘REMOTE_ADDPRADO的值也为空。很断定,从IIS到Node.js的过程中,这段头音讯遗失了。Google一番后头,开采iisnode确有此问题,官方提供的减轻方案是使用X-Forword-For,可是自个儿又发掘了别的二个办法。

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

复制代码 代码如下:

<iisnode promoteServerVars="REMOTE_ADDR" />

遵照表明,保留的REMOTE_ADDCR-V会被改名换姓为x-iisnode-REMOTE_ADD瑞虎,所以还得把req.ip的值覆盖三遍,在Express的app.js中加进壹在那之中间件函数:

复制代码 代码如下:

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

不过,那样调节后,获取到的IP依旧空,那不免让人狐疑,req.ip的赋值是或不是没戏了。看一下Express的源代码能够窥见,req.ip是通过define getter的办法定义的,所以要覆盖它就得再define一次:

复制代码 代码如下:

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

那样难点毕竟化解了,但这不是壹个好法子,假如未来Express把req.ip设成只读就劳动了。

后续测量试验,又开掘其余一个主题材料。符合规律来讲,博客后台的公文上传功用会把文件传到public/upload那个目录下,但实则却在launch目录(即原本的bin目录)下生成了public/upload文件夹。其实原因是当做程序入口的www文件是在launch目录下,所以launch目录成了应用程序的执行目录。小编的消除办法是,把launch目录的名字改回bin,在根目录下开创贰个launch.js去调用bin/www:

复制代码 代码如下:

#!/usr/bin/env node

require('./bin/www');

下一场把程序入口改为launch.js:

复制代码 代码如下:

<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还不是三个早熟的出品,当然Node.js亦非(于今还没1.0),一切皆有待进一步商讨和周全。

您大概感兴趣的篇章:

  • Node.js安装教程和NPM包管理器使用详解
  • [将免费实行到底]在亚马逊(Amazon)的一年无偿服务器上安装Node.JS, NPM和OurJS博客
  • node.js使用npm 安装插件时提示install Error: ENOENT报错的化解方法
  • windows8.1+iis8.5下安装node.js开垦条件
  • Node.js 学习笔记之简单介绍、安装及布局
  • 在linux中采纳包管理器安装node.js
  • 在Ubuntu系统上安装Node.JS的课程
  • win7下安装配置node.js+express开采条件
  • Nodejs全局安装和本地安装的不一样之处

本文由六合联盟网发布于系统操作,转载请注明出处:js的IIS扩展iisnode安装配置笔记

关键词: