asp.net 開發人員不可不知的 iis (iis for asp.net developers)

58
4/3 高高4/7 高

Upload: jeff-chu

Post on 15-Jan-2015

1.988 views

Category:

Technology


0 download

DESCRIPTION

IIS for ASP.NET Developers, include concepts and features.

TRANSCRIPT

Page 1: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

4/3 高雄, 4/7 台北

Page 2: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

ASP.NET 開發人員不可不知的 IIS

小朱MVP/MCSD/MCSE

台灣微軟資深講師

Page 3: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

Agenda

• IIS 概觀• 不可不知的 IIS 功能• 驗證與授權• 開發人員的小工具: IIS Express• Azure Website• IIS 的行程模型 (Process Model)• 模組,處理器與應用程式集區• ASP.NET 常見與 IIS 有關的問題

Page 4: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

IIS 概觀

Page 5: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

Microsoft Web Platform

IISWeb Server

Page 6: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

什麼是 IIS?

• 微軟平台的 Web 服務提供者 (Web service provider) 。• HTTP 協定的伺服器。• 執行 Classic ASP, ASP.NET 應用程式。• 執行支援 ISAPI-based 的網路應用程式 (FastCGI,

PHP, node.js, …) 。• FTP

• 由 Visual Studio 以及其他工具支援。• Web Deploy

• 雲端的支援 (Azure Websites) 。

Page 7: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

IIS 的功能• 執行 ASP.NET 等 Web 應用程式。• 多個應用程式並行。• 利用行程隔離 (process isolation) 的方式。• 其中一個網站當掉,不會影響其他的網站。• 舊版 IIS (6.0-) 和新版 IIS (7.0+) 的處理方式不

同。• 輔助的工具與功能• 安全過濾 (security filtering)• 加速 (pre application startup)• 有部份需要透過W eb Platform Installer 來安裝。• 還有更多…

Page 8: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

不可不知的 IIS 功能

Page 9: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

Web Platform Installer

• 在 IIS 上添加輔助功能。• 直接內嵌於 IIS 內,便於使用。• 內建數種 Configuration Package ,可代為設

定。

Page 10: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

限制網站存取• IP 位址與網域限制• IIS 8 開始內建, IIS 7 或 7.5 有外掛可安裝。• 可限制允許或拒絕特定網段 (IP 位址區間 ) 。• 可針對浮動 IP 進行限制。

Page 11: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

要求過濾 (Request Filtering)

• 對傳入 IIS 的 HTTP 要求做過濾,擋下不符合規定的要求。• 對副檔名做限制。• 對 URL 做限制 ( 等同於 UrlScan 的功能 ) 。• 對要求內容做限制 ( 例如內容長度 ) 。• 對 HTTP 動詞做限制。• 對 HTTP 標頭做限制。• 對查詢字串做限制。

• ASP.NET 應用程式可做另一層限制。

Page 12: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

輸出快取 (Output Cache)

• 使用者模式快取 (User-mode cache)• 可設定空間較大。• 針對特定標頭或查詢字

串進行快取。• 可針對應用程式進行快

取監測。• 核心模式快取

(Kernel-mode cache)• 針對檔案系統進行快取

監測。

Page 13: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

記錄功能• 一般記錄• 支援 W3C, IIS, ODBC 等記錄,但通常只會安裝

W3C 和 IIS 的記錄功能, ODBC 則要到伺服器管理員或是委由 Web PI 來設定。• 預設只會安裝 W3C log 。• IIS 8.5 新功能

• 可選擇只輸出到記錄檔, ETW (Event Tracing for Windows) 事件記錄或是兩個都輸出。

• 即時記錄功能 (ETW-based) 。• 自訂記錄欄位。

Page 14: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

IIS 8.5 的記錄架構

Use

r M

ode

Kern

el M

ode

Client

Log files

1

4

W3WP

HTTP.SYS

2

LOGSVC(new)

8

9

ETW(new)

5

10

673

Page 15: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

記錄功能• 自訂記錄欄位 (IIS

8.5)• 記錄一般以外的資訊。• 要求標頭。• 回應標頭。• 伺服器變數。

Page 16: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

