天天看點

IIS伺服器與web.config配置優化指南

摘自: http://www.3lian.com/edu/2012/11-13/43890.html

1.修改IIS最大工作程序數

a. 請考慮以下幾點:

1.每一個工作程序都會消耗系統資源和CPU占用率;太多的工作程序會導緻系統資源和CPU使用率的急劇消耗;
2.每一個工作程序都具有自己的狀态資料,如果Web應用程式依賴于工作程序儲存狀态資料,那麼可能不支援使用多個工作程序。
3. 成資源競争,讓多個工作程序運作同一個應用程式會造成資源競争
b. 修改ISS最大工作程序數提高該應用程式池處理請求的性能
1.在IIS 6.0的Web園(Web Garden)中,指定用于某個應用程式池的工作程序的數量就可以提高該應用程式池處理請求的性能。當伺服器的負載較小,不需要額外的工作程序時,IIS 6.0在一定的時間後(預設20分鐘,可配置)自動縮減實際的工作程序數量;如果負載變大,需要額外的工作程序,IIS 6.0再次增加工作程序數量。這一切操作都自動進行,不需要管理者幹預。
2.修改方法如下:
修改伺服器.net framework的machine.config的配置
目錄:C:WINDOWSMicrosoft.NETFramework64v2.0.50727CONFIGmachine.config
将其中的“processModel”節點的“allowDefinition”值設定為“Everywhere”
修改伺服器中的iis最大工作程序數:
方法:右擊iis應用程式池 --> 屬性 -> “性能”頁籤 -> web園 -> 最大工作程序數
注:經測試驗證,伺服器為32(16*2)核32G記憶體時,設定為5性能最優。
(PS: processModel 元素(ASP.NET 設定架構) 元素配置用于伺服器(包括伺服器上的所有 ASP.NET 應用程式)的處理模型。是以,processModel 設定隻能放在 Machine.config 檔案中,而且不能被任何 Web.config 檔案中的設定重寫。 )
2.取消IIS的web通路記錄
a. 關閉IIS通路記錄可以提升web性能
1.IIS6.0預設開啟對于web的IIS通路記錄。當開啟記錄功能後,IIS會事無巨細地忠實記錄所有的IIS通路記錄。這些記錄檔案的内容是非常龐雜的,比如通路時間、用戶端IP、從哪個連結通路、 Cookies等,另外還包括 Method(方法), UserAgent(使用者代理)等。
這些記錄不但占用大量的磁盤空間還大大地影響了web伺服器的性能。有人做過評測,停止IIS通路記錄可以提升5%到8%的web性能。
2.方法:打開IIS管理器,定位到具體的web站點,右鍵點選選擇“屬性”,在“主目錄”頁籤下取消對“記錄通路”的勾選即可
Web.config配置優化(生産環境)
1.去除無用HttpModules
d. 并不是所有的Modules都是必需的,去除不用的HttpModules可以提高請求速度
1.asp.net預設的HttpModules管理請求的管線控制每一個請求。
例如:SessionStateModule攔截每一個請求,分析session cookie 來加載HttpContext中的合适的session.但是并不是所有的Modules都是必需的,比如:如果你不用membership的話,就不用配置FormsAuthentication子產品;如果你不用windows身份驗證就不用配置WindowsAuthentication,這些子產品隻是包含在管線裡面,為每一個請求執行一些并不是必須的代碼。
2.預設的子產品定義在machine.config中(在網站的web.config中設定表示目前網站有效)($WINDOWS$Microsoft.NETFramework$VERSION$CONFIG)。如果不需要這些管線的話,配置如下:

代碼如下:
<httpModules>
<!--去除不必要的節點,提高請求速度-->
<remove name="OutputCache" />
<remove name="Session" />
<remove name="WindowsAuthentication" />
<remove name="FormsAuthentication" />
<remove name="PassportAuthentication" />
<remove name="RoleManager" />
<remove name="UrlAuthorization" />
<remove name="FileAuthorization" />
<remove name="AnonymousIdentification" />
<remove name="Profile" />
</httpModules>
2. 關閉頁面級無用機制
Web.config中的<pages>節點配置全局定義頁特定設定,如配置檔案範圍内的頁和控件的 ASP.NET 指令。預設enableViewState屬性為“true”,即開啟視圖,如果不使用這個機制就可以設定為“false”。
預設autoEventWireup屬性為“true”,即開啟頁事件,如果不使用這個機制就可以設定為“false”。
預設buffer屬性為“true”,即開啟 HTTP 響應緩沖。
預設enableViewStateMac屬性為“false”,開啟對頁的視圖狀态運作計算機身份驗證檢查 (MAC),以放置使用者篡改,如果設定為true,将會引起性能的降低。
預設validateRequest預設為true,開啟驗證使用者輸入中有跨站點腳本攻擊和SQL注入式漏洞攻擊,,如果出現比對情況就會發 HttpRequestValidationException 異常。
3. 将CustomError設定為非Off狀态
Web.config中的<customErrors>節點用于定義一些自定義錯誤資訊的資訊。此節點有Mode和defaultRedirect兩個屬性,其中defaultRedirect屬性是一個可選屬性,表示應用程式發生錯誤時重定向到的預設URL,如果沒有指定該屬性則顯示一般性錯誤。Mode屬性是一個必選屬性,它有三個可能值,它們所代表的意義分别如下:
Mode 說明
On 表示在本地和遠端使用者都會看到自定義錯誤資訊。
Off 禁用自定義錯誤資訊,本地和遠端使用者都會看到詳細的錯誤資訊。
RemoteOnly 表示本地使用者将看到詳細錯誤資訊,而遠端使用者将會看到自定義錯誤資訊。
這裡有必要說明一下本地使用者和遠端使用者的概念。當我們通路asp.net應用程時所使用的機器和釋出asp.net應用程式所使用的機器為同一台機器時成為本地使用者,反之則稱之為遠端使用者。在開發調試階段為了便于查找錯誤Mode屬性建議設定為Off,而在部署階段應将Mode屬性設定為On或者RemoteOnly,以避免這些詳細的錯誤資訊暴露了程式代碼細節進而引來黑客的入侵。
配置如下:

代碼如下:
<customErrors mode=" On " defaultRedirect="Error.html"/>
4. 禁用調試
Web.config中的<compilation>節點配置 ASP.NET 使用的所有編譯設定。預設的debug屬性為“true”,即允許調試,在開發階段這樣配置沒有問題。但正式部署上線後,這樣會影響支撐接口的性能,是以在程式編譯完成上線之後應将其設為“false”。
配置如下:

代碼如下:
<compilation debug="false" />
5. 連接配接并發配置
連接配接并發數限制是指對于同一個ip對同一個domain發起的最大連接配接數。其實在大多數微軟的産品或元件中都存在這個限制,一般這個數值是2/4個,也就是說在預設情況下,對于同一個ip通路同一個domain同時最多有2個連接配接處于建立狀态。預設是2,這個值太低了。這意味着每一個IP最多隻能有兩個請求到你的網站,這樣會造成請求擁堵。asp.net中connectionManagement節點可以設定單個ip對同某個domain發起的最大連接配接數。
配置如下:

代碼如下:
<system.net>
<connectionManagement>
<add address="*" maxconnection="100" />
</connectionManagement>
</system.net>
address代表針對哪個domain,maxconnection代表最大連接配接數。
6. 去掉http頭資訊中的ASP.NET 版本标頭
enableVersonHeader:指定 ASP.NET 是否應輸出版本标頭。使用該屬性來确定目前使用的 ASP.NET 版本。對于生産環境,該屬性不是必需的,可以禁用。
配置示例:

代碼如下:
<httpRuntime enableVersionHeader="false" />