IIS的性能优化.docx
- 文档编号:8229445
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:26
- 大小:257.90KB
IIS的性能优化.docx
《IIS的性能优化.docx》由会员分享,可在线阅读,更多相关《IIS的性能优化.docx(26页珍藏版)》请在冰豆网上搜索。
IIS的性能优化
IIS的性能优化
管理互联网信息服务器(InternetInformationServer,IIS)的人们都知道,IIS是一个既简单又麻烦的家伙。
简单的是安装它几乎不需要费什么脑筋,选择一下路径,然后一路按“下一步”就可以完成;配置也比较简单,只要有一定的NT和网络知识,照着说明书就可以架设一个像模像样的Web站点出来。
然而管理IIS却没有想像的那样简单。
使用一段时间以后,管理员往往会遇上服务器性能不良的情况。
这时候,IIS的性能优化,就提上日程了。
导致IIS服务性能不良的原因有两个方面。
一个是人为的,也就是说管理员在安装、配置IIS的时候没有进行优化或者配置错误。
另一个则是客观上的,随着运行的服务种类,以及访问人数的增加,服务器原有的硬件配置已不能满足要求了,这就需要提高硬件配置。
在服务器配置上优化IIS性能
1.IIS高速缓存是对IIS进行优化时要考虑的最重要的项目之一。
服务器保留了一部分内存空间用作IIS高速缓存,为将来的请求存储对象,这样IIS就可从高速缓存中检索对象而不用从硬盘中检索。
调整IIS高速缓存的容量需要修改注册表,表项如下:
\HKEY_LOCAL_MACHINE
\System
\CurrentControlSet
\Services
\InetInfo
\Parameters
\MemoryCacheSize
MemoryCacheSize的范围是从0道4GB,缺省值为3072000(3MB)。
IIS通过高速缓存系统句柄、目录列表以及其他常用数据的值来提高系统的性能。
这个参数指明了分配给高速缓存的内存大小。
如果该值为0,那就意味着“不进行任何高速缓存”。
在这种情况下系统的性能可能会降低。
如果你的服务器网络通讯繁忙,并且有足够的内存空间,可以考虑增大该值。
必须注意的是修改注册表后,需要重新启动才能使新值生效。
2.使IIS使用处理器时间最长。
服务器的CPU处理器能力总是有限的。
哪一个应用程序占用处理器的时间最长,谁的性能就能得到最大的提高。
(1)在NT的控制面板中,双击系统图标。
(2)单击性能标签。
(3)在应用程序性能下将游标拖到None的位置,这样就可以使所有正在运行的服务,包括IIS,使用处理器的时间达到最大值。
3.服务器属性设置。
在服务器属性里有一项可以使网络应用程序的总处理能力最大的选项,你当然应该选择它。
(1)在桌面上右键单击网络邻居图标,然后选择属性选项。
(2)单击“服务标签”。
(3)单击“服务器”,然后按“属性”。
(4)选择最大化网络应用程序的总处理能力。
然后单击“OK。
”
提高硬件配置来优化IIS性能
当进行了上述的优化配置,IIS的性能仍然没有什么明显改善的话,也许你应该考虑提高服务器配置了。
然而事关银子问题,老板们一定不会轻易同意,除非你用事实说服他。
你必须在首先提高什么硬件配置上面考虑清楚。
以下是在进行IIS优化时需要考虑的有关硬件:
处理器:
可以升级为速度更快的CPU,还可以再增加一个CPU。
但是代价太高了(也许会换主板什么的),老板很难接受。
硬盘:
硬盘空间被NT和IIS服务以如下两种方式使用:
一种是简单地存储数据;另一种是作为虚拟内存使用。
如果使用Ultra2的SCSI硬盘,可以显著提高IIS的性能。
网络接口卡:
如果服务器是在企业内部网上运行,那么可以考虑将他的网卡升级为100M网卡。
这在网络带宽是瓶颈的情况下特别有效。
内存:
增加内存可能是升级系统最简单、最有效的方法。
也是笔者推荐的硬件升级首选方案。
那么如何知道需要进行硬件上的升级呢?
这就和性能监视器的使用有关了。
笔者会在其他文章中描述。
在这里作简要介绍:
比如你可以利用性能监视器来跟踪服务器上的CPU使用程度。
并可以查看由内存调换到硬盘中的页面的数目和频率。
将这些信息与内存使用情况以及其他系统信息相结合,就可以得到一张系统性能报告表。
如果这些信息一直表现出很高的使用率,那么就说明应该升级硬件设备了。
优化IIS的注意事项
为了避免以后的头疼,在安装IIS之时就应该注意到IIS的优化。
比如:
1.为了提高性能和节约资源,应该只运行需要的协议。
这一点很多管理员都没有注意,笔者曾见到在一台只作Web服务的机器上同时安装有NetBEUI、Tcp/IP和IPX协议。
显然这是不合理的。
2.应该将IIS服务器,设置为独立的服务器,不要让服务器去承受域控制器要求的额外负荷。
试想:
服务器一边在响应用户的登录,一边还要提供IIS服务,性能能不下降吗?
3.可以把NT服务器的页交换文件分布到多个物理磁盘上,注意是多个“物理磁盘”,分布在多个分区上是无效的。
另外,不要将页交换文件放在与WIndowsNT引导区相同的分区中。
4.使用磁盘镜像或磁盘带区集可以提高磁盘的读取性能。
5.关于日志的记录,应该采用文件记录而不是记录到ODBC数据源。
此外,还可以在记录期间增加用来记录日志的内存缓冲区的容量来减少磁盘的活动。
该缓冲区的缺省容量值为64KB。
6.最好把所有的数据都储存在一个单独的分区里。
然后定期运行磁盘碎片整理程序以保证在存储Web服务器数据的分区中没有碎片。
使用NTFS有助于减少碎片。
笔者推荐使用Norton的Speeddisk,可以很快地整理NTFS分区。
7.虽然SSL可以提供相当可靠的加密传输。
但是所需的额外开销会导致IIS服务器速度下降,尤其是在处理大型文件的时候。
所以应该只对确实需要保护的目录进行SSL加密。
IIS的性能优化
关键词:
IIS 性能优化
微软的IIS是目前最快的WEBSERVER,但如果要让IIS承受高负载,还必须对IIS进行很多设置,举几个比较常用的:
1.在Windows2000Server中,把IIS中将WEB站点的性能调整设置为最大,在一定程度上可避免由于同时访问人数太多而服务死掉的现象。
方法:
进入Internet服务管理器,在维站点上点右键—属性—性能,将性能调整设置为最大,如下图所示。
2.修改注册表,突破IIS极限线程256限制。
IIS默认的支持最大线程数是256,我们可以通过修改注册表来加大这个线程数。
方法:
在注册表中找到下面分支[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\InetInfo\Parameters]在其中新建一个双字节值,命名为“PoolThreadLimit”,键值为十进制“500”或“1000”。
如下图所示。
3.对多站点服务器设置所在站点主目录的应用程序保护为“高(独立的)”,可防止内存冲突。
如下图所示。
3、禁用不必要的服务开始-运行-services.msc
TCP/IPNetBIOSHelper提供TCP/IP服务上的NetBIOS和网络上客户端的NetBIOS名称解析的支持而使用户能够共享
文件、打印和登录到网络
Server支持此计算机通过网络的文件、打印、和命名管道共享
ComputerBrowser维护网络上计算机的最新列表以及提供这个列表
Taskscheduler允许程序在指定时间运行
Messenger传输客户端和服务器之间的NETSEND和警报器服务消息
DistributedFileSystem:
局域网管理共享文件,不需要可禁用
Distributedlinktrackingclient:
用于局域网更新连接信息,不需要可禁用
Errorreportingservice:
禁止发送错误报告
MicrosoftSerch:
提供快速的单词搜索,不需要可禁用
NTLMSecuritysupportprovide:
telnet服务和MicrosoftSerch用的,不需要可禁用
PrintSpooler:
如果没有打印机可禁用
RemoteRegistry:
禁止远程修改注册表
RemoteDesktopHelpSessionManager:
禁止远程协助
Workstation关闭的话远程NET命令列不出用户组
以上是在WindowsServer2003系统上面默认启动的服务中禁用的,默认禁用的服务如没特别需要的话不要启动。
iis内存占用过大的问题
在IIS6下,经常出现w3wp的内存占用不能及时释放,从而导致服务器响应速度很慢。
今天研究了一下,可以做以下配置:
1、在IIS中对每个网站进行单独的应用程序池配置。
即互相之间不影响。
2、设置应用程序池的回收时间,默认为1720小时,可以根据情况修改。
同时,设置同时运行的w3wp进程数目为1。
再设置当内存或者cpu占用超过多少,就自动回收内存
一般来说,这样就可以解决了。
但仍然会出现个别网站因为程序问题,不能正确释放。
那么,怎么样才能找到是哪一个网站的?
1、在任务管理器中增加显示pid字段。
就可以看到占用内存或者cpu最高的进程pid
2、在命令提示符下运行iisapp-a。
注意,第一次运行,会提示没有js支持,点击确定。
然后再次运行就可以了。
这样就可以看到pid对应的应用程序池
3、到iis中察看该应用程序池对应的网站,就ok了解决iis内存占用过大的问题
突破iis6.0上传文件的200kb限制
在windows2003中的iis6.0,预设置的文档上传最大大小是200kb,在上传超出该限制的文件时,会产生失败信息.
解決的方法如下:
用文本编辑器
打开C:
\windows\sytem32\inetserv\metabase.xml
找到字符串 AspMaxRequestEntityAllowed 表示请求的最大字节
204800(200KB)改成你要的大小
在某些下载方式中,可能也会有大小超出的情况,
可以修改同一文件的AspBufferingLimit,
预设的是4MB
突破iis6.0上传文件的200kb限制
IIS设置远程分析
远程确定目录权限
让我们打开一个IIS服务器来看看。
在IIS服务管理器中,选择一个目录,看他的属性
在目录属性项有有这么一些选项(日志访问和索引此资源不计):
脚本资源访问:
对网站的脚本可以读取原文件。
读取 读取目录里面的静态资源。
写入 用户可以建立以及删除资源
目录浏览 用户可以浏览目录内容。
应用程序设置的执行许可中有三个选项:
无 只能访问静态页面
纯脚本 只允许允许脚本 如ASP脚本
脚本和可执行程序 可以访问和执行各种文件类型
那么,如何确定服务器上面的这些开关设置呢?
别着急,一个一个来。
执行权限
如何确定某个目录是否开了执行权限呢?
很简单,向服务器发送一个下面得请求:
http:
//iis-server/dir/no-such-file.dll
/dir/为要判断得目录,no-such-file.dll是随便取得一个名字,服务器上面没有这个文件。
服务器对我们得请求会返回一个信息。
如果返回的是一个500错误:
HTTP500-内部服务器错误(InternalServererror)
那么就说明这个目录的执行权限是开着的。
对于服务器,能不开执行权限的就不要开。
特别是虚拟目录的执行权限,大家想一想UNICODE和二次解码漏洞的利用过程就明白了。
如果服务器返回的是一个404错误:
HTTP404-未找到文件
那么就说明这个目录的执行权限没有开。
写权限
测试一个目录对于web用户是否具有写权限,采用如下方法:
telnet到服务器的web端口(80)并发送一个如下请求:
PUT/dir/my_file.txtHTTP/1.1
Host:
iis-server
Content-Length:
10
这时服务器会返回一个100(继续)的信息:
HTTP/1.1100Continue
Server:
Microsoft-IIS/5.0
Date:
Thu,28Feb200215:
56:
00GMT
接着,我们输入10个字母:
AAAAAAAAAA
送出这个请求后,看服务器的返回信息,如果是一个201Created响应:
HTTP/1.1201Created
Server:
Microsoft-IIS/5.0
Date:
Thu,28Feb200215:
56:
08GMT
Location:
http:
//iis-server/dir/my_file.txt
Content-Length:
0
Allow:
OPTIONS,TRACE,GET,HEAD,DELETE,PUT,COPY,MOVE,PROPFIND,
PROPPATCH,SEARCH,LOCK,UNLOCK
那么就说明这个目录的写权限是开着的,反之,如果返回的是一个403错误,那么写权限就是
没有开起来,如果需要你认证,并且返回一个401(权限禁止)的响应的话,说明是开了写权限,但是匿名用户不允许。
如果一个目录同时开了”写”和“脚本和可执行程序”的话,那么web用户就可以上传一个程序并且执行它,恐怖哦%^#$!
~
纯脚本执行权限
这样的目录就太多了。
很多不需要给执行权限的目录也被管理员给了脚本执行权限,我记得在
shotgun的一篇文章里面他说过:
最小的权限+最少的服务=最大的安全;一点也没有错。
给目录任何多余的权限都是没有必要的。
判断一个目录是否可以执行纯脚本文件也很简单,发送一个如下一个请求:
http:
//iis-server/dir/no-such-file.asp
返回404文件不存在说明有执行权限,返回403则是没有开。
浏览目录权限
判断一个目录是否允许浏览可能需要一点点小技巧,但是,在网站的默认首页(如:
default.asp)不存在的话,那么就再简单不过了。
在浏览器里面输入:
http:
//iis-server/dir/
如果权限开着的,那么会返回200响应,并且列出当前目录里面的内容,反之,没有列出目录的话就是关了。
但是,如果默认页面default.asp存在呢?
敲入上面的地址就直接打开这个页面了。
别急,
WebDAV里面有一个请求方法叫:
PROFIND。
这个方法使得我们可以从服务器资源里面得到一些如文件名,创建时间,最后修改时间等等的信息。
利用它我们也可以绕过default.asp来判断目录浏览权限的情况,telnet到IIS-server的web端口,发送如下请求:
PROPFIND/dir/HTTP/1.1
Host:
iis-server
Content-Length:
0
这时,服务器会送回一个207MultiStatus的响应,如果目录是允许浏览的,那么同时会列出目录里面的资源以及他们的属性。
如果目录浏览不允许,返回的信息就会少的多。
目录浏览一般来说只能算是一个低危险等级的漏洞,比如一个images目录,里面除了图片没有别的东西了,那对于服务器的安全就没有什么危害,但是,如果目录里面放了一个管理页面adminpage.asp或者一些数据库连接信息文件,可能会导致你的服务器拱手相让给入侵者。
读权限
判断这点很容易,发一个带txt文件的请求就可以:
http:
//iis-server/dir/no-such-file.txt
如果返回一个404文件不存在的响应,就说明读权限是开着的,反正,返回403错误则说明都权限没有开。
早几年接触安全的人一定知道:
:
$DATA泄露ASP源代码的漏洞,其实如果一个目录里面权势asp脚本的话,那么读权限也可以不用开的,ASP只需要脚本执行权限就可以了。
IIS认证方法的判断
这个漏洞是最近才公布出来的,IIS服务器支持匿名访问,基本认证和使用NTLM方式的windows集成认证,如果客户端发送一个包含认证信息的请求,IIS就会强行的尝试用这些认证信息取认证,并且放回不会的响应。
这样我们就能够确定IIS的认证的配置。
要确定IIS是否支持基本认证,可以telnet到服务器的80端口,发送如下请求:
GET/HTTP/1.1
Host:
iis-server
Authorization:
Basicc3lzdGVtOm1hbmFnZXIA
这是一个基本认证的请求,里面包含了一个base64编码的用户ID和PASS,Basic后面那串字符经过base64解码以后就是system:
manager。
如果服务器返回一个401信息,则说明基本认证选项是开着的。
如果返回200信息,则有2种可能,基本认证选项没有开或者是服务器存在一个用户名是
system的用户名,并且密码是manager(猜中的话,行大运啦)。
要确定NTLM选项是否开启则可以向IIS发送如下请求
GET/HTTP/1.1
Host:
iis-server
Authorization:
NegotiateTlRMTVNTUAABAAAAB4IAoAAAAAAAAAAAAAAAAAAAAAA=
同样,如果返回401消息,则说明支持NTLM,返回200说明不NTLM认证选项没有开启。
对于大多数网站来说,这两种认证方式都是不需要开起的来,他们有可能泄露一些服务器的重要信息。
泄露内部IP地址信息
如果IIS服务器在一个使用NAT的防火墙里面的话,通常都有个内部地址如10.x.x.x。
如果IIS开启了基本认证选项,那么发送如下一个简单的请求就可以得到服务器的内部IP:
GET/HTTP/1.1
Host:
Authorization:
Basicc3lzdGVtOm1hbmFnZXIA
服务器将返回一个如下响应:
HTTP/1.1401AccessDenied
Server:
Microsoft-IIS/5.0
Date:
Fri,01Mar200215:
45:
32GMT
WWW-Authenticate:
Basicrealm="10.1.1.2"
Connection:
close
Content-Length:
3245
Content-Type:
text/html
那个10.1.1.2就是机器的内部ip地址,本来realm的值是客户端提供给的一个主机头,但这里它是空的,所以IIS就选择了本机的IP地址来代替。
同样的,利用PROPFIND,WRITE,MKCOL等请求的返回信息,也能泄露主机的一些信息,如我们向服务器提请下面这样一个请求:
PROPFIND/HTTP/1.1
Host:
Content-Length:
0
在IIS配置成使用主机名(见后)的情况下,则不会暴露主机的IP地址,但是会暴露NetBIOS名。
事实上我们可以利用IIS的认证获得更多的信息,如所在域的名字,方法是向服务器发送如下带NTLM认证的请求:
GET/HTTP/1.1
Host:
iis-server
Authorization:
NegotiateTlRMTVNTUAABAAAAB4IAoAAAAAAAAAAAAAAAAAAAAAA
服务器会返回一个信息:
HTTP/1.1401AccessDenied
Server:
Microsoft-IIS/5.0
Date:
Fri,01Mar200216:
24:
58GMT
WWW-Authenticate:
NegotiateTlRMTVNTUAACAAAADAAMADAAAAAFgoKgeGvyVuvy67U
AAAAAAAAAAEQARAA8AAAAUwBDAFkATABMAEEAAgAMAFMAQwBZAEwATABBAAEA
DABTAEMAWQBMAEwAQQAEAAwAUwBDAFkATABMAEEAAwAMAFMAQwBZAEwATABB
AAAAAAA=
Content-Length:
3245
Content-Type:
text/html
那一长串字符就包含了主机名和NT所在域的名字的base64编码。
临时解决方法:
在cmd下进入c:
\inetpub\adminscripts或者是adminiscript所在目录执行一下命令
adsutilsetw3svc/UseHostNameTrue
netstopiisadmin/y
netstartw3svc
默认应用程序映射判断
判断默认映射是否存在比较简单,这里只简单的给出了在映射存在的情况下对于相应请求的响应:
扩展名:
.printer
请求:
http:
//iis-server/foo.printer
响应:
HTTP500-内部服务器错误
扩展名:
.idc
请求:
http:
//iis-server/foo.idc
响应:
code500InternalServerError
扩展名:
.idq
请求:
http:
//iis-server/foo.idq
响应码:
200OK
响应:
找不到IDQ文件D:
\dir\\foo.idq
扩展名:
.ida
请求:
http:
//iis-server/foo.ida
响应码:
200OK
响应:
找不到IDQ文件D:
\dir\foo.ida
扩展名:
.htr
请求:
http:
//iis-server/foo.htr
响应:
HTTP404-未找到文件
扩展名:
.htw
请求:
http:
//iis-server/foo.htw
响应码:
200OK
响应:
QUERY_STRING的格式无效
扩展名:
.stm
请求:
http:
//iis-server/foo.stm
响应:
HTTP404-未找到文件
扩展名:
.shtm
请求:
http:
//iis-server/foo.shtm
响应:
HTTP404-未找到文件
扩展名:
.shtml
请求:
http:
//iis-server/foo.ida
响应:
HTTP404-未找到文件
判断操作系统是否为个人版本(Professional/Workstation)
IIS安装在windows2000专业版和NTworkstation上面时候,同时进行的连接数最大为10个,利用这一点我们可以简单判断操作系统版本:
创建10个HTTP1.1的持续连接,第11个连接请求将放回403错误信息。
后话:
由于各种原因,我所在的公司关门大吉了,没有工作,心就乱糟糟的,所以翻译的时候也是砍头去尾的,大家不要骂我,我拿去黑客防线骗稿费的啦。
如果有不明白的地方可
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- IIS 性能 优化
![提示](https://static.bdocx.com/images/bang_tan.gif)