記錄功能• 進階記錄 (Advanced

Logging) 模組• 另一種記錄的方法。• 外掛程式 ( 透過 Web

PI) 。• 欄位為基本 W3C 記錄

欄位。• 可支援記錄的過濾。

更多參考:http://www.microsoft.com/taiwan/technet/iis/expand/AdvancedLogging.aspx

Page 17: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

記錄功能• 失敗要求的追蹤記錄 (Failed Request

Tracing)• 允許設定多組規則。• 可針對要求的類型進行設定。• 可依 HTTP 狀態碼,處理時間或事件等級進行記錄。• IIS 7.0+ 均支援。

Page 18: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

分析記錄檔• Log Parser• 老牌可靠的記錄檔分析器。• 支援 20 種記錄格式。• 支援類 SQL 的查詢方式。• 編寫排程定時分析,取出

使用者活動記錄或是錯誤分析等。

• Log Parser 是命令列工具。• Visual Log Parser• Lizard Log Parser GUI

($) 更多參考: http://www.microsoft.com/taiwan/technet/iis/expand/LogParser.aspx

Page 19: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

應用程式初始化• Application Initialization 模組• 允許應用程式在 IIS 啟動時就開始載入。• 適合首次需要進行大量資料處理或需要較長時間運算

的應用程式 (尤其是首頁 ) 。• IIS 7.5 為外掛, IIS 8+ 為內建。• 設定應用程式的 preloadEnabled=true• 設定應用程式集區的 startMode=AlwaysRunning

Page 20: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

代理行程暫止功能• Idle Worker Process Page-Out• 當網站閒置超過設定時間時, IIS 8 之前的行為會將

代理行程終止。• IIS 8.5 開始,允許網站管理員設定 IIS 不回收代理

行程,避免再次冷啟動 (cold-start) ,加快網站的回應速度。• 在應用程式進階設定中設定。

Page 21: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

動態網站活化• Dynamic Site Activation• IIS 在啟動時不先載入網站,等到有第一個針對該網

站的要求進入時,才啟動網站。• 適合擁有大量網站,但每個網站都不用太多初始化時

間的情境。• 修改 dynamicRegistrationThreshold 的值來增減網站數量。

Page 22: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

驗證與授權

Page 23: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

驗證• 驗證類型• 匿名驗證 (Anonymous)• 基本驗證 (Basic)• 摘要式驗證 (Digest)• 表單驗證 (Forms)• ASP.NET 模擬 (ASP.NET Impersonate)• Windows 驗證 (Windows)• AD 用戶端憑證 (AD Certificate)

• 一般而言,不需要安裝這麼多類型 ( 預設只有匿名驗證與表單驗證, Windows 驗證會停用 ) 。

Page 24: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

使用者,角色與 URL 授權• IIS 的授權功能由其內建模組提供• 使用者功能 (ASP.NET Membership)• 角色功能 (ASP.NET Role)• 設定檔功能 (ASP.NET Profile)

• URL 授權• 支援針對使用者,角色的存取控制 (Windows 驗證

時則可依群組進行設定 ) 。• 可針對所有網站,特定網站或特定資料夾進行設定。

Page 25: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

IIS Express

Page 26: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

IIS Express

•縮小版的 IIS 7+ 。• 支援以往在 ASP.NET Development Server

上沒有的功能。• Visual Studio 2012+ 直接支援。

Page 27: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

Azure Website ( 網站服務 )

Page 28: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

Windows Azure Web Sites

聰明開發 即刻上線簡易入門

Page 29: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

支援的發行方法

FTP:// TFS WEBDEPLOY

DROPBOX

Page 30: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

支援的 Web 平台

… 或任何的 FastCGI 處理器

Page 31: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

診斷與監控

HTTP 記錄 錯誤記錄 入口監控

效能監控記錄串流

Page 32: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

IIS 行程模型 (Process Model)

Page 33: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

IIS Process Model (6.0-)IIS 5.0-5.1

IIS 6.0

Page 34: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

IIS Process Model (7.0+)

User 模式係 Web 應用程式的執行空間。

Kernel 模式係作業系統的執行空間。

Page 35: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

IIS Process Model (7.0+)

Page 36: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

模組,處理常式與應用程式集區

Page 37: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

模組與處理常式• 處理常式 (handler) 是針對特定資源所開發的

