IIS6.0详解
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章
原始出处 、作者信息和本声明。否则将追究法律责任。
[url]http://simeon.blog.51cto.com/18680/71189[/url]
|
IIS6.0详解
IIS6.0是微软在WEB浏览应用方面里程碑的改进,相比IIS5.1,IIS6.0不仅仅是版本号的差别,更多的是功能上的改进和增强。那么IIS6.0中到底有一些什么新特性呢?本文就IIS6.0中的一些重要特性进行介绍。
(一)改善的IIS安装方式
Microsoft Windows Server 2003家族中的Internet信息服务 (IIS)提供了可用于Intranet、Internet或Extranet上的集成 Web 服务器能力,这种服务器具有可靠性、可伸缩性、安全性以及可管理性的特点,可以使用IIS 6.0为动态网络应用程序创建功能强大的通讯平台。IIS 6.0提供了一些新功能来帮助组织、IT专业人士和Web管理员为单个IIS服务器或多个服务器上可能存在的上千个网站实现高性能、可靠性、可伸缩性和安全性的目标。IIS 6.0只能在Windows Server 2003服务器的数据中心版、企业版、标准版以及Web版这四种版本之中运行,不能在Windows XP、2000或NT上运行。
除了Windows 2003 Web版之外,Windows 2003的其余版本默认不再安装IIS。Windows 2003 Server安装完成后,安装IIS有三种途径:即利用“管理您的服务器”向导、利用控制面板“添加或删除程序”的“添加/删除Windows组件”功能以及执行无人值守安装。
微软在利用“管理您的服务器”向导来安装IIS时较以前有了很大的改观,采用了一种新型的“安装任何部件之前总是征求用户意见”的IIS安装策略,在高度安全和“锁定”模式下安装。说明微软确实在认真对待安全问题;而使用控制面板中的“添加/删除Windows组件”功能比较灵活,可以自行选择组件进行安装。在IIS 6.0中增加了20多个组件,在IIS中取消了文档,所有文档都以帮助文件的形式发布,不再有IISHelp虚拟目录,而且在IIS 6.0网站上必须自己创建该目录。在默认情况下,IIS只为静态内容提供服务,即ASP、ASP.NET、在服务器端的包含文件、WebDAV发布和 FrontPage® Server Extensions 等功能只有在启用时才工作。
(二)增强的服务
微软在IIS 6.0中对大部分模块都进行了重新设计以便利用基本Windows内核HTTP.sys。这使其具有内置的响应和请求缓存和队列功能,并能够将应用程序进程请求直接路由到工作进程,从而改善可靠性和性能。IIS 6.0中提供了POP3服务和POP3服务Web管理器,从而在Windows 2003 Server上可以不用安装Exchange Server,也可以接受和发送邮件。
统一描述、发现和集成协议(Universal Description, Discovery, and Integration,即UDDI)服务是Windows 2003 Server提供的跟IIS有关的又一种新的功能,默认不安装。UDDI是一种产业标准,能够通过广告发布IIS服务器提供的Web服务——这里“广告”一词的含义与日常生活中的广告不同,它是指一种让客户程序(通常是Web浏览器)获知Web服务(通常是ASP.NET应用)各种细节的方式。UDDI仍在发展之中,但一些企业已经在内部采用UDDI,以便开发者将自己的代码发布给其他协作开发的人。最后一种重要的支持服务是后台智能传送服务(Background Intelligent Transfer Service,简称BITS)。BITS是一种后台文件传输机制和队列管理器,也称作节流传输服务。BITS控制文件请求,减少带宽消耗并改善最终用户的体验。针对IIS启用BITS可保证Web服务器的服务质量,如果没有BITS,当100个用户同时下载一个500 MB的文件,服务器的带宽可能就被消耗殆尽,导致其他访问Web服务的用户频繁地遇到超时错误。
(三)全新设计的内核
IIS 4.0和IIS 5.0从体系结构上来看,其内核都是一样的,采用TCP/IP内核,前者应用程序为MTX.exe,后者为DLLhost.exe。它们都是在用户模式下运行的发布Web内容的应用程序,或者在Inetinfo进程之内以System账号运行,或者在Inetinfo进程之外以IWAM用户运行,其体系结构如图1所示。
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
图1 IIS4.X以及IIS5.X体系结构
从IIS 6.0开始,为了使IIS不仅能够轻松地支持1000个Web网站,而且能够支持10000个甚至更多的网站,同时还要提高Web服务器的安全性和可靠性,微软放弃了原有的IIS内核,重新构造了一个内核http.sys内核,其体系结构如图2所示。
图2 IIS6.0体系结构
在IIS 6.0中可以将监听请求、创建和监视Web网站、运行Web服务等不同的任务隔离了开来。新的设计极大地改善可用性、安全和性能;IIS 6.0的内核体系主要建立在W3SVC、http.sys以及W3Core三个组件之上。
(1)W3SVC
W3SVC组件的任务是根据配置数据的设置创建和监视工作线程,由工作线程运行Web网站应用。在IIS 5.0中与IIS6.0中的W3SVC组件最接近的是IIS管理服务,IIS管理服务是Inetinfo的一部分,如果Inetinfo出现问题,IIS管理服务也会出现问题,出现问题后就无法重新启动IIS管理服务。在IIS 6.0中W3SVC作为一个独立的进程运行,Web应用出现问题后不会影响其它服务。W3SVC一直处于运行状态,实时监视Web应用的状况,一旦出现异常情况可根据用户指定的参数监视和重新启动应用程序。
(2)http.sys
Windows Server 2003 家族成员中的超文本传输协议(HTTP)栈以一个名为HTTP.sys 的内核模式设备驱动程序形式来实现,它是网络子系统的一部分。IIS 6.0体系设计中最重大的变化是加入了http.sys驱动程序,http.sys驱动程序的任务是处理HTTP请求,它为 HTTP 服务器应用程序提供高性能的连接性,而且它在内核模式下执行操作。将处理HTTP请求的任务从IIS 5.0、IIS 4.0的用户模式改变到IIS 6.0的内核模式标志着新一代IIS服务器的诞生。
IIS 6.0的https.sys内核模式驱动程序极大地减少了用户模式和内核模式之间的切换次数。http.sys监听着HTTP请求,决定由哪一个用户模式的进程来处理该请求,或者是否由驱动程序本身返回用户请求的内容。另外,微软在http.sys驱动程序中采用了许多优化的算法,使其能够将请求直接转发到适当的工作进程。
(3)W3Core
默认情况下,IIS 6.0在工作进程隔离模式下运行,在这种模式中,对于每一个Web应用,IIS 6.0都用一个独立的w3wp.exe的实例来运行它。w3wp.exe也称为工作进程(Worker Process),或W3Core。 工作进程隔离模式不存在进程内(In-Process)应用程序存在的问题,有效地提高了可靠性和安全性。w3wp.exe的所有实例都在一个权限有限的“网络服务”账号下运行,必要时,还可以将工作进程配置成用其他用户账号运行。如果缓冲区溢出***成功***了一个Web应用,***者只能访问当时运行工作进程的账号有权访问的资源,默认的网络服务账号不能写入Inetpub文件夹,执行权限也极其有限,所以象CodeRed蠕虫之类的***根本不可能得逞。
(四)带宽和连接限制
在IIS 5.0和IIS 4.0中不能直接操作服务器的网卡,虽然可以通过Web网站属性对话框的“性能”来允许启用带宽限制功能,指定允许网站占用的最大带宽,但是这个功能不一定起作用。IIS 6.0启用带宽限制功能后,必须在服务器中安装QoS数据包计划程序,该安装为自动安装,在安装QoS数据包计划程序期间Windows 2003 Server会临时地停止所有网络服务。配置好QoS数据包计划程序后,才能设置带宽限制,通过配置给定站点的网络带宽,可以更好地控制该站点允许的流量。
带宽限制可以是针对所有网站,也可以是针对单个网站的。设置全局WWW服务最大带宽不会替代已为服务器上的单个网站设定的最大带宽。单个站点根据已设置的最大值来限制带宽,而全局设置限制所有其他未限制带宽的网站。另外,全局WWW服务带宽限制设置不会影响FTP站点或FTP服务。
在II6中允许设置的最小带宽限制值是1024 Byte/秒。对于“正常”的负载,服务器使用的带宽不应超过其全部可用带宽的50%。如果服务器有较大的高峰负载,请将正常负载保持在50%以下,剩下的带宽可在高峰期使用。
在IIS6.0中可以将 Internet 信息服务(IIS)配置成允许数目不受限制的并发连接,或限制该网站接收的连接个数。如果连接趋向于波动,则将“网站连接”设置成不受限制。如果为了保证系统性能,可以将站点限定在特定的连接数,网站的并发连接数是衡量网站性能的一个指标。
(五)网站标识与ID
网站标识由 IP 地址、TCP 端口以及主机头名(可选)组成,它使名称与静态 IP 地址相关联从而主控多个站点。将主机名添加到名称解析系统(DNS)中,以便当有请求到达服务器时,IIS使用主机名来确定客户端请求的站点,该主机名在 HTTP 头中传递。
对于IIS服务器来说,唯一标识一个网站的不是网站的名称,而是网站的ID数值。当在IIS 5.0和IIS 4.0中创建一个新网站时,Web服务器将下一个可用的数字顺序号指定给网站,即Web服务器给默认站点指定的数字是1,下一个网站是2,接下来是3、4,等等),这个数字就是网站的唯一ID。如果要访问一个网站的日志文件,首先必须知道该网站的ID,因为日志文件保存在W3SVC<网站的ID编号>目录。如果Web服务器上运行着多个网站,仅仅依靠日志文件的路径名称根本无法判断哪一个日志目录属于哪一个网站,而且在编写管理脚本和修改配置数据文件时,必须知道网站ID。
在IIS 5.0和IIS 4.0中,从IIS管理器无法直接找到网站的ID编号。而IIS 6.0的管理器在网站清单中增加了一个新的“标识符”列,该列的内容就是网站的ID编号。网站的ID是根据网站的名字计算出网站的ID,例如130023491,该网站对应日志文件路径为“W3SVC130023491”。在IIS6中通过修改注册表可以使用原有的网站ID顺序生成方式,也可以禁用IIS 6.0新式的ID生成方式,禁用后顺序生成是在现有的ID基础上开始累加。如要要禁用现有的ID生成方式而改为顺序生成ID方式,其具体的操作步骤是:找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetMgr\Parameters注册子键,创建一个REG_DWORD值“IncrementalSiteIDCreation”,将它设置为十进制“2”。
(六)安全以及安全策略
IIS 6.0默认不安装在Windows 2003 Server服务器中,即使按照缺省方式安装,Web服务器只能提供静态内容服务。除此之外Windows Server 2003还有一个新的组策略“禁止安装IIS”,有了该组策略,可以禁止Windows 2003在活动目录(AD)森林中禁止不准备作Web服务器用的机器上安装IIS 6.0,防止网络上出现根本无用的、不安全的IIS 6.0服务器。 要想在IIS 6.0上运行程序,必须使用IIS 6.0的一种新特性——Web服务扩展(Web Service Extension)。
在Web服务扩展管理中可以看到“所有未知ISAPI扩展”和“所有未知CGI扩展”默认情况下是禁用的,意味着除非明确地允许一个应用在IIS 6.0上运行,否则它就不能运行。如果一个用户请求了某个没有启用的文件,IIS 6.0将向用户返回404错误——文件或目录没有找到,同时在W3SVC日志中记录“404.2文件或目录无法找到:锁定策略禁止该请求”。另外,“systemroot\system32”下有一个iisext.vbs脚本,它也能够配置并管理运行带有IIS 6.0的Windows Server 2003的Web服务扩展、应用程序和单独的文件。管理员可以使用此脚本来启用和列出应用程序;添加和删除应用程序依存关系;启用、禁用和列出 Web 服务扩展;以及添加、删除、启用、禁用和列出单个文件。
另一个安全方面的改进之处是IIS 6.0允许指派一个加密服务提供者(Cryptographic Service Provider,CSP),能够将基于硬件的安全套接字层(SSL)加速器集成到IIS 6.0,从而把加密任务从服务器的通用CPU转移到了专门为加密操作而优化的专用设备,有利于提高性能和可靠性。除此之外在IIS6.0中还有其它一些安全改进:
(1)以具有低级访问权限的账户运行。IIS 工作进程在访问权限极少的用户上下文中运行。这大大减少了潜在***的影响。
(2)提高了ASP运行程序的安全性。所有的ASP内置功能总是以具有极少访问权限的账号IUSR_computername运行。
(3)运行可执行文件的限制。为了运行系统文件夹中的大多数可执行文件(如cmd.exe),必须是Administrators组、LocalSystem、Interactive或Service账号的成员。该限制限制了对 Administrators的远程访问,因此匿名用户无法运行可执行文件。
(4)修补程序管理。对于修补程序管理,管理员可在不中断服务的情况下安装最新的安全修补程序。
(5)IIS 只为对具有已知文件扩展名的文件的请求提供服务。如果请求内容的文件扩展名未映射到已知的扩展,则服务器拒绝请求。
(6)内容的写保护。在默认情况下,拒绝匿名用户(以IUSR_computername账号运行)对 Web 内容进行写入访问。
(7)超时和限制。在IIS 6.0中,默认设置是安全而主动的,这样可最大限度地减少因以前太宽松的超时和限制而造成的***。
(8)上载数据限制,管理员可以限制能上载到服务器的数据。
(9)缓冲区溢出保护,工作进程会检测缓冲区溢出,并在检测到时退出程序。
(10)文件验证,IIS 在将请求发送到请求处理程序(ISAPI 扩展)之前会验证请求的内容是否存在。
(11)脚本资源访问:该权限允许访问 ASP 页脚本和其他脚本的“源代码”,它是新增功能,且在默认情况下被禁用。它可在选择了“读取”或“写入”权限时可用。
(七)异步CGI处理
IIS 5.0和IIS 4.0以同步方式运行CGI(Common Gateway Interface,通用网关接口)进程,这实际上意味着每次只有一个线程能够访问一个CGI进程,所以IIS 5.0和IIS 4.0对CGI支持的可伸缩性不佳。IIS 6.0能够异步运行CGI进程,所以如果一个线程调用了一个CGI应用程序,它不必再等待CGI进程处理完毕和返回信息。异步CGI改善了IIS服务器运行CGI Web应用程序的性能,使得IIS能够运行更多执行关键任务的基于CGI的应用程序。
CGI程序在Web服务器接收到包含CGI程序名和程序所需参数的URL时执行。如果将 CGI 程序编译为可执行 (.exe) 文件,则必须提供包含程序执行权限的目录,以便用户可以运行程序。如果 CGI 程序以脚本形式(例如 Perl 脚本)编写,则既可为目录提供执行权限,也可为其提供脚本权限。要使用脚本权限,必须将脚本解释程序标记为脚本引擎。
在默认情况下IIS_WPG组不具备启动CGI进程的权利。如果创建了新账号并将其添加到 IIS_WPG 组以运行工作进程标识,还必须授予此账号两种启动 CGI 进程的用户权利。这些用户权利是“调整进程的内存配额”和“替换进程级令牌”。 为更加安全起见,Web 服务器不将命令解释程序的特殊字符传递给映射的 CGI 应用程序。默认情况下,“( , ; % < >”字符不能包含在调用 CGI 应用程序的 URL 中。
(八)应用程序池
IIS 6.0只有在工作进程隔离模式下运行时才能使用这个应用程序池功能,应用程序池是将一个或多个应用程序链接到一个或多个工作进程集合的配置。因为应用程序池中的应用程序与其他应用程序被工作进程边界分隔,所以某个应用程序池中的应用程序不会受到其他应用程序池中应用程序所产生的问题的影响。通过创建新的应用程序池以及为其指派网站和应用程序,可以让服务器更加有效、可靠,同时也可以让其他应用程序一直保持可用状态。
在应用程序池的“属性”对话框有“回收”、“性能”、“运行状况”以及“标识”四个标签。在工作进程隔离模式中,IIS可以配置成定期重新启动应用程序池中的工作进程,从而更好地管理那些有错误的工作进程。这确保了池中的应用程序运行正常,并且可以恢复丢失的系统资源。默认情况下,应用程序池每隔1740分钟(29小时)回收一次。W3SVC根据“运行状况”页的选项来判断应用程序池运行是否正常。在默认情况下,当IIS 6.0回收一个池时,它会使用一种称为“overlapped recycle”的回收技术。在这种回收模式下,失败的工作进程仍会保持运行状态,同时创建一个新的工作进程。
(九)配置数据
在IIS 5.0和IIS 4.0中,配置数据库采用二进制文件结构,而在IIS 6.0中的配置数据由Metabase.xml和mbschema.xml这两个XML文件构成。Metabase.xml包含IIS 6.0服务器的配置信息,mbschema.xml包含配置数据的模式定义。按照这种方式保存配置数据时,IIS 6.0利用系统的机器码(Machine Key)加密配置数据的某些部分,因此,配置数据的副本只对创建该副本的机器有用,在IIS管理器还允许保存配置数据副本。在IIS6.0中还可以使用命令行脚本iisback.vbs(在systemroot\System32中)创建和管理远程或本地计算机的IIS配置的备份副本,管理员可以使用此脚本工具创建其IIS配置的备份副本,从备份副本还原IIS配置以及列出和删除备份副本。这样可以先精心配置一个模板,然后用它来创建和配置新的网站,而且在出现问题时,配置信息副本还可以用来恢复网站的设置。
由于IIS 6.0配置信息是可移植的,因此便于升级。IIS 6.0的配置数据是标准的文本文件(XML文件),可以用记事本之类的文本编辑器打开和编辑。如果修改了IIS 5.0或IIS 4.0的配置数据,有时必须重新启动IIS,如果系统上网站的数量很多,可能需要不少时间。IIS 6.0支持一种“运行时允许编辑”功能,这样IIS 6.0几乎立即就能根据配置文件的设置作相应的修改,根本无需重新启动。
在IIS6.0中提供了配置文件历史版本目录,在进行配置/还原时可以很方便的恢复到某个版本的配置。在IIS6.0配置中还提供了对某一个文件打开时直接进行授权——即在IIS管理器中选择一个文件夹右键单击,然后选择“权限”菜单打开文件夹的“安全”对话框。在该对话框中可以设置文件夹的NTFS授权,不必再离开IIS管理器,不但节约时间,而且非常方便。
在IIS6.0中对“目录安全性”页下的“安全通信”允许配置SSL、证书信任列表(CTL)、客户证书。在IIS 5.0和IIS 4.0中,除非在Web网站上安装一个证书,否则不能访问该属性页。IIS 6.0不必在Web服务器上安装证书也可以访问和使用该属性页。
(十)通配符应用程序
在IIS 5.0和IIS 4.0中ISAPI筛选器可以针对所有进入Web服务器或Web网站的请求执行操作的代码。IIS 6.0提供了一种更加灵活的新型机制来提供通常由ISAPI筛选器提供的服务,它就是ISAPI截取器(Interceptor),或者称为通配符应用程序(Wildcard Application)。在 “应用程序配置”对话框中可以将一个或多个ISAPI DLL配置成通配符应用程序,对于每一个接收到的请求,IIS 6.0将调用这里列出的各个通配符应用程序。除了针对所有网站配置通配符应用程序,还可以针对单个网站或在目录层次上配置通配符应用程序。由于这些ISAPI截取器是标准的ISAPI应用程序,它们具有普通ISAPI应用程序具备的所有功能,包括访问消息正文的能力。
通配符应用程序可以做到开发者要做的任何事情,诸如URL定制、验证身份、记录特殊的日志信息、检测***企图、创建内容,等等。通配符应用程序结束处理后,它把请求转交给适当的处理引擎(例如处理ASP页面的asp.dll),由处理引擎进一步处理请求。另外,通配符应用程序还可以通过调用为ISAPI应用程序新增的ExecuteURL功能,将请求传递到同一个应用程序池中的任意页面。
(十一)日志功能
与IIS4.x和IIS5.x相比,IIS 6.0在日志功能方面有许多重大的改进。在IIS 6.0中,记录日志的功能由http.sys实现,http.sys在内核模式下运行。这就加快了日志写入速度,同时避免了多个工作进程争用同一日志文件。当http.sys遇到错误时,不能将日志信息写入Web网站的日志,这时http.sys会把事件写入一个新的日志文件httperr.log。
在排解故障、优化IIS 6.0的过程中,httperr.log日志文件是十分重要的。默认情况下,httperr.log文件保存在system32/logfiles目录。在httperr.log日志文件中可以找到的信息包括:所有的503(服务不可用)错误,空闲连接超时,解析URL时出现的各种错误,最后10个提交给失败的应用程序池的请求。
IIS 6.0提供了“集中的二进制日志记录”,它是多个网站用来向单个日志文件写入不带格式的二进制日志数据的过程。当启用时,运行IIS的Web服务器上的所有网站都将数据写入单个日志文件中,日志文件的扩展名是“.ibl”。对于有大量网站的公司,创建成百上千个带格式的日志文件以及将日志数据写入磁盘中的过程可快速消耗运行 IIS 的服务器上宝贵的 CPU 和存储器资源,从而产生性能和可伸缩性问题。要启用二进制日志功能,只要把配置文件的W3SVCC/CentralBinaryLoggingEnabled条目设置成ture(1)即可。微软的Log Parser 2.0工具能够读取二进制日志文件并生成报告,它还能够读取前面介绍的httperr.log文件并生成报告。
IIS 5.0和IIS 4.0的IIS管理器允许在指定日志文件路径的时候输入一个远程服务器的通用命名规范(UNC)的路径,但Web服务器实际上不会把日志保存到远程服务器。IIS 6.0可以通过网络,使用完整的通用命名约定 (UNC) 路径将日志数据写入到远程共享上。
(十二)默认设置的变化
在IIS 6.0中许多配置项目的默认值已经与IIS 5.0或IIS 4.0的不同。
(1)默认的连接超时时间已经从900秒减少到120秒。
(2)EnableParentPaths设置默认关闭。
(3)如果某种文件类型没有在MimeMap配置属性中映射,所有对该类文件的请求将被拒绝。
(4) 默认情况下,所有工作进程会在1740分钟后自动回收,回收期间会话信息可能丢失。
(5)运行CGI应用程序的用户上下文必须是一个IIS_WPG组的成员。
(6)Windows 2003不安装Collaboration Data Objects for Windows NT Server(CDONTS)。
(7)ASP请求默认限制在204800字节之下,每一个域限制在100 KB之下。
(8)默认情况下,http.sys仅接受标题小于16 KB的请求。
(9)在新安装的 IIS 6.0 中的子验证,在默认情况下不再启用。
本文从十二个方面介绍了IIS6.0的一些新功能和特性,IIS6.0的体系结构设计以及功能提升等方面具有突破性意义,与IIS4.0、IIS5.0相比是一个里程碑,在IIS6.0中还有很多实用的功能和新特性,读者朋友可以亲自去体验IIS6.0。
本文出自 “
simeon的技术专栏” 博客,请务必保留此出处
[url]http://simeon.blog.51cto.com/18680/71189[/url]
本文出自 51CTO.COM技术博客
|
转载于:https://blog.51cto.com/290083365/96023