星期三, 四月 29, 2009

Windows 7 RC即將釋出

據了解會分成兩階段釋出,美國時間4/30先對開發社群釋出,5/5開始會公開釋出。

因此本地應該可於台灣時間5/1開始,透過MSDN、TechNet、或MVP Connect Services下載Windows 7 RC。隨後於5/6之後,透過Microsoft Download Center釋出。

這次釋出的RC版包含了x86和x64兩種平台(但只有Ultimate版本),前者大約2.47 GB,後者大約3.2 GB。下載之後必須重新取得產品金鑰,之前測試版的金鑰不適用RC版。這次公開下載不像之前,不會有總量限制。

這個RC版將於2010年3月1日到期,時間到了之後,系統將會每隔2小時就重開機。而這個RC版的授權(license)將於2010年6月1日到期。

微軟表示這個RC版可以從Vista升級安裝,但若是Windows XP或之前的Windows 7測試版,就必須重新安裝。

值得一提的是,日前微軟Windows Blog證實的Windows XP Mode功能,應該會在這個Windows 7 RC版本首次曝光。


[全文]

星期四, 四月 23, 2009

IIS 7如何處理要求

下圖是IIS 7處理要求的過程。

 

iis7b-06

  1. HTTP.sys會接聽到用戶端向伺服器的HTTP要求。
  2. HTTP.sys會分析要求裡的URL,來決定要求屬於哪個站台、應用程式,並且檢查設定存放區裡的資訊有沒有要求所屬的應用程式:如果有,就根據資訊將要求送往所屬的工作者處理序(後續跳到步驟7);如果沒有,HTTP.sys會通知W3SVC,而W3SVC會將要求的相關資訊送給WPAS
  3. WPAS會讀取IIS全域設定檔applicationHost.config的內容,並取得相關的設定資訊。
  4. 接著WPAS會檢查應用程式集區裡有沒有要求所需要的工作者處理序,如果沒有,WPAS就替應用程式集區啟動工作者處理序。
  5. 然後WPAS再將相關的設定資訊傳給W3SVC。
  6. W3SVC會以WPAS給予的設定資訊來更新HTTP.sys。
  7. HTTP.sys即可將要求送往所屬的工作者處理序。
  8. 工作者處理序開啟要求處理管線來執行所收到的要求,當要求經過管線之後,即可得到執行結果。由於整合模式和傳統模式的管線處理過程略有差異,因此這個部分的細節會在稍後分別討論。
  9. HTTP.sys將要求的執行結果「回應」給用戶端。


[全文]

星期三, 四月 22, 2009

目前的PHP執行環境載入了哪些extension或module?

想要知道我的IIS 7 + FastCGI + PHP執行環境是否載入了Microsoft SQL Server Driver for PHP,透過搜尋找到了Daniel的PHP extension / module check with extension info所提供的程式碼。

當然,透過phpinfo()函式也可以得知目前載入的extension或module,而且還會列出更詳細的資訊,例如:

或者利用extension_loaded()函式來檢測個別的extension或module是否載入:

<?php
if (extension_loaded('sqlsrv'))
  echo "已載入 sqlsrv";
else
  echo "尚未載入 sqlsrv";
?>


但若想知道如何找出已載入的extension或module,不妨參考Daniel的程式。整個程式碼分成兩個部分,首先是moduleCheck類別,這個部分要存成class.phpextensions.php。接著是如下的另一段叫用moduleCheck類別的PHP程式碼:

<?php
require('class.phpextensions.php');
$modules = new moduleCheck(); // Start the moduleCheck class
echo '<pre>';
print_r($modules->listModules()); // List all installed modules
echo '</pre>';
?>


將上述程式碼存成PHP檔,再透過瀏覽程式執行,即可列出已載入的extension或module名稱;以下是我的執行結果:




[全文]

IIS 7五大核心元件之5: 工作者處理序

Web應用程式雖然名為「應用程式」,但通常並不能直接在作業系統執行,例如IIS 7常見的ASP.NET、ASP、PHP等類型的Web應用程式,而需要另由「宿主」(host)程式加以執行。

對IIS 7而言,工作者處理序 (worker process) 就是這裡所謂的宿主程式,它是在使用者模式執行,其程式檔名為W3wp.exe,目的是提供Web伺服器的核心功能給Web應用程式,讓後者能夠在工作者處理序裡執行,並處理由HTTP.sys送來的用戶端要求,進而將回應送還HTTP.sys,再由HTTP.sys傳回用戶端。