的處理器。• ASP.NET Handler

(System.Web.UI.PageHandlerFactory)• Extensionless Handler

(System.Web.Handlers.TransferRequestHandler)• Simple HTTP Handler

(System.Web.UI.SimpleHandlerFactory)

• 分為 Managed 處理常式 ( 使用 .NET 開發的 ) ,指令碼 (含萬用字元 ) 處理常式 ( 使用原生 API 開發的 ) 以及模組內支援的處理常式。

Page 38: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

模組與處理常式• 模組 (module) 是所有 HTTP 要求都會通過

的處理器。• ProtocolSupportModule ( 處理特定協定的模組 )• RequestFilteringModule ( 要求過濾模組 )• UrlAuthorizationModule (URL 授權模組 )• UrlRoutingModule-4.0 (ASP.NET Routing)

• 分為 Managed 模組與原生模組。• ASP.NET 內的 HTTP Module 屬於 Managed

Module 。• 原生模組必須用 C++ 開發,並使用 IIS 原生函式庫。

Page 39: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

應用程式集區 (app pools)

• 應用程式集區是指實際執行 ASP.NET 應用程式 (DLL) 的代理行程 (surrogate process) 。• 代理行程會依設定載入不同的 .NET Framework

執行期元件 (runtime components) 。• 2.0.50727, 4.0.30319• 可安裝 .NET 1.1 於 IIS 7.0+。

•原則上,應用程式層 (application) 和虛擬目錄層 (virtual directories) 使用同一個代理行程,不可以在應用程式層和虛擬目錄層執行不同 .NET 版本編譯出來的 ASP.NET 應用程式。

Page 40: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

應用程式集區 (app pools) (cont’d)• 傳統模式 vs. 整合模式• 傳統模式 (classic mode) 使用 ISAPI 的執行期

元件 (aspnet_isapi.dll) 執行 ASP.NET ,並由代理行程來維護它的狀態,使用的是 <system.web> 內的設定。• 整合模式 (integration model) 使用 .NET

Framework 本身的 Web 組件 (System.Web.dll) 執行 ASP.NET ,並由代理行程來維護它的狀態,且使用的是 <system.webServer> 內的設定。

Page 41: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

應用程式集區 (app pools) (cont’d)• 什麼時候該使用傳統模式?• 應用程式是 ISAPI 原生模組 (native

module) ,且執行於 IIS 7 整合模式會有異常狀況時。• 應用程式是 ASP.NET 2.0 之前的版本,且執行於

IIS 7 整合模式會有異常狀況時。• 應用程式使用的是 classic ASP ,且執行於 IIS 7 整合模式會有異常狀況時。

• 大多數的應用程式使用整合模式就夠了。

參考資料: http://www.hanselman.com/blog/MovingOldAppsFromIIS6ToIIS8AndWhyClassicModeExists.aspx

Page 42: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

應用程式集區 (app pools) (cont’d)• IIS 7.0+ 的應用程式集區的安全性由代理行程

處理,結合 .NET CAS 機制控制。• 預設情況下, IIS 使用 ApplicationPoolIdentity 這個帳戶給集區的代理行程。• 預設帳戶的名稱為 IIS AppPool\[ 集區名稱 ] 。• 這是個虛擬帳戶 (virtual account) 。• 它只具備了執行應用程式的權限,無法存取主機上的任何資源。• 若應用程式需要更高的權限,可設定為非

ApplicationPoolIdentity 的帳戶 ( 例如 Network Services) ,然後給予主機上的資源存取權限。

Page 43: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

應用程式集區 (app pools) (cont’d)• ApplicationPoolIdentity: 只能執行應用程式,無

法存取主機或網路的資源。• Network Services: 具備可執行網路服務的最小

權限,可以電腦的身份存取網路資源,但無法存取主機資源。• Local Service: 具備可執行與存取 “服務” 以及服

務控制管理員 (SCM) 所需要的權限,但對網路資源只能發出匿名要求。• Local System: 具備內建帳戶中最大的權限,基本上

是 LocalService+NetworkService 的組合,但強烈不建議使用此帳戶作為執行帳戶。

Page 44: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

ASP.NET 常見與 IIS 有關的問題

Page 45: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

