More Related Content Similar to ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers) (20) ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)3. Agenda
• IIS 概觀
• 不可不知的 IIS 功能
• 驗證與授權
• 開發人員的小工具:IIS Express
• Azure Website
• IIS 的行程模型 (Process Model)
• 模組,處理器與應用程式集區
• ASP.NET 常見與 IIS 有關的問題
6. 什麼是 IIS?
• 微軟平台的 Web 服務提供者 (Web service
provider)。
• HTTP協定的伺服器。
• 執行 Classic ASP, ASP.NET應用程式。
• 執行支援 ISAPI-based 的網路應用程式 (FastCGI, PHP,
node.js, …)。
• FTP
• 由 Visual Studio 以及其他工具支援。
• Web Deploy
• 雲端的支援 (Azure Websites)。
7. IIS 的功能
• 執行 ASP.NET 等 Web 應用程式。
• 多個應用程式並行。
• 利用行程隔離 (process isolation) 的方式。
• 其中一個網站當掉,不會影響其他的網站。
• 舊版 IIS (6.0-) 和新版 IIS (7.0+) 的處理方式不同。
• 輔助的工具與功能
• 安全過濾 (security filtering)
• 加速 (pre application startup)
• 有部份需要透過Web Platform Installer來安裝。
• 還有更多…
11. 要求過濾 (Request Filtering)
• 對傳入 IIS 的 HTTP 要求做過濾,擋下不符合規
定的要求。
• 對副檔名做限制。
• 對 URL 做限制 (等同於 UrlScan 的功能)。
• 對要求內容做限制 (例如內容長度)。
• 對 HTTP 動詞做限制。
• 對 HTTP 標頭做限制。
• 對查詢字串做限制。
• ASP.NET 應用程式可做另一層限制。
12. 輸出快取 (Output Cache)
• 使用者模式快取 (User-
mode cache)
• 可設定空間較大。
• 針對特定標頭或查詢字
串進行快取。
• 可針對應用程式進行快
取監測。
• 核心模式快取 (Kernel-
mode cache)
• 針對檔案系統進行快取
監測。
13. 記錄功能
• 一般記錄
• 支援 W3C, IIS, ODBC 等記錄,但通常只會安裝 W3C
和 IIS 的記錄功能,ODBC 則要到伺服器管理員或是
委由 Web PI 來設定。
• 預設只會安裝 W3C log。
• IIS 8.5 新功能
• 可選擇只輸出到記錄檔,ETW (Event Tracing for Windows)
事件記錄或是兩個都輸出。
• 即時記錄功能 (ETW-based)。
• 自訂記錄欄位。
16. 記錄功能
• 進階記錄 (Advanced
Logging) 模組
• 另一種記錄的方法。
• 外掛程式 (透過 Web PI)。
• 欄位為基本 W3C 記錄欄
位。
• 可支援記錄的過濾。
更多參考:
http://www.microsoft.com/taiwan/technet/iis/expand/AdvancedLogging.aspx
18. 分析記錄檔
• Log Parser
• 老牌可靠的記錄檔分析器。
• 支援20種記錄格式。
• 支援類 SQL 的查詢方式。
• 編寫排程定時分析,取出
使用者活動記錄或是錯誤
分析等。
• Log Parser 是命令列工具。
• Visual Log Parser
• Lizard Log Parser GUI ($)
更多參考:
http://www.microsoft.com/taiwan/technet/iis/expand/LogParser.aspx
19. 應用程式初始化
• Application Initialization 模組
• 允許應用程式在 IIS 啟動時就開始載入。
• 適合首次需要進行大量資料處理或需要較長時間運算
的應用程式 (尤其是首頁)。
• IIS 7.5 為外掛,IIS 8+ 為內建。
• 設定應用程式的 preloadEnabled=true
• 設定應用程式集區的 startMode=AlwaysRunning
20. 代理行程暫止功能
• Idle Worker Process Page-Out
• 當網站閒置超過設定時間時,IIS 8 之前的行為會將
代理行程終止。
• IIS 8.5 開始,允許網站管理員設定 IIS 不回收代理行
程,避免再次冷啟動 (cold-start),加快網站的回應
速度。
• 在應用程式進階設定中設定。
21. 動態網站活化
• Dynamic Site Activation
• IIS 在啟動時不先載入網站,等到有第一個針對該網
站的要求進入時,才啟動網站。
• 適合擁有大量網站,但每個網站都不用太多初始化時
間的情境。
• 修改 dynamicRegistrationThreshold 的值來增減網站
數量。
23. 驗證
• 驗證類型
• 匿名驗證 (Anonymous)
• 基本驗證 (Basic)
• 摘要式驗證 (Digest)
• 表單驗證 (Forms)
• ASP.NET 模擬 (ASP.NET Impersonate)
• Windows 驗證 (Windows)
• AD 用戶端憑證 (AD Certificate)
• 一般而言,不需要安裝這麼多類型 (預設只有匿
名驗證與表單驗證,Windows 驗證會停用)。
24. 使用者,角色與 URL 授權
• IIS 的授權功能由其內建模組提供
• 使用者功能 (ASP.NET Membership)
• 角色功能 (ASP.NET Role)
• 設定檔功能 (ASP.NET Profile)
• URL 授權
• 支援針對使用者,角色的存取控制 (Windows 驗證時
則可依群組進行設定)。
• 可針對所有網站,特定網站或特定資料夾進行設定。
26. IIS Express
• 縮小版的 IIS 7+。
• 支援以往在 ASP.NET Development Server 上沒
有的功能。
• Visual Studio 2012+ 直接支援。
37. 模組與處理常式
• 處理常式 (handler) 是針對特定資源所開發的的
處理器。
• ASP.NET Handler
(System.Web.UI.PageHandlerFactory)
• Extensionless Handler
(System.Web.Handlers.TransferRequestHandler)
• Simple HTTP Handler
(System.Web.UI.SimpleHandlerFactory)
• 分為 Managed 處理常式 (使用 .NET 開發的),
指令碼 (含萬用字元) 處理常式 (使用原生 API 開
發的) 以及模組內支援的處理常式。
38. 模組與處理常式
• 模組 (module) 是所有 HTTP 要求都會通過的處
理器。
• ProtocolSupportModule (處理特定協定的模組)
• RequestFilteringModule (要求過濾模組)
• UrlAuthorizationModule (URL 授權模組)
• UrlRoutingModule-4.0 (ASP.NET Routing)
• 分為 Managed 模組與原生模組。
• ASP.NET 內的 HTTP Module 屬於 Managed Module。
• 原生模組必須用 C++ 開發,並使用 IIS 原生函式庫。
39. 應用程式集區 (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 應用程式。
40. 應用程式集區 (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> 內的設定。
41. 應用程式集區 (app pools)
(cont’d)
• 什麼時候該使用傳統模式?
• 應用程式是 ISAPI 原生模組 (native module) ,且執
行於 IIS 7 整合模式會有異常狀況時。
• 應用程式是 ASP.NET 2.0 之前的版本,且執行於 IIS 7
整合模式會有異常狀況時。
• 應用程式使用的是 classic ASP,且執行於 IIS 7 整合
模式會有異常狀況時。
• 大多數的應用程式使用整合模式就夠了。
參考資料:
http://www.hanselman.com/blog/MovingOldApps
FromIIS6ToIIS8AndWhyClassicModeExists.aspx
42. 應用程式集區 (app pools)
(cont’d)
• IIS 7.0+ 的應用程式集區的安全性由代理行程處
理,結合 .NET CAS 機制控制。
• 預設情況下,IIS 使用 ApplicationPoolIdentity
這個帳戶給集區的代理行程。
• 預設帳戶的名稱為 IIS AppPool[集區名稱]。
• 這是個虛擬帳戶 (virtual account)。
• 它只具備了執行應用程式的權限,無法存取主機上的
任何資源。
• 若應用程式需要更高的權限,可設定為非
ApplicationPoolIdentity 的帳戶 (例如 Network
Services),然後給予主機上的資源存取權限。
43. 應用程式集區 (app pools)
(cont’d)
• ApplicationPoolIdentity: 只能執行應用程式,無法存
取主機或網路的資源。
• Network Services: 具備可執行網路服務的最小權限,
可以電腦的身份存取網路資源,但無法存取主機資源。
• Local Service: 具備可執行與存取 “服務” 以及服務控制
管理員 (SCM) 所需要的權限,但對網路資源只能發出匿
名要求。
• Local System: 具備內建帳戶中最大的權限,基本上是
LocalService+NetworkService的組合,但強烈不建議使
用此帳戶作為執行帳戶。
50. ASP.NET 常見的問題 #3
無法存取外部COM元件
解決方案:
1. 使用具權限的帳戶,並啟用 ASP.NET 模擬
(impersonate) 功能。
2. 修改 DCOM 的組態設定,對 Excel COM
元件啟用互動式使用者登入功能,以取得
ASP.NET 代理程式的執行帳戶的權限。
注意:若使用第二項,則不可在代理程式上設定使
用權限過高的帳戶 (ex: Administrator),否則會產
生極高的安全風險。
52. ASP.NET 常見的問題 #4
處理器莫名奇妙的消失了
解決方案:
1. ASP.NET在IIS上未註冊,請到.NET Framework
的安裝目錄,執行 aspnet_regiis.exe -i 即可。
2. 在 IIS 7.0+ 的版本,Web.config 中針對 IIS
的設定必須放在 <system.webServer> 內,
因此只要改一下位置即可。
55. Recap
• IIS 概觀
• 不可不知的 IIS 功能
• 驗證與授權
• 開發人員的小工具:IIS Express
• Azure Website
• IIS 的行程模型 (Process Model)
• 模組,處理器與應用程式集區
• ASP.NET 常見與 IIS 有關的問題
Editor's Notes Git Deployment is Native, or through a Service hook from CodePlex, GitHub or BitBucket Slide Objectives:Explain that Windows Azure Web Sites supports Classic ASP, ASP.NET, PHP, and Node.js out of the box and that you can also host any custom FastCGI handler.Notes: Git Deployment is Native, or through a Service hook from CodePlex, GitHub or BitBucket