IIS7中的站點(diǎn)、應(yīng)用程序和虛擬目錄詳細(xì)介紹
這里說的不是如何解決路徑重寫或者如何配置的問題,而是闡述一下站點(diǎn)(site),應(yīng)用程序(application)和虛擬目錄(virtual directory)概念與作用,已及這三個東西在IIS6與IIS7中的異同。因?yàn)檎军c(diǎn),應(yīng)用程序和虛擬目錄是我們在IIS上架設(shè)網(wǎng)站時肯定會遇到的,但它們的概念又是那么的含糊(至少對我來說)。我在網(wǎng)上找了一些資料來學(xué)習(xí),其中一個寫的比較詳細(xì)的是:Understanding Sites, Applications, and Virtual Directories on IIS 7 而這里則只是作一些總結(jié)。
在IIS6中,應(yīng)用程序和虛擬目錄的概率是有點(diǎn)含糊的,而在IIS7以上,這三者則被規(guī)范化起來,在IIS架構(gòu)層面上明確了三者的層次關(guān)系。
在IIS6中,雖然存在virtual directory 和application兩個概念,而且看上去這兩個概念是獨(dú)立的,但是在IIS6中一個application其實(shí)就是一個虛擬目錄,只不過一個application在medabase中可以對AppFriendlyName, AppRoot, AppIsolated, AppPoolID這幾個屬性進(jìn)行設(shè)置而已。但I(xiàn)IS6中的site則是例外,因?yàn)榫退悴粚δ菐讉€屬性進(jìn)行設(shè)置,它也不會被視為虛擬目錄,而是被視為一個application。
而在IIS7或以上(但目前我能接觸到的最高版本的IIS就是win7中的IIS7.5),site,application和virtual directory的概念已經(jīng)被規(guī)范起來,已經(jīng)不像IIS6那樣含糊。在IIS7+中,他們是獨(dú)立的概念,并且在IIS組織架構(gòu)上呈現(xiàn)出一種層次關(guān)系:一個site中可以有一個或者多個application,一個application中可以有一個或者多個virtual directory,而一個virtual directory則對應(yīng)著一個物理路徑。一個site默認(rèn)會至少有一個application,稱為根應(yīng)用程序(root application)或者默認(rèn)應(yīng)用程序(default application),而一個application至少有一個vitual director,稱為根虛擬目錄(root virtual directory)來看一下我的IIS7.5上一個site的結(jié)構(gòu)和這個site在IIS的ApplicationHost.config文件是怎樣對應(yīng)的。:
注:ApplicationHost.config文件在目錄:\%windir%\system\inetsrv\config目錄下
我的IIS中只有一個ID為13的site,site下有兩個application分別為cd和dh。從右邊的config中可以看到,其實(shí)除了cd和dh兩個application外,site本身也是一個application,也就是root application。同時也可以看到,每個application下有一個 virtual directory,也就是root virtual directory,充當(dāng)著這個application的根目錄,并映射到該application所在的物理路徑。當(dāng)然,每個application可以有多個virtual directory,這些virtual directory可以對應(yīng)其他的物理路徑(譬如dh application下的image虛擬目錄的物理路徑可以使網(wǎng)絡(luò)中另外一臺計算機(jī)的某個共享目錄)
在IIS7+中(其實(shí)IIS6也是一樣,但細(xì)節(jié)有不同,這里有點(diǎn)含糊,還待深入研究),一個site運(yùn)行在一個application pool中,而一個application pool默認(rèn)有一個w3wp.exe(工作者進(jìn)程),site中的application運(yùn)行在這個w3wp.exe進(jìn)程中的app domain(應(yīng)用程序域)中(不同application運(yùn)行在不同app domain中,以進(jìn)行隔離),而同一個application的virtual directory運(yùn)行在相同的app domain下。但site下的application不一定必須跟這個site運(yùn)行在相同的application pool,application可以指定一個跟這個application的site不同的application pool。
接下來獨(dú)立的闡述一下site,application和virtual derectory
站點(diǎn)(site)
一個站點(diǎn)包含一個或者多個application和一個或者多個虛擬目錄。我們可以通過對site進(jìn)行不同的綁定以用不同的方式對site進(jìn)行訪問。這里的“綁定”包含兩個方面,一個是綁定的協(xié)議,另一個就是綁定信息。綁定協(xié)議用于指定通過什么協(xié)議去和該site進(jìn)行通信。IIS7+中,對一個site可以的協(xié)議包括http,https,net.tcp,net.pipe,net.msmq,net.formatname這幾種。當(dāng)然,對于一個網(wǎng)站,最常用的就是http和https。而綁定信息則定義了通信的基本信息,比如IP地址,通信端口,站點(diǎn)的一些頭部信息(header)。正如前面說到的,可以為一個site添加多種綁定,只需要在IIS中對某個site進(jìn)行“編輯綁定”操作即可。
應(yīng)用程序(application)
application是為一個site提供功能的基本單位,例如一個購物站點(diǎn)可以包含兩個application:一個負(fù)責(zé)呈現(xiàn)商品,給消費(fèi)者去選購,并放入購物車,而另一個appliation則可以專注于用戶的登錄以及支付業(yè)務(wù)。當(dāng)一個site只有一個application時候,這個application也就是root application或者default application,代表著這個site本身,在applicationHost中的“<application path="/" >”里面,path="/"就表示該application是該site的根應(yīng)用程序?!?/p>
application運(yùn)行在IIS中的應(yīng)用程序池中,以app domain隔離。application可以運(yùn)行在IIS中任意一個應(yīng)用程序池中,而不一定要運(yùn)行在這個application所在的site的應(yīng)用程序池中,但對于使用托管代碼開發(fā)的application(例如一個asp.net網(wǎng)站)必須運(yùn)行在運(yùn)行在.NET之上的應(yīng)用程序池??梢栽贗IS中對應(yīng)用程序池進(jìn)行設(shè)置,包括設(shè)置.NET版本(或者是非托管環(huán)境),以及設(shè)置管道模式等操作。
虛擬目錄(virtual directory)
一個虛擬目錄就是一個site(實(shí)際上是application)上的對一個本地計算機(jī)或者遠(yuǎn)程計算機(jī)上一個物理目錄路徑的一個映射名稱。一個application可以擁有至少一個虛擬目錄。在applicationHost中的“<virtualDirectorypath="/" >”里面,path="/"就表示該virtual directory是該application(或者該site)的根虛擬目錄。
當(dāng)設(shè)置一個虛擬路徑映射到一個物理路徑后,這個物理路徑中的目錄名稱就會變成這個site(或者application)的url的一部分。一個site(application)可以擁有多個虛擬目錄,例如,一個site中的虛擬目錄"www.site.com/script"映射到本地計算機(jī)上該站點(diǎn)中script文件夾,而"www.site.com/image"則映射到遠(yuǎn)程圖片服務(wù)器上的一個“image”文件夾。IIS7+利用虛擬目錄映射的目錄路徑目錄下的web.config配置文件來管理該虛擬目錄及其子目錄(可以在applicationHost.config的sites/virtualDirectoryDefaults節(jié)中使用allowSubDirConfig="false"屬性來關(guān)閉web.config對子目錄的控制。)
關(guān)鍵詞:IIS7
閱讀本文后您有什么感想? 已有 人給出評價!
- 0
- 0
- 1
- 1
- 1
- 0