IIS服務器與web.config配置優(yōu)化指南
發(fā)布時間:2012-11-13 09:16:00 作者:佚名
我要評論

優(yōu)化思路無非就是前端優(yōu)化,asp.net頁面生命周期優(yōu)化,數(shù)據(jù)訪問優(yōu)化,IIS與web.config配置優(yōu)化,本文將詳細介紹
1.修改IIS最大工作進程數(shù)
a. 請考慮以下幾點:
1.每一個工作進程都會消耗系統(tǒng)資源和CPU占用率;太多的工作進程會導致系統(tǒng)資源和CPU利用率的急劇消耗;
2.每一個工作進程都具有自己的狀態(tài)數(shù)據(jù),如果Web應用程序依賴于工作進程保存狀態(tài)數(shù)據(jù),那么可能不支持使用多個工作進程。
3. 成資源競爭,讓多個工作進程運行同一個應用程序會造成資源競爭
b. 修改ISS最大工作進程數(shù)提高該應用程序池處理請求的性能
1.在IIS 6.0的Web園(Web Garden)中,指定用于某個應用程序池的工作進程的數(shù)量就可以提高該應用程序池處理請求的性能。當服務器的負載較小,不需要額外的工作進程時,IIS 6.0在一定的時間后(默認20分鐘,可配置)自動縮減實際的工作進程數(shù)量;如果負載變大,需要額外的工作進程,IIS 6.0再次增加工作進程數(shù)量。這一切操作都自動進行,不需要管理員干預。
2.修改方法如下:
修改服務器.net framework的machine.config的配置
目錄:C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\CONFIG\machine.config
將其中的“processModel”節(jié)點的“allowDefinition”值設(shè)置為“Everywhere”
修改服務器中的iis最大工作進程數(shù):
方法:右擊iis應用程序池 --> 屬性 -> “性能”選項卡 -> web園 -> 最大工作進程數(shù)
注:經(jīng)測試驗證,服務器為32(16*2)核32G內(nèi)存時,設(shè)置為5性能最優(yōu)。
(PS: processModel 元素(ASP.NET 設(shè)置架構(gòu)) 元素配置用于服務器(包括服務器上的所有 ASP.NET 應用程序)的處理模型。因此,processModel 設(shè)置只能放在 Machine.config 文件中,而且不能被任何 Web.config 文件中的設(shè)置重寫。 )
2.取消IIS的web訪問記錄
a. 關(guān)閉IIS訪問記錄可以提升web性能
1.IIS6.0默認開啟對于web的IIS訪問記錄。當開啟記錄功能后,IIS會事無巨細地忠實記錄所有的IIS訪問記錄。這些記錄文件的內(nèi)容是非常龐雜的,比如訪問時間、客戶端IP、從哪個鏈接訪問、 Cookies等,另外還包括 Method(方法), UserAgent(用戶代理)等。
這些記錄不但占用大量的磁盤空間還大大地影響了web服務器的性能。有人做過評測,停止IIS訪問記錄可以提升5%到8%的web性能。
2.方法:打開IIS管理器,定位到具體的web站點,右鍵點擊選擇“屬性”,在“主目錄”選項卡下取消對“記錄訪問”的勾選即可
Web.config配置優(yōu)化(生產(chǎn)環(huán)境)
1.去除無用HttpModules
d. 并不是所有的Modules都是必需的,去除不用的HttpModules可以提高請求速度
1.asp.net默認的HttpModules管理請求的管線控制每一個請求。
例如:SessionStateModule攔截每一個請求,分析session cookie 來加載HttpContext中的合適的session.但是并不是所有的Modules都是必需的,比如:如果你不用membership的話,就不用配置FormsAuthentication模塊;如果你不用windows身份驗證就不用配置WindowsAuthentication,這些模塊只是包含在管線里面,為每一個請求執(zhí)行一些并不是必須的代碼。
2.默認的模塊定義在machine.config中(在網(wǎng)站的web.config中設(shè)置表示當前網(wǎng)站有效)($WINDOWS$\Microsoft.NET\Framework\$VERSION$\CONFIG)。如果不需要這些管線的話,配置如下:
<httpModules>
<!--去除不必要的節(jié)點,提高請求速度-->
<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. 關(guān)閉頁面級無用機制
Web.config中的<pages>節(jié)點配置全局定義頁特定設(shè)置,如配置文件范圍內(nèi)的頁和控件的 ASP.NET 指令。默認enableViewState屬性為“true”,即開啟視圖,如果不使用這個機制就可以設(shè)置為“false”。
默認autoEventWireup屬性為“true”,即開啟頁事件,如果不使用這個機制就可以設(shè)置為“false”。
默認buffer屬性為“true”,即開啟 HTTP 響應緩沖。
默認enableViewStateMac屬性為“false”,開啟對頁的視圖狀態(tài)運行計算機身份驗證檢查 (MAC),以放置用戶篡改,如果設(shè)置為true,將會引起性能的降低。
默認validateRequest默認為true,開啟驗證用戶輸入中有跨站點腳本攻擊和SQL注入式漏洞攻擊,,如果出現(xiàn)匹配情況就會發(fā) HttpRequestValidationException 異常。
3. 將CustomError設(shè)置為非Off狀態(tài)
Web.config中的<customErrors>節(jié)點用于定義一些自定義錯誤信息的信息。此節(jié)點有Mode和defaultRedirect兩個屬性,其中defaultRedirect屬性是一個可選屬性,表示應用程序發(fā)生錯誤時重定向到的默認URL,如果沒有指定該屬性則顯示一般性錯誤。Mode屬性是一個必選屬性,它有三個可能值,它們所代表的意義分別如下:
Mode 說明
On 表示在本地和遠程用戶都會看到自定義錯誤信息。
Off 禁用自定義錯誤信息,本地和遠程用戶都會看到詳細的錯誤信息。
RemoteOnly 表示本地用戶將看到詳細錯誤信息,而遠程用戶將會看到自定義錯誤信息。
這里有必要說明一下本地用戶和遠程用戶的概念。當我們訪問asp.net應用程時所使用的機器和發(fā)布asp.net應用程序所使用的機器為同一臺機器時成為本地用戶,反之則稱之為遠程用戶。在開發(fā)調(diào)試階段為了便于查找錯誤Mode屬性建議設(shè)置為Off,而在部署階段應將Mode屬性設(shè)置為On或者RemoteOnly,以避免這些詳細的錯誤信息暴露了程序代碼細節(jié)從而引來黑客的入侵。
配置如下:
<customErrors mode=" On " defaultRedirect="Error.html"/>
4. 禁用調(diào)試
Web.config中的<compilation>節(jié)點配置 ASP.NET 使用的所有編譯設(shè)置。默認的debug屬性為“true”,即允許調(diào)試,在開發(fā)階段這樣配置沒有問題。但正式部署上線后,這樣會影響支撐接口的性能,所以在程序編譯完成上線之后應將其設(shè)為“false”。
配置如下:
<compilation debug="false" />
5. 連接并發(fā)配置
連接并發(fā)數(shù)限制是指對于同一個ip對同一個domain發(fā)起的最大連接數(shù)。其實在大多數(shù)微軟的產(chǎn)品或組件中都存在這個限制,一般這個數(shù)值是2/4個,也就是說在默認情況下,對于同一個ip訪問同一個domain同時最多有2個連接處于建立狀態(tài)。默認是2,這個值太低了。這意味著每一個IP最多只能有兩個請求到你的網(wǎng)站,這樣會造成請求擁堵。asp.net中connectionManagement節(jié)點可以設(shè)置單個ip對同某個domain發(fā)起的最大連接數(shù)。
配置如下:
<system.net>
<connectionManagement>
<add address="*" maxconnection="100" />
</connectionManagement>
</system.net>
address代表針對哪個domain,maxconnection代表最大連接數(shù)。
6. 去掉http頭信息中的ASP.NET 版本標頭
enableVersonHeader:指定 ASP.NET 是否應輸出版本標頭。使用該屬性來確定當前使用的 ASP.NET 版本。對于生產(chǎn)環(huán)境,該屬性不是必需的,可以禁用。
配置示例:
<httpRuntime enableVersionHeader="false" />
a. 請考慮以下幾點:
1.每一個工作進程都會消耗系統(tǒng)資源和CPU占用率;太多的工作進程會導致系統(tǒng)資源和CPU利用率的急劇消耗;
2.每一個工作進程都具有自己的狀態(tài)數(shù)據(jù),如果Web應用程序依賴于工作進程保存狀態(tài)數(shù)據(jù),那么可能不支持使用多個工作進程。
3. 成資源競爭,讓多個工作進程運行同一個應用程序會造成資源競爭
b. 修改ISS最大工作進程數(shù)提高該應用程序池處理請求的性能
1.在IIS 6.0的Web園(Web Garden)中,指定用于某個應用程序池的工作進程的數(shù)量就可以提高該應用程序池處理請求的性能。當服務器的負載較小,不需要額外的工作進程時,IIS 6.0在一定的時間后(默認20分鐘,可配置)自動縮減實際的工作進程數(shù)量;如果負載變大,需要額外的工作進程,IIS 6.0再次增加工作進程數(shù)量。這一切操作都自動進行,不需要管理員干預。
2.修改方法如下:
修改服務器.net framework的machine.config的配置
目錄:C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\CONFIG\machine.config
將其中的“processModel”節(jié)點的“allowDefinition”值設(shè)置為“Everywhere”
修改服務器中的iis最大工作進程數(shù):
方法:右擊iis應用程序池 --> 屬性 -> “性能”選項卡 -> web園 -> 最大工作進程數(shù)
注:經(jīng)測試驗證,服務器為32(16*2)核32G內(nèi)存時,設(shè)置為5性能最優(yōu)。
(PS: processModel 元素(ASP.NET 設(shè)置架構(gòu)) 元素配置用于服務器(包括服務器上的所有 ASP.NET 應用程序)的處理模型。因此,processModel 設(shè)置只能放在 Machine.config 文件中,而且不能被任何 Web.config 文件中的設(shè)置重寫。 )
2.取消IIS的web訪問記錄
a. 關(guān)閉IIS訪問記錄可以提升web性能
1.IIS6.0默認開啟對于web的IIS訪問記錄。當開啟記錄功能后,IIS會事無巨細地忠實記錄所有的IIS訪問記錄。這些記錄文件的內(nèi)容是非常龐雜的,比如訪問時間、客戶端IP、從哪個鏈接訪問、 Cookies等,另外還包括 Method(方法), UserAgent(用戶代理)等。
這些記錄不但占用大量的磁盤空間還大大地影響了web服務器的性能。有人做過評測,停止IIS訪問記錄可以提升5%到8%的web性能。
2.方法:打開IIS管理器,定位到具體的web站點,右鍵點擊選擇“屬性”,在“主目錄”選項卡下取消對“記錄訪問”的勾選即可
Web.config配置優(yōu)化(生產(chǎn)環(huán)境)
1.去除無用HttpModules
d. 并不是所有的Modules都是必需的,去除不用的HttpModules可以提高請求速度
1.asp.net默認的HttpModules管理請求的管線控制每一個請求。
例如:SessionStateModule攔截每一個請求,分析session cookie 來加載HttpContext中的合適的session.但是并不是所有的Modules都是必需的,比如:如果你不用membership的話,就不用配置FormsAuthentication模塊;如果你不用windows身份驗證就不用配置WindowsAuthentication,這些模塊只是包含在管線里面,為每一個請求執(zhí)行一些并不是必須的代碼。
2.默認的模塊定義在machine.config中(在網(wǎng)站的web.config中設(shè)置表示當前網(wǎng)站有效)($WINDOWS$\Microsoft.NET\Framework\$VERSION$\CONFIG)。如果不需要這些管線的話,配置如下:
復制代碼
代碼如下:<httpModules>
<!--去除不必要的節(jié)點,提高請求速度-->
<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. 關(guān)閉頁面級無用機制
Web.config中的<pages>節(jié)點配置全局定義頁特定設(shè)置,如配置文件范圍內(nèi)的頁和控件的 ASP.NET 指令。默認enableViewState屬性為“true”,即開啟視圖,如果不使用這個機制就可以設(shè)置為“false”。
默認autoEventWireup屬性為“true”,即開啟頁事件,如果不使用這個機制就可以設(shè)置為“false”。
默認buffer屬性為“true”,即開啟 HTTP 響應緩沖。
默認enableViewStateMac屬性為“false”,開啟對頁的視圖狀態(tài)運行計算機身份驗證檢查 (MAC),以放置用戶篡改,如果設(shè)置為true,將會引起性能的降低。
默認validateRequest默認為true,開啟驗證用戶輸入中有跨站點腳本攻擊和SQL注入式漏洞攻擊,,如果出現(xiàn)匹配情況就會發(fā) HttpRequestValidationException 異常。
3. 將CustomError設(shè)置為非Off狀態(tài)
Web.config中的<customErrors>節(jié)點用于定義一些自定義錯誤信息的信息。此節(jié)點有Mode和defaultRedirect兩個屬性,其中defaultRedirect屬性是一個可選屬性,表示應用程序發(fā)生錯誤時重定向到的默認URL,如果沒有指定該屬性則顯示一般性錯誤。Mode屬性是一個必選屬性,它有三個可能值,它們所代表的意義分別如下:
Mode 說明
On 表示在本地和遠程用戶都會看到自定義錯誤信息。
Off 禁用自定義錯誤信息,本地和遠程用戶都會看到詳細的錯誤信息。
RemoteOnly 表示本地用戶將看到詳細錯誤信息,而遠程用戶將會看到自定義錯誤信息。
這里有必要說明一下本地用戶和遠程用戶的概念。當我們訪問asp.net應用程時所使用的機器和發(fā)布asp.net應用程序所使用的機器為同一臺機器時成為本地用戶,反之則稱之為遠程用戶。在開發(fā)調(diào)試階段為了便于查找錯誤Mode屬性建議設(shè)置為Off,而在部署階段應將Mode屬性設(shè)置為On或者RemoteOnly,以避免這些詳細的錯誤信息暴露了程序代碼細節(jié)從而引來黑客的入侵。
配置如下:
復制代碼
代碼如下:<customErrors mode=" On " defaultRedirect="Error.html"/>
4. 禁用調(diào)試
Web.config中的<compilation>節(jié)點配置 ASP.NET 使用的所有編譯設(shè)置。默認的debug屬性為“true”,即允許調(diào)試,在開發(fā)階段這樣配置沒有問題。但正式部署上線后,這樣會影響支撐接口的性能,所以在程序編譯完成上線之后應將其設(shè)為“false”。
配置如下:
復制代碼
代碼如下:<compilation debug="false" />
5. 連接并發(fā)配置
連接并發(fā)數(shù)限制是指對于同一個ip對同一個domain發(fā)起的最大連接數(shù)。其實在大多數(shù)微軟的產(chǎn)品或組件中都存在這個限制,一般這個數(shù)值是2/4個,也就是說在默認情況下,對于同一個ip訪問同一個domain同時最多有2個連接處于建立狀態(tài)。默認是2,這個值太低了。這意味著每一個IP最多只能有兩個請求到你的網(wǎng)站,這樣會造成請求擁堵。asp.net中connectionManagement節(jié)點可以設(shè)置單個ip對同某個domain發(fā)起的最大連接數(shù)。
配置如下:
復制代碼
代碼如下:<system.net>
<connectionManagement>
<add address="*" maxconnection="100" />
</connectionManagement>
</system.net>
address代表針對哪個domain,maxconnection代表最大連接數(shù)。
6. 去掉http頭信息中的ASP.NET 版本標頭
enableVersonHeader:指定 ASP.NET 是否應輸出版本標頭。使用該屬性來確定當前使用的 ASP.NET 版本。對于生產(chǎn)環(huán)境,該屬性不是必需的,可以禁用。
配置示例:
復制代碼
代碼如下:<httpRuntime enableVersionHeader="false" />
相關(guān)文章
這幾天爆火的chatgpt是啥? 與SEO有沒有關(guān)系? 速看
近日,OpenAI 帶來了一種全新的 AI 聊天機器人——ChatGPT,它不僅能對話、寫作還能編程、Debug,厲害得嚇人,那么chatgpt與SEO有沒有關(guān)系?詳細請看下文介紹2022-12-10- 這篇文章主要介紹了收錄與索引是什么意思?收錄和索引的區(qū)別是什么?的相關(guān)資料,需要的朋友可以參考下本文詳細內(nèi)容介紹2022-11-07
大網(wǎng)站與小網(wǎng)站做排名流量的區(qū)別是什么
這篇文章主要介紹了大網(wǎng)站與小網(wǎng)站做排名流量的區(qū)別是什么的相關(guān)資料,需要的朋友可以參考下本文詳細內(nèi)容介紹2022-11-07- 不同的搜索引擎提供了服務后臺常見功能來優(yōu)化網(wǎng)站搜索,下面文章就為大家詳細介紹,一起看看吧2021-10-14
新站如何優(yōu)化 網(wǎng)站收錄/關(guān)鍵詞排名等問題解答
筆者最近收到很多關(guān)于新站優(yōu)化的咨詢,問題無外乎是網(wǎng)站首頁怎么還沒收錄、網(wǎng)站內(nèi)容什么時候收錄、關(guān)鍵詞排名什么時候才能上來等等。這些問題看似很重要,但筆者認為對上線2021-03-19如何快速收錄網(wǎng)站內(nèi)容 想要快速收錄網(wǎng)站內(nèi)容的注意事項
對于網(wǎng)站SEO優(yōu)化而言,頁面收錄是很重要的環(huán)節(jié),因為如果網(wǎng)站沒有收錄,或者網(wǎng)站收錄少的話,那么就談不上關(guān)鍵詞排名了。那么如何快速收錄網(wǎng)站,如何快速收錄一篇文章呢?本2021-03-19- 2020年如何利用SEO增加流量?下文小編就為大家?guī)碓敿毥坛?,感興趣的朋友可以一起看看2020-03-06
- 當我們優(yōu)化我們的網(wǎng)站時,有時發(fā)現(xiàn)我們優(yōu)化好的關(guān)鍵詞的排名突然變得不穩(wěn)定。這要怎么辦呢?下文小編就為大家整理了幾天避免下降方法,一起看看吧2020-03-02
企業(yè)網(wǎng)站被降權(quán)的具體原因有那些 企業(yè)網(wǎng)站被降權(quán)的原因分析
企業(yè)網(wǎng)站被降權(quán)的具體原因有那些?下文中為大家?guī)砹似髽I(yè)網(wǎng)站被降權(quán)的四大因素分析。感興趣的朋友不妨閱讀下文內(nèi)容,參考一下吧2019-11-13老網(wǎng)站突然不收錄了為什么 多年的老網(wǎng)站突然不收錄的原因及解決方法
老網(wǎng)站突然不收錄了為什么?下文中為大家?guī)砹硕嗄甑睦暇W(wǎng)站突然不收錄的14個原因及解決方法。感興趣的朋友不妨閱讀下文內(nèi)容,參考一下吧2019-11-13