ASP.NET 常見的問題 #1BadImageFormatException

為什麼我的程式執行在 64 位元的系統會出現 BadImageFormatException 錯誤?Cause:因為在 64 位元環境中, IIS 是以 64位元的行程執行方式執行,對於以 Any CPU 編譯的 ASP.NET 應用程式來說亳無問題。但若應用程式中引用到,或是以 x86 模式編譯的話,就會發生這個錯誤。

Page 46: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

ASP.NET 常見的問題 #1BadImageFormatException

解決方案:在應用程式集區的帳戶設定中,設定啟用執行32 位元應用程式為true 。這個動作會讓代理行程執行於 64 位元的 WoW 模式,所以可存取 32 位元的應用程式資訊。

Page 47: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

ASP.NET 常見的問題 #2UnauthorizedAccessException

為什麼我的程式執行在存取檔案時出現 System.UnauthorizedAccessException?

Cause:代理行程所使用的帳戶沒有足夠的權限來存取資源,經常發生在檔案上傳與讀寫上。

Page 48: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

ASP.NET 常見的問題 #2UnauthorizedAccessException解決方案:1. 若原本使用的是

ApplicationPoolIdentity,請更換為 Network Service 或 Local Service ( 不可使用 Local System) 。

2. 在要存取的檔案資源的資料夾中設定該帳戶具有讀取、修改和 ( 或 ) 寫入的權限。

Page 49: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

ASP.NET 常見的問題 #3無法存取外部 COM元件

為什麼我的程式執行在呼叫 Microsoft Excel 物件時出現 System.UnauthorizedAccessException?

Cause:代理行程所使用的帳戶沒有足夠的權限來存取 COM 元件。

Page 50: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

ASP.NET 常見的問題 #3無法存取外部 COM元件解決方案:1. 使用具權限的帳戶,並啟用 ASP.NET 模擬

(impersonate) 功能。2. 修改 DCOM 的組態設定,對 Excel COM 元件啟用互動式使用者登入功能,以取得 ASP.NET 代理程式的執行帳戶的權限。

注意:若使用第二項,則不可在代理程式上設定使用權限過高的帳戶 (ex: Administrator) ,否則會產生極高的安全風險。

Page 51: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

ASP.NET 常見的問題 #4處理器莫名奇妙的消失了我在程式中的 Web.config 註冊了我自己的 HTTP 處理器,但放到 IIS 7.5 時出現了這個錯誤:

Cause:1. 若是發生在 ASP.NET 本身,則表示 IIS 沒有註冊好。

2. 若是自訂的 HTTP 處理器,則可能是放錯位置。

Page 52: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

ASP.NET 常見的問題 #4處理器莫名奇妙的消失了解決方案:1. ASP.NET 在 IIS 上未註冊,請到 .NET

Framework 的安裝目錄,執行 aspnet_regiis.exe -i 即可。

2. 在 IIS 7.0+ 的版本, Web.config 中針對 IIS 的設定必須放在 <system.webServer> 內,因此只要改一下位置即可。

Page 53: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

ASP.NET 常見的問題 #5奇妙的 404我的網站中有用到 Flash 的動畫檔 (.swf) ,但放到 IIS 上後沒有反應,直接瀏覽會看到 404 的錯誤。

Cause:某些特殊的檔案並沒有在 IIS 上註冊 MIME 型別資訊,當 IIS 無法確定檔案的 MIME 型別時會直接回覆 404 。

Page 54: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

ASP.NET 常見的問題 #5奇妙的 404

解決方案:在 IIS 管理員內的 MIME 類型加入要下載的檔案的 MIME 型別記錄即可。

Page 55: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

Recap

• IIS 概觀• 不可不知的 IIS 功能• 驗證與授權• 開發人員的小工具: IIS Express• Azure Website• IIS 的行程模型 (Process Model)• 模組,處理器與應用程式集區• ASP.NET 常見與 IIS 有關的問題

Page 56: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

參考資料• IIS.net:

http://www.iis.net • TechNet IIS:

http://www.microsoft.com/taiwan/technet/iis/ • Microsoft Azure:

http://www.azure.com

Page 57: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

Q&A

Page 58: ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

© 2013 Microsoft Corporation. All rights reserved. Microsoft, Windows and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.