IIS 6.0优化与asp.net的web.config配置优化
这一篇给大家【gěi dà jiā】👜分享IIS的【de】一些优化以✋及【jí】asp.net的【de】web.config配置优化🚘。
IIS相关优化
1.修改IIS最大工作进程数
a. 请考虑以下几点:
1.每一个【měi yī gè】工作进♟程都会【chéng dōu huì】💲消耗系⚡统资源和【zī yuán hé】🌏CPU占用率【zhàn yòng lǜ】;太多的工作进♟程会导致系统【zhì xì tǒng】资源和【zī yuán hé】🌏CPU利用率😲的急剧消耗;
2.每一个😚工作进【zuò jìn】🎟程都具😿有自己【yǒu zì jǐ】😔的状态数据【shù jù】🍋,如果Web应用程序依赖【xù yī lài】于工作♒进程保存状态数据【shù jù】🍋,那么可能不支持使用【chí shǐ yòng】多个工作进【zuò jìn】🎟程。
3. 成资源【chéng zī yuán】🛴竞争🥉,让多个【ràng duō gè】工作进程运行同一个应用程【yīng yòng chéng】🥍序会造成资源【chéng zī yuán】🛴竞争🥉
b. 修改【xiū gǎi】ISS最大工🔕作进程⛩数提高该应用程序池🛫处理请【chù lǐ qǐng】求的性能【néng】
1.在【zài】IIS 6.0的🎂Web园(Web Garden)中,指定用【zhǐ dìng yòng】于某个【yú mǒu gè】应用程【chéng】序池👌的🎂工作进【gōng zuò jìn】程【chéng】🍱的🎂数量【shù liàng】就可以提高该应用程【chéng】序池👌处理请求的【qiú de】🎂性能【xìng néng】😧。当服务器的负【qì de fù】🐵载较小【zǎi jiào xiǎo】,不需要🙇额外的工【gōng】💌作进程【jìn chéng】🍱时,IIS 6.0在一定【zài yī dìng】的时间🎉后(默认🌋20分钟,可配置🔲)自动缩减实际【jiǎn shí jì】的🎂工作进【gōng zuò jìn】程【chéng】🍱数量【shù liàng】;如果负载变大🎖,需要额💗外的工【gōng】💌作进程【jìn chéng】🍱,IIS 6.0再次增【zài cì zēng】加工作【jiā gōng zuò】进程【jìn chéng】🍱数量【shù liàng】。这一切🎦操作都自动进行【háng】,不需要🙇管理员干预。
2.修改方法如下:
修改服【xiū gǎi fú】💉务器【wù qì】.net framework的machine.config的配置📶
目录【mù lù】🐴:C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\CONFIG\machine.config
将其中【jiāng qí zhōng】的【de】🔖“processModel”节点的【de】💮“allowDefinition”值设置为“Everywhere”
修改服务器中的iis最大工作进程数:
方法【fāng fǎ】🚊:右击📹iis应用程序池🥪 --> 属性 -> “性能”选项卡 -> web园【yuán】 -> 最大工【zuì dà gōng】作进程数【shù】🥋
注:经测试验证🙉,服务器为32(16*2)核🍣32G内存时【nèi cún shí】📓,设置为5性能最【xìng néng zuì】优【yōu】。
(PS: processModel 元素【yuán sù】(ASP.NET 设置架构) 元素【yuán sù】配🦋置用于服务器(包括服务器上🤤的所有 ASP.NET 应用程序【xù】)的处理【de chù lǐ】🎹模型。因此【yīn cǐ】,processModel 设置只【shè zhì zhī】能放在🤾 Machine.config 文件中【wén jiàn zhōng】🥫,而且不能被任💐何【hé】 Web.config 文件中【wén jiàn zhōng】🥫的设置🕶重写。 )
2.取消IIS的web访问记录
a. 关闭IIS访问记【fǎng wèn jì】录可以🥩提升🤪web性能【xìng néng】
1.IIS6.0默认开启对于【qǐ duì yú】web的【de】⛳IIS访问记录【lù】🍓。当开启【dāng kāi qǐ】💀记录【lù】功📯能后✉,IIS会事无【huì shì wú】巨细地🎉忠实记录【lù】🍓所有的【suǒ yǒu de】⛳IIS访问记录【lù】🍓。这些记录【lù】🍓文件的【de】⛳内容是非常庞【fēi cháng páng】杂的【de】⛳,比如访问时间🍓、客户端IP、从哪个【cóng nǎ gè】🎐链接访【liàn jiē fǎng】问、 Cookies等,另外还【lìng wài hái】包括 Method(方法), UserAgent(用户代【yòng hù dài】🥠理🏮)等。
这些记【zhè xiē jì】👾录不但占用大量的磁【liàng de cí】🤸盘空间⛹还大大🤢地影响了【le】web服务器🐏的性能【de xìng néng】。有人做过评测【guò píng cè】,停止IIS访问记✡录可以提升5%到【dào】8%的web性能。
2.方法【fāng fǎ】:打开【dǎ kāi】IIS管理器,定位到✴具体的web站点🎉,右键点击选择🏟“属性【shǔ xìng】”,在🎸“主目录”选项卡下取消🍦对【duì】“记录访问【wèn】”的勾选【de gōu xuǎn】即可🏵
Web.config配置优😛化👸(生产环【shēng chǎn huán】境【jìng】)
1.去除无用HttpModules
d. 并不是【bìng bú shì】🔱所有的Modules都是必需的,去除不用的【yòng de】💃HttpModules可以提【kě yǐ tí】高请求🗃速度
1.asp.net默认的✨HttpModules管理请求【qiú】🌩的管线【de guǎn xiàn】控制每一个请【yī gè qǐng】求【qiú】🌩。
例如😘:SessionStateModule拦截每一个请【yī gè qǐng】求【qiú】🦇,分析🤠session cookie 来加载【lái jiā zǎi】👃HttpContext中的合【zhōng de hé】🛁适的【shì de】🛎session.但是并不是所有的【yǒu de】Modules都是必❎需的,比如:如果你不用membership的话,就不用⏸配置【pèi zhì】FormsAuthentication模块;如果你不用windows身份验证就不【zhèng jiù bú】🔲用配置【yòng pèi zhì】🚩WindowsAuthentication,这些模块只是【kuài zhī shì】包含在管线里面,为每一个请【yī gè qǐng】求【qiú】🦇执行一些并不是必须的代码【de dài mǎ】♉。
2.默认的🚴模块定【mó kuài dìng】🍯义在🌮machine.config中(在网站💫的web.config中设置表示当【biǎo shì dāng】前网站⏱有效)($WINDOWS$\Microsoft.NET\Framework\$VERSION$\CONFIG)。如果不需要这【xū yào zhè】些管线【xiē guǎn xiàn】的话,配置如【pèi zhì rú】下:
<httpModules> <!--去除不【qù chú bú】必要的节点,提高请求速度🔎--> <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 bì yè】🍚面级无【miàn jí wú】🤜用机制
Web.config中的<pages>节点配置全局【zhì quán jú】定义页【dìng yì yè】🏮特定设【tè dìng shè】📧置,如配置文件范围内的页和控件的 ASP.NET 指令【zhǐ lìng】。默认🌗enableViewState属性为😉“true”,即开启视图【shì tú】🎈,如果不【rú guǒ bú】使用这【shǐ yòng zhè】个机制🥙就可以🕉设置为“false”。
默认【mò rèn】🕉autoEventWireup属性为😈“true”,即开启页事件,如果不使用这【shǐ yòng zhè】个机制【gè jī zhì】📷就可以设置为“false”。
默认【mò rèn】buffer属性为【shǔ xìng wéi】“true”,即开启 HTTP 响应缓【xiǎng yīng huǎn】冲🍧。
默认【mò rèn】enableViewStateMac属性为【shǔ xìng wéi】“false”,开启对页的视图状态【tú zhuàng tài】✍运行计【yùn háng jì】算机身💲份验证检查【jiǎn chá】🚸 (MAC),以放置🔘用户篡【yòng hù cuàn】🧔改,如果设🧡置为【zhì wéi】true,将会引【jiāng huì yǐn】起性能的降低。
默认【mò rèn】validateRequest默认【mò rèn】为true,开启验证用户【zhèng yòng hù】💆输入中有跨站🦕点脚本攻击和【gōng jī hé】📐SQL注入式漏洞攻击🍞,,如果出🚔现匹配情况就会发 HttpRequestValidationException 异常【yì cháng】。
3. 将【jiāng】CustomError设置为🤝非Off状态【zhuàng tài】😪
Web.config中的🦂<customErrors>节点用🏕于定义🕸一些自【yī xiē zì】🎂定义错【dìng yì cuò】🍭误信息【wù xìn xī】🎚的信息【de xìn xī】🎏。此节点有【yǒu】Mode和🗻defaultRedirect两个属性,其中defaultRedirect属性是【shǔ xìng shì】一个可选属性【xuǎn shǔ xìng】Ⓜ,表示应用程🐼序发生错⛴误时重定向到【dìng xiàng dào】🖊的默认URL,如果没有【yǒu】指定📣该属性🗡则显示一般性【yī bān xìng】错误【cuò wù】。Mode属性是【shǔ xìng shì】一个必【yī gè bì】选属性【xuǎn shǔ xìng】Ⓜ,它有【yǒu】三🎙个可能值,它们所【tā men suǒ】代表的意义分别如下🍡:
Mode 说明
On 表示在【biǎo shì zài】本地和🗻远程用户都会【hù dōu huì】🥝看到自【kàn dào zì】定义错【dìng yì cuò】🍭误信息【wù xìn xī】🎚。
Off 禁用自定义错【dìng yì cuò】🍭误信息【wù xìn xī】🎚,本地和🗻远程用户都会【hù dōu huì】🥝看到详🤶细的错【xì de cuò】🏩误信息【wù xìn xī】🎚。
RemoteOnly 表示本👗地用户【dì yòng hù】将看到详🤶细错误【cuò wù】信🌤息【xī】🎏,而远程【ér yuǎn chéng】用户将会看到自【kàn dào zì】定义错【dìng yì cuò】🍭误信息【wù xìn xī】🎚。
这里有【zhè lǐ yǒu】必要说明一下本地用户【dì yòng hù】和远📗程用户的概念。当我们访问【fǎng wèn】asp.net应用程🐼时所使【shí suǒ shǐ】用的机器和发【qì hé fā】🕊布♓asp.net应用程🐼序所使用的机器为【wéi】同🎭一台机📲器时成为【wéi】本地用户【dì yòng hù】,反之则【fǎn zhī zé】称之为【wéi】📒远程用户。在开发【zài kāi fā】🍋调试阶段为【wéi】了便于查找错误【cuò wù】Mode属性建议设置为【wéi】🈵Off,而在部署阶段【shǔ jiē duàn】🏤应将Mode属性设置为【wéi】🈵On或者【huò zhě】RemoteOnly,以避免🔟这些详【zhè xiē xiáng】细的错【xì de cuò】🏩误信息【wù xìn xī】🎚暴露了【bào lù le】程序代码细节从而引【cóng ér yǐn】来黑客❌的入侵。
配置如下:
<customErrors mode=" On " defaultRedirect="Error.html"/>
4. 禁用调【jìn yòng diào】试🥊
Web.config中的【zhōng de】<compilation>节点配【jiē diǎn pèi】置🕠 ASP.NET 使用的【shǐ yòng de】所有编译设置【yì shè zhì】🕠。默认的【mò rèn de】debug属性为“true”,即允许【jí yǔn xǔ】调试✨,在开发阶段这😤样配置🕠没有问题。但正式部署上线后,这样会🥄影响支撑接口🚬的性能【de xìng néng】🕗,所以在🔋程序编【chéng xù biān】🥏译完成上线之后应将🔖其设为【qí shè wéi】“false”。
配置如下:
<compilation debug="false" />
5. 连接并发配置【fā pèi zhì】🕙
连接并【lián jiē bìng】发数限【fā shù xiàn】制是指对于同一个【yī gè】🎦ip对同一🐨个【gè】🐂domain发起的😭最大连【zuì dà lián】🖊接数🥡。其实在大多数微软的产品或组件中【zǔ jiàn zhōng】🙏都存在这个【zhè gè】🐂限制【xiàn zhì】,一般这🖤个数值【gè shù zhí】🚌是2/4个【gè】🐂,也就是说在默认情况【rèn qíng kuàng】下,对于同一个【yī gè】🎦ip访问同一个【yī gè】🎦domain同时最😻多有🚰2个【gè】🐂连接处于建【yú jiàn】🎛立状态。默认是2,这个【zhè gè】🐂值太低了【le】。这意味【zhè yì wèi】😇着每一【zhe měi yī】个【gè】🎦IP最多只能有两【néng yǒu liǎng】🌐个【gè】请求📳到你的🏝网站🧡,这样会【zhè yàng huì】造成请求拥堵。asp.net中🙏connectionManagement节点可以设置单个【dān gè】🐂ip对同某个【gè】🐂domain发起的😭最大连【zuì dà lián】🖊接数🥡。
配置如下:
<system.net> <connectionManagement> <add address="*" maxconnection="100" /> </connectionManagement> </system.net>
address代表针🌆对哪个⚽domain,maxconnection代表最大连接【dà lián jiē】数【shù】。
6. 去掉【qù diào】🚔http头信息【tóu xìn xī】中的🏟ASP.NET 版本标头
enableVersonHeader:指定 ASP.NET 是否应【shì fǒu yīng】输出版👈本标头【běn biāo tóu】🔣。使用该属性【gāi shǔ xìng】🈲来确定当前使用🐾的😼 ASP.NET 版本。对于生【duì yú shēng】产环境,该属性【gāi shǔ xìng】🈲不是必【bú shì bì】需的😼,可以禁【kě yǐ jìn】🆓用。
配置示例:
<httpRuntime enableVersionHeader="false" />
关键词【guān jiàn cí】🥀:IIS,asp.net
阅读本文后您有什么感想? 已有 人给出评价!
- 0
- 0
- 0
- 0
- 0
- 0