Jul 172007
 

IIS7是伴随着新一代Windows Server操作系统发布的新的WebServer。从目前为止其特点来看,这一代相比IIS6应该会有一个质的飞跃,因此从Windows Server Codename “Longhorn”开始的每个公开预览版本,IIS都是我最感兴趣的。

Beta3发布之后,微软IIS开发团队的Bill Staples大牛在IIS blog上撰文写了关于IIS7在beta3之后加入的几个新特性。在此大体介绍一下这篇文章并意译一下,然后掺杂点自己对于新版本试用中的几点看法,希望有更多的人来关注和使用IIS7。

原文链接如下:http://blogs.iis.net/bills/archive/2007/04/25/what-s-new-in-iis7-beta-3.aspx

Shared Configuration 

Shared Configuration这个特性简单来说,就是将IIS7的全局配置文件放置在一个非本地的共享环境,这样可以使多个IIS Server共享此配置文件,因此只要对配置文件做更改,其相关的所有Server即会得知配置变动并做好响应。对于这个共享的配置文件,可以通过常规的方式进行管理,例如IIS Manager,例如脚本,例如新增的appcmd命令行。通过这样的一个机制,就可以实现一个WebServer Farm的集中式管理。

共享配置howto:http://www.iis.net/articles/view.aspx/Use-IIS7-Administration-Tools/Using-XML-Configuration/Centralized-Configuration?tabid=1

个人观点:这个机制在所有WebServer产品中应该算头一次引入吧,对于大型WebServer集群的管理是方便了很多。设想在一个数据中心,有数十台集群服务器,其运行的业务都是一样的,我们可以将全局配置文件放在一个UNC共享中,这样只要对配置文件做了更改,所有服务器同时生效,确实是个很棒的机制。

Automatic Application Pool Isolation

IIS6引入了应用程序池机制,这玩艺虽先进,然而并没有想象中得那么好用,IIS7进一步增强了应用程序池机制。首先是新建站点的时候,默认行为变成会同时建立一个与站点名字相同的应用程序池。然后会向NetworkService用户(默认应用程序池的运行帐户)注入一个特殊的SID,这个SID解析的名字为前面建立的站点名或应用程序池名。同时建立一个特殊的AppPool.config配置文件,这个文件设置为仅有此SID可以访问。这样的行为意味着默认建立起来的应用程序池即和其他的应用程序池实现了很好的配置隔离以及运行时安全隔离,现在可以通过针对一些用户级别的ACL方便地实现沙箱式的应用程序或站点隔离。

个人观点:看来IIS Team也知道IIS6中应用程序池这个半成品挺让人苦恼的。在IIS6中要实现运行用户身份隔离,光给每个站点设定不同的anonymous user的话,仅仅是使用了User Impersonation机制的动态脚本才可以实现不同用户身份隔离执行,例如ASP。而其他非Impersonation到访问站点用户身份的脚本语言,例如ASP.net,例如PHP,例如CGI等等,都会以WorkProcess启动者身份执行,并以此安全上下文进行脚本的解释,这样得话又需要将应用程序池分站点建立,而且每个池的runner还需要区分开来才行,真是个痛苦的过程。我估计到现在还有N多admin没搞懂IIS6的权限模型:-) IIS7这个改进,使得w3wp进程内脚本引擎的执行线程即使不使用Impersonation,也会创建一个与池相关的特殊SID,并将程序运行在此SID下,因此即便是所有池都是network service帐号在跑,其也能实现较好的安全隔离了。但这里大牛解释得并不是很详细,有很多细节还未了解,我动用了Process Explorer检查了w3wp,发现确实有一个名称为应用程序池名字的SID,对于整个w3wp full control。但是如果针对此SID进行文件系统ACL隔离却没有办法,同时如果一个池run多个站点的application的话,貌似也还是只有1个SID,这样就隔离不了了。这里的疑问在于:这个SID是根据Pool产生还是Pool中的Application产生?要怎样针对这个SID应用我们所需要的更细致的ACL?看来只能等更详细的资料了。

Delegated, Remote Administration