上圖是應用程式集區的示意圖。一個工作者處理序處理一個應用程式集區,而一個工作者處理序可包含數個Web應用程式同時執行。這種作法首見於IIS 6,優點是不同應用程式集區裡的Web應用程式不會相互影響,以提高系統的容錯能力,例如Web應用程式A如果當掉,不會影響另一個集區裡的Web應用程式B,因此可以將還在測試的Web應用程式放在獨立的集區。但反之,開啟越多的應用程式集區,會耗用越多的系統資源。

IIS 7繼續沿用了應用程式集區的概念,雖然不再支援IIS 6提供的IIS 5隔離模式,但全力改善應用程式集區的安全和效能。IIS 7透過自動替應用程式集區產生的安全性識別碼(Security Identifier,SID),來自動隔離應用程式集區,並且也自動隔離伺服器層級的設定,讓設定只能由影響所及的應用程式集區讀取,而達到更為獨立的Web應用程式執行環境。IIS 7也降低了工作者處理序所消耗的記憶體,並且強化了工作者處理序的管理機制,這也使得IIS 7能夠增加單一Web伺服器所能使用的應用程式集區數量,因此管理者將擁有更多的應用程式集區;將各個Web應用程式部署在獨立的應用程式集區,除了有利於系統安全,也能隔離出問題的Web應用程式。

工作者處理序裡面可以有數個Web應用程式,每個.NET應用程式有自己的「應用程式定義域」(application domains,AppDomain),當.NET應用程式啟動後,AppDomain會載入應用程式的程式碼。要注意的是.NET應用程式裡若有數個虛擬目錄,那麼這些虛擬目錄的AppDomain將會與所屬的應用程式相同。

每個工作者處理序會有兩種處理要求的方式,管理者可以設定應用程式集區,來決定要以哪一種模式來處理ASP.NET要求:

  • 傳統(classic mode):,IIS 7會以兩條各自獨立的IIS和ASP.NET要求處理管線來處理ASP.NET的要求(如同IIS 6)。
  • 整合(integrated mode):IIS 7會以一條整合的要求處理管線來處理IIS和ASP.NET的要求。

設定應用程式集區的執行模式

同一部伺服器裡的各個應用程式集區,可以設定成不同的模式,而我們可以利用IIS管理員來指定應用程式集區的執行模式。作法是先展開IIS管理員左側『連線』窗格裡的伺服器節點,然後選取『應用程式集區』節點;接著在『應用程式集區』頁面選取想要設定的應用程式集區;然後點選右側『動作』窗格裡的『基本設定』(如下圖)。

接著會出現如下圖的『編輯應用程式集區』交談窗,請拉下Managed管線模式,並選取適當的管線模式,最後按下『確定』鈕即可。


[全文]

星期一, 四月 20, 2009

IIS 7五大核心元件之4: 設定存放區 (configuration store)

IIS 7改變上一版將設定資訊存在XML格式的metabase的作法,而將設定資訊儲存在XML格式檔案,這些設定檔案不僅可以放置適當的地方,也整合了IIS和ASP.NET的設定。

這些階層且分散式的設定檔是與網站或應用程式內容存放在一起,因此大幅簡化了網站或應用程式的部署,而且也能讓系統管理人員在不需釋出管理權限的情況下,即可將網站或應用程式的管理委託給使用者;此外,IIS 7的設定檔也能讓Web伺服陣列以更簡單的方式共用設定資訊。

IIS 7的設定檔包括:

  • .NET Framework全域的設定檔machine.config
  • ASP.NET全域的設定檔,也就是最上層的web.config
  • IIS全域的設定檔applicationHost.config(位於%SystemRoot%\system32\Inetsrv\Config)
  • 站台的設定檔web.config
  • 分散在Web站台、應用程式、目錄等位置的設定檔web.config

下圖是這些設定檔的階層關係:

 

雖然IIS 7的設定檔都是純文字的XML檔案,能以文字編輯器或XML編輯器編修內容,但一般並不建議直接修改,而是建議利用管理工具間接更改。微軟提供的IIS 7管理工具包括了圖形化的『IIS管理員』、文字模式的Appcmd.exe;如果想要程式化的IIS 7管理功能,也提供了C++程式可用的COM API、.NET程式可用的.NET API(Microsoft.Web.Administration,『IIS管理員』多數功能是以實作),指令碼程式則可利用WMI。這些管理工具及可程式化功能的實作從屬關係如下圖所示:

IIS 6與IIS 7是以不同的方式儲存設定資料,為了回溯相容,IIS 7提供Metabase Compatibility功能,這會安裝能夠讀、寫IIS 6 metabase的IIS Administration Service(IISADMIN),以及用來執行IISADMIN服務的程式Inetinfo.exe。這兩個元件提供了稱為Admin Base Objects(ABO)Mapper的轉換能力,能支援傳統的ABO API處理metabase,但可將設定直接存入IIS 7設定檔。


[全文]

星期五, 四月 17, 2009

IIS 7五大核心元件之3: Windows處理序啟用服務

Windows處理序啟用服務(Windows Process Activation Service,WPAS,也有文件簡稱為WAS服務,但為了避免與Windows Activation Service混淆,本文將此簡稱為WPAS)具備了設定及處理序的管理功能,並且包含了能與接聽程式介面卡溝通訊息的介面。

WPAS設定管理的功能可以讀取設定存放區裡的應用程式和應用程式集區的資訊。在IIS 7啟動之際,WPAS的設定管理功能會讀取設定存放區裡的資訊,然後將這些資訊傳給HTTP接聽程式介面卡 -- 也就是W3SVC;W3SVC負責與HTTP接聽程式(亦即HTTP.sys)溝通。當W3SVC收到設定資訊之後,就會設定HTTP.sys,並讓HTTP.sys能開始接聽要求。

WPAS的設定管理包含了以下取自設定存放區的資訊:

  • 全域設定資訊
  • 通訊協定設定資訊
  • 應用程式集區設定
  • 站台資訊
  • 應用程式資訊

設定若有所變更,WPAS設定管理功能會收到通知,並隨即以新的資訊更新W3SVC;在W3SVC收到新的設定之後,便會更新HTTP.sys的設定。舉例來說,如果新增或刪除應用程式集區,WPAS會處理設定的變更,並將變更告知W3SVC,而W3SVC會更新HTTP.sys的設定,HTTP.sys便會新增或刪除應用程式集區佇列。

WPAS的處理序管理功能負責將應用程式集區對映到工作者處理序,維護工作者處理序執行所需的資訊,且若工作者處理序停止運作而無法處理任何要求,WPAS會決定何時該啟動新的W3wp.exe執行個體來執行新的應用程式集區、何時該回收工作者處理序、何時又該重新啟動工作者處理序。而當HTTP.sys收到用戶端的要求時,如果應用程式集區裡沒有工作者處理序,WPAS的處理序管理功能會啟動新的工作者處理序。

除了HTTP,WPAS也支援其他的通訊協定,而且用在HTTP的設定及處理序機制也對HTTP以外的應用程式和服務有效。


[全文]

IIS 7五大核心元件之2: World Wide Web Publishing服務

相較於IIS 6,IIS 7的World Wide Web Publishing服務(W3SVC,也可簡稱W3服務)有相當大的改變。

IIS 6的W3SVC負責HTTP.sys、設定、處理序(一般稱為行程)的管理,以及監控效能。然而IIS 7將這4大功能分成兩個服務來執行,每個服務負責兩項功能:W3SVC負責效能監控和HTTP.sys的管理,另一個新的服務--Windows處理序啟用服務(WPAS)--負責處理序和設定的管理。這兩個服務以LocalSystem為使用者名稱在同一個Svchost.exe處理序,而且還共用相同的程式碼。

在IIS 7,W3SVC擔任HTTP.sys的接聽程式介面卡的角色,用來建立WPAS和協定接聽器(也就是HTTP.sys)之間的通訊。如果HTTP.sys的設定有所變更,W3SVC會以WPAS所得到的設定資訊加以設定、更新(IIS 6的W3SVC會從metabase讀取設定資訊,並以此設定、更新HTTP.sys);如果有要求進入佇列,W3SVC也會通知WPAS。但W3SVC不再讀取設定存放區裡的設定資訊,也不再管理應用程式集區和工作者處理序,這些工作在IIS 7已經轉交給WPAS。此外,IIS 7的W3SVC也會持續收集網站效能的計數器,以達到監控效能的目的。


