国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
運(yùn)行Node.js的IIS擴(kuò)展iisnode安裝配置筆記

今年年初打算用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文件:

代碼如下:

<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ò)誤提示:

代碼如下:

請(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)整:
代碼如下:

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

代碼如下:

<iisnode promoteServerVars="REMOTE_ADDR" />

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

代碼如下:

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一次:
代碼如下:

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:

代碼如下:

#!/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還不是一個(gè)成熟的產(chǎn)品,當(dāng)然Node.js也不是(至今還沒(méi)1.0),一切都有待進(jìn)一步探索和完善。


本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
支持高并發(fā)的IIS Web服務(wù)器常用設(shè)置
nginx配置詳解
nginx應(yīng)用總結(jié)(1)--基礎(chǔ)認(rèn)識(shí)和應(yīng)用配置
Nginx 支持 ASP ASP.NET腳本設(shè)置 | 艾旦網(wǎng)絡(luò) 艾旦網(wǎng)絡(luò)工作室
分享幾個(gè)IP查詢接口及其簡(jiǎn)單使用方法
websocket+前后端分離+https的nginx配置
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服