IIS7 细化了站点管理权限,并实现了远程管理功能。因此Web Server管理员可以建立站点级别或服务器级别等各种级别的administrator,并将一部分权限委派这些administrator。这些administrator可以通过HTTP/SSL方式连接到Web Server进行管理工作。他们同样可以使用IIS Manager进行远程管理。

IIS7远程管理客户端程序下载地址:http://www.iis.net/downloads/default.aspx?tabid=34&g=6&i=1456

远程管理howto:http://www.iis.net/articles/view.aspx/Managing-IIS7/Delegation-in-IIS7/Enable-Remote-HTTP-Connections/Remote-Administration-for-IIS-Manager?tabid=1

委派管理howto:http://www.iis.net/articles/view.aspx/Managing-IIS7/Delegation-in-IIS7/Enable-Remote-HTTP-Connections/Remote-Administration-for-IIS-Manager?tabid=1

 

Built-in FastCGI support for PHP and other dynamic languages

之前IIS Team曾为了优化PHP的性能和稳定性,设计了FastCGI的IIS模块,在Beta3这个版本,IIS7将FastCGI支持作为官方内嵌支持模块。此特性也将会出现在Vista SP1的IIS7中。此模块将和传统CGI模块一起作为CGI组件放入IIS组件管理器。这将使得PHP之类的CGI程序得到性能的飞跃,同时会避免ISAPI等带来的一些问题。

个人观点:FastCGI可谓一个古董级协议了,在WebServer的发展史中,这玩艺一直是个边缘协议,从最早期的CGI流行,到中期CGI性能问题导致的SAPI与FastCGI并存,再到后来的SAPI成为主流,FastCGI一直处于一个半死不活的状态。然而却没人能看轻其性能。直到近几年,对于WebServer应用的多样化,导致SAPI模型的架构性局限越来越多得显现出来。再加上Zeus,Lighttpd这几个性能卓越的httpd都不约而同得选择了FastCGI作为其扩展后端,以及这些httpd在PHP性能的优越表现,还有Ruby等小弟的崛起,使得FastCGI似乎有复兴的趋势。此次IIS7正式集成FastCGI支持也可谓顺应民心了。个人认为,此特性非常值得期待。

Modern FTP Publishing!

此次的Release还包含了一个单独的FTP Server组件,这个组件目前还不属于Longhorn beta3,但其重大特性更新将使其成为非常引人注目的一个组件。新特性包括了基于SSL的安全FTP发布功能,集成的Web 发布以及IIS配置能力,以及使用IIS管理工具的集成管理机制,集成的验证机制(可以使用和IIS7Web站点相同的管理凭据,这样管理IIS和管理FTP可以使用同一帐户委派完成!)另外还有令人激动的主机头支持等等等等。

这个组件需要单独下载安装:http://www.iis.net/downloads/default.aspx?tabid=34&g=6&i=1454

个人观点:自从IIS出现以来,其FTP几乎都是作为花瓶被人无视了,现在FTP Server独立出来了,然而其变得更为强大了。按照大牛所说的特性,这个FTP Server将会成为配合IIS的不二之选。

And More

还有一些也同样令人激动的新特性,例如:

  • IIS7的管理器现在已经功能近乎完善了,包含日至,缓存,压缩等新特性也都可以直接通过其管理了。现在管理器还有新的欢迎页面,最近连接,以及IIS新闻等花哨玩艺。

  • AHadmin API可以支持通过DCOM的远程管理了。Microsoft.Web.Administration API 同样也可以实现透明的远程管理

  • 通过http.sys实现,IIS7 现在可以对动态脚本的输出进行缓存了,这将带来可观的性能提升这里有一片通过输出缓存实现难以置信的PHP性能的案例:http://blogs.iis.net/bills/archive/2006/10/31/PHP-on-IIS.aspx

  • IIS7现在可以通过配置文件实现简单的基于url的认证机制,可以用来代替老的NTFS验证机制。 

  •  

    后面关于Golive和其他不重要的信息就不详细翻译了:-)

      One Response to “IIS7新特性–写于beta3 release之后”

    1. Programming Tutorials…

      I couldn’t understand some parts of this article, but it sounds interesting…

     Leave a Reply

    You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>