[全文]

IIS 7五大核心元件之1: HTTP通訊協定堆疊

前文介紹過IIS 7的模組;模組意味著IIS 7的功能,而且管理者對模組加入或移除擁有較大的選擇彈性,開發者或協力廠商也能依照規格創造出自己的模組。

而以下即將介紹的核心元件,則是IIS 7最底層、最重要的元件,讓IIS 7得以發揮「功能」,也讓IIS 7模組得以執行。IIS 7的核心元件共可分成5個部分:

HTTP通訊協定堆疊

程式檔名為HTTP.sys的HTTP通訊協定堆疊,負責接聽IIS 7的HTTP和HTTPS要求;也就是說,當用戶端對IIS 7伺服器發出HTTP要求,首先會由HTTP.sys接到。此外,IIS 7處理過的回應也是由HTTP.sys送回給用戶端。

HTTP.sys是Windows網路子系統的一支,從上個版本開始,IIS就已經將接聽HTTP要求的HTTP通訊協定堆疊,從使用者模式(利用Windows Sockets API)換到核心模式。從IIS 6開始引進的HTTP.sys雖然也是核心模式驅動程式,但只能接聽HTTP要求,而IIS 7還能接聽HTTPS要求。

除了接收HTTP要求並送出回應,HTTP.sys還會先安全過濾接收到的HTTP要求,並且將HTTP要求排入應用程式集區的佇列;此外,HTTP.sys也會快取要送出的回應。也由於HTTP.sys是在核心模式執行,因此直接就在核心模式處理佇列和快取的效能,會比在切換到使用者模式更好。


[全文]

星期三, 四月 15, 2009

安裝IIS 7

伺服器管理員、ServerManagerCMD、Package Manager皆可安裝IIS 7。


以下除了列出ServerManagerCMD和Package Manager的命令列安裝指令,也會利用伺服器管理員,一起說明IIS 7的安裝方式:只要先執行伺服器管理員,再從『角色摘要』點選『新增角色』,『新增角色精靈』就會出現並引導使用者完成安裝過程。透過精靈的引導,在出現『伺服器角色』畫面時,請選取『網頁伺服器 (IIS)』(如下圖)。


選取『網頁伺服器 (IIS)』作為安裝IIS 7的伺服器角色

因為IIS需要『Windows處理程序啟動服務』才能運作,而新增角色精靈會自動處理(並顯示)相關的相依性,因此在選取『網頁伺服器 (IIS)』伺服器角色之後,會出現交談窗詢問是否要新增(如下圖),此時必須按下『新增所需的功能』鈕,安裝過程才能繼續。


請按『新增所需的功能』鈕繼續安裝過程

接著又回到『新增角色精靈』的『伺服器角色』畫面,而且『網頁伺服器 (IIS)』已被勾選;現在請按『下一步』鈕。隨後精靈會出現伺服器角色的簡介資訊畫面,其中還包含了若干說明檔的超連結;現在請按『下一步』鈕。接著精靈會顯示『網頁伺服器 (IIS)』所有的角色服務,並且也事先選取了9項(如下圖),您可視需要調整這些選項。


選取IIS 7的角色服務

上圖所列出的角色服務,就是IIS 7的40個模組,而事先選取的9項,是IIS 7預設安裝的9個模組,這個預設安裝是為了讓IIS 7能夠擔任具基本功能的靜態網頁Web伺服器;預設安裝的9個模組包括了:

  • 靜態內容(IIS-StaticContent)
  • 預設文件(IIS-DefaultDocument)
  • 瀏覽目錄(IIS-DirectoryBrowsing)
  • HTTP錯誤(IIS-HttpErrors)
  • HTTP記錄(IIS-HttpLogging)
  • 要求監視器(IIS-RequestMonitor)
  • 要求篩選(IIS-RequestFiltering)
  • 靜態內容壓縮(IIS-HttpCompressionStatic)
  • IIS管理主控台(IIS-ManagementConsole)

以上項目括號裡的英文,是該模組的更新名稱(update name),使用Package Manager安裝時,必須指定模組的更新名稱。

若要以ServerManagerCMD安裝IIS 7預設的靜態網頁Web伺服器,請執行以下指令:

ServerManagerCMD.exe –install Web-Server


若要以Package Manager安裝IIS 7預設的靜態網頁Web伺服器,請執行以下指令(如果不加srart /w,pkgmgr雖然執行,但卻會立即返回,因此無法得知安裝何時完成):

start /w pkgmgr.exe /iu:IIS-WebServerRole;IIS-WebServer;IIS-CommonHttpFeatures;
IIS-StaticContent;IIS-DefaultDocument;IIS-DirectoryBrowsing;
IIS-HttpErrors;IIS-HealthAndDiagnostics;IIS-HttpLogging;
IIS-LoggingLibraries;IIS-RequestMonitor;IIS-Security;
IIS-RequestFiltering;IIS-HttpCompressionStatic;
IIS-WebServerManagementTools;IIS-ManagementConsole;
WAS-WindowsActivationService;WAS-ProcessModel;
WAS-NetFxEnvironment;WAS-ConfigurationAPI

加入ASP.NET所需要的模組

上述是IIS 7預設會安裝的模組,而且是為了讓IIS 7能處理靜態網頁,但絕大多數使用IIS應該都不只是為了讓Web伺服器呈現靜態的HTML,而且IIS最常處理的應該是ASP.NET。如果要讓IIS 7能處理ASP.NET,除了上述,還應該再加入以下模組:

  • ASP.NET(IIS-ASPNET)
  • .NET擴充性(IIS-NetFxExtensibility)
  • ISAPI擴充功能(IIS-ISAPIExtensions)
  • ISAPI篩選器(IIS-ISAPIFilter)

但如果使用伺服器管理員來安裝IIS 7,您就不需要自行勾選以上模組,因為新增角色精靈會自動列出相依的模組並詢問您(如下圖)。


伺服器管理員的新增角色精靈會自動列出相依的模組並詢問您

若要以ServerManagerCMD安裝ASP.NET所需的模組,請執行以下指令:

ServerManagerCmd.exe -install Web-Server
ServerManagerCmd.exe -install Web-ASP-NET
ServerManagerCmd.exe -install Web-NET-Ext
ServerManagerCmd.exe -install Web-Filtering
ServerManagerCmd.exe -install Web-ISAPI-Filter
ServerManagerCmd.exe -install Web-ISAPI-Ext


若要以Package Manager安裝ASP.NET所需的模組,請執行以下指令:

start /w pkgmgr.exe /iu:IIS-WebServerRole;IIS-WebServer;
IIS-CommonHttpFeatures;IIS-StaticContent;IIS-DefaultDocument;
IIS-DirectoryBrowsing;IIS-HttpErrors;IIS-ApplicationDevelopment;
IIS-ASPNET;IIS-NetFxExtensibility;IIS-ISAPIExtensions;
IIS-ISAPIFilter;IIS-HealthAndDiagnostics;IIS-HttpLogging;
IIS-LoggingLibraries;IIS-RequestMonitor;IIS-Security;
IIS-RequestFiltering;IIS-HttpCompressionStatic;
IIS-WebServerManagementTools;IIS-ManagementConsole;
WAS-WindowsActivationService;WAS-ProcessModel;
WAS-NetFxEnvironment;WAS-ConfigurationAPI

加入ASP所需要的模組

如果您的IIS 7需要執行傳統的ASP程式,除了前述預設安裝的模組,還需加入以下模組:

  • ASP(IIS-ASP)
  • ISAPI擴充功能(IIS-ISAPIExtensions)

若要以ServerManagerCMD安裝ASP所需要的模組,請執行以下指令:

ServerManagerCmd.exe -install Web-Server
ServerManagerCmd.exe -install Web-ASP
ServerManagerCmd.exe -install Web-Filtering
ServerManagerCmd.exe -install Web-ISAPI-Ext


若要以Package Manager安裝ASP所需要的模組,請執行以下指令:

start /w pkgmgr.exe /iu:IIS-WebServerRole;IIS-WebServer;
IIS-CommonHttpFeatures;IIS-StaticContent;IIS-DefaultDocument;
IIS-DirectoryBrowsing;IIS-HttpErrors;IIS-ApplicationDevelopment;
IIS-ASP;IIS-ISAPIExtensions;IIS-HealthAndDiagnostics;
IIS-HttpLogging;IIS-LoggingLibraries;IIS-RequestMonitor;
IIS-Security;IIS-RequestFiltering;IIS-HttpCompressionStatic;
IIS-WebServerManagementTools;IIS-ManagementConsole;
WAS-WindowsActivationService;WAS-ProcessModel;
WAS-NetFxEnvironment;WAS-ConfigurationAPI

讓IIS 7能處理CGI程式的模組

Web萌芽之後,動態網頁裡的程式大多仰賴CGI與Web伺服器互動,為了支援更多樣的動態網頁程式(例如PHP),IIS 7內建了以FastCGI為實作方式的CGI功能,而IIS 6亦可藉由微軟提供的外掛程式達到支援CGI。如果要讓IIS 7支援CGI,除了前述預設安裝的模組,還需加入以下模組:

  • CGI(IIS-CGI)

要提醒您的是,安裝CGI模組只是讓IIS 7能支援CGI,如果要讓IIS 7能支援PHP,還必須從PHP下載並安裝解譯程式,並另對IIS 7設定。

若要以ServerManagerCMD安裝CGI程式模組,請執行以下指令:

ServerManagerCmd.exe -install Web-Server
ServerManagerCmd.exe -install Web-CGI


若要以Package Manager安裝CGI程式模組,請執行以下指令:

start /w pkgmgr.exe /iu:IIS-WebServerRole;IIS-WebServer;
IIS-CommonHttpFeatures;IIS-StaticContent;IIS-DefaultDocument;
IIS-DirectoryBrowsing;IIS-HttpErrors;IIS-ApplicationDevelopment;
IIS-CGI;IIS-HealthAndDiagnostics;IIS-HttpLogging;
IIS-LoggingLibraries;IIS-RequestMonitor;IIS-Security;
IIS-RequestFiltering;IIS-HttpCompressionStatic;
IIS-WebServerManagementTools;IIS-ManagementConsole;
WAS-WindowsActivationService;WAS-ProcessModel;
WAS-NetFxEnvironment;WAS-ConfigurationAPI

讓IIS 7具備.NET能力

之前提及IIS 7的模組分成Win32原生模組及.NET Managed模組,而後者並非ASP.NET獨享,就算您的IIS 7並非為了ASP.NET而建置,亦可讓IIS 7提供.NET Managed模組的執行能力,作法就是加入以下模組:

  • .NET擴充性(IIS-NetFxExtensibility)

如果您的IIS 7需要執行.NET Managed模組,就必須安裝這個『.NET擴充性』模組。而如果要以ServerManagerCMD安裝.NET擴充性模組,請執行以下指令:

ServerManagerCmd.exe -install Web-Server
ServerManagerCmd.exe -install Web-Net-Ext


要以Package Manager安裝.NET擴充性模組,請執行以下指令:

start /w pkgmgr.exe /iu:IIS-WebServerRole;IIS-WebServer;
IIS-CommonHttpFeatures;IIS-StaticContent;IIS-DefaultDocument;
IIS-DirectoryBrowsing;IIS-HttpErrors;IIS-ApplicationDevelopment;
IIS-NetFxExtensibility;IIS-ISAPIExtensions;IIS-ISAPIFilter;
IIS-HealthAndDiagnostics;IIS-HttpLogging;IIS-LoggingLibraries;
IIS-RequestMonitor;IIS-Security;IIS-RequestFiltering;
IIS-HttpCompressionStatic;IIS-WebServerManagementTools;
IIS-ManagementConsole;WAS-WindowsActivationService;
WAS-ProcessModel;WAS-NetFxEnvironment;WAS-ConfigurationAPI

完成安裝

完成『新增角色精靈』的角色服務(也就是模組)選取之後,請按『下一步』鈕,精靈會先列出您所選取的角色、角色服務或功能讓您確認,此時按下『安裝』鈕,精靈就會開始安裝。完成之後,精靈也會顯示安裝結果(如下圖),而IIS 7則會自動啟動。


成功安裝IIS 7

測試安裝結果

最簡單的測試方法,就是以瀏覽程式對剛裝入IIS 7的伺服器發出HTTP要求,如果出現如下圖的歡迎頁面,表示已成功安裝IIS 7,而且運作正常。接著您就能將內容放進這部Web伺服器,開始測試或讓您的IIS伺服器上線運作。


IIS 7預設的歡迎頁面


[全文]

星期二, 四月 14, 2009

安裝IIS 7的工具

雖然Windows Server 2008預設並沒有安裝IIS 7,但提供了能符合各種情況的安裝工具,包括圖形操作介面的『伺服器管理員』,以及兩個命令列工具:ServerManagerCMD(ServerManagerCMD.exe)、Package Manager(Pkgmgr.exe)。這些工具的使用並不難,但是在安裝之前,應該先根據自身的情況,找出需要安裝的IIS 7模組,再選用適當的工具進行安裝。

模組的選擇主要先根據該部Web伺服器所要提供的內容類型而定:靜態網頁、ASP、ASP.NET、還是PHP?然後再視需要加入診斷用的模組,或者加入驗證或授權的模組。

IIS 7一共提供了40個模組,對於正式上線的伺服器,應該不需要完全安裝,而且沒有用到的模組也不建議安裝。但如果是測試用或評估用的伺服器,倒是可以安裝所有的模組;但也要提醒您的是,最好還是維持開發環境和生產環境的一致,如果兩者不一致,就比較容易出現開發時正常,導入正式上線的伺服器卻發生不能執行的狀況。

前述的3個安裝工具當中,圖形化的伺服器管理員最適合初學或一般使用,而且伺服器管理員會在安裝過程列出相關的角色、功能、或服務,並且自動處理模組之間的相依性,甚至您還能從中瞭解相依性。可惜的是伺服器管理員不能用在Server Coore,如果要在Server Core安裝IIS 7,必須改用Package Manager。

ServerManagerCMD是『伺服器管理員』的命令列版本,只要瞭解相關參數,ServerManagerCMD能提供更快速且自動化的安裝。但因為ServerManagerCMD是Managed程式碼,因此也無法用在Server Core環境。

Package Manager是能用在Server Core和一般Windows Server 2008環境的命令列工具,使用時需要瞭解模組的「更新名稱」,並且要自行處理安裝模組的相依性。

此外,執行安裝之前請留意,必須是內建的本機管理者帳號,才有足夠的安裝執行權限。


[全文]

星期一, 四月 13, 2009

模組化的IIS 7

為了讓IIS 7保持彈性的架構,微軟因而以模組化的方式重新設計IIS 7的架構,將IIS 7的功能分成40個獨立的模組。

如下圖,使用者可以依照功能來安裝、執行伺服端裡的模組,讓IIS 7更能彈性的執行與擴充。首見的優點就是降低伺服器資源的耗用(例如記憶體和處理器),並且提升Web伺服端的效能。其次亦可減少攻擊面(亦即提高伺服器的安全性)。再者還可以自訂功能特定的伺服器。

模組化的IIS 7將所有功能分成40個獨立模組
模組化的IIS 7將所有功能分成40個獨立模組

IIS 7的模組分成Win32原生模組和.NET Managed模組兩種。舉例來說,上圖『應用程式開發』裡的ASP.NET模組,讓IIS 7能執行ASP.NET網頁,這個模組讓IIS 7自核心即擁有ASP.NET功能。若是前版IIS以ISAPI擴充程式(ISAPI extension)的方式實作ASP.NET,當用戶端對IIS送出的HTTP要求,會先經由IIS處理,IIS再根據要求的內容類型:如果是HTML靜態網頁就由IIS自行處理;如果是ASP.NET,就分派給負責處理ASP.NET的ISAPI擴充程式,也就是aspnet_isapi.dll(如下圖)。

前版IIS是以ISAPI擴充程式實作ASP.NET執行能力
前版IIS是以ISAPI擴充程式實作ASP.NET執行能力

IIS 7以模組實作了ASP.NET的執行能力,使得ASP.NET執行能力成為IIS 7的核心功能。IIS 7模組化的架構也有助於擴充或更換Web伺服器或網站應用程式(Web application)的功能。基於回溯相容的理由,IIS 7依然支援ISAPI篩選器(ISAPI filter)和ISAPI擴充程式,而且也提供兩種有別於以往ISAPI的方式,讓開發者編寫IIS 7模組。除了提供新的C++物件導向API,讓開發者可編寫新的Win32原生模組,開發者也能利用ASP.NET現有的IHttpModule API,讓Managed模組能存取要求管線裡所有要求的所有事件。兩種模組開發方式等於是提供了更多元的選擇,讓熟悉ISAPI和.NET Framework的開發者,都能更快速的利用既有技能,來擴充IIS 7的功能。

IIS 7是以模組實作ASP.NET執行能力
IIS 7是以模組實作ASP.NET執行能力


[全文]