(IIS问题专家Brett Hill提供了这些答案)
1. 我怎样对IIS设置进行备份?
2. 什么工具能帮助我施加一个负载并进行应用程序的强度测试?
3. 当Localstart.asp返回了一个“正在创建中”响应时,发生了什么事情?
4. 能在Microsoft Windows XP Home Edition中安装IIS或PWS吗?
5. ISAPI筛选器能在一个单独的进程空间中运行吗?
6. 我在哪能获得这样的示例代码--它显示了如何在使用WebDAV的ASP中编辑文档?
7. 当我试图用ASP去访问一个数据库时,我得到了一个“拒绝访问”的回应,这是什么原因?
8. 如何在没有恢复原始设置的情况下运行IIS锁定工具?
9. 在我的intranet环境中,如何处理“server-side include”语法,而不必重新命名所有的文件?
10. 在Windows 2000 Professional中,我怎样做才能让域用户来管理虚拟目录,以便域用户能够创建和管理他们自己的虚拟目录?
问: 我怎样对IIS设置进行备份?
答: 有多种方法可以用来完成此项工作。在Internet信息服务管理器控制台(IIS插件)中所设置的属性和值都被储存在Metabase.bin文件中,缺省情况下,这个文件位于“C:\winnt\system32\inetsrv”目录中。在IIS 5.0中,你可以从内置的IIS插件中来备份元数据。如果需要进行此工作,请选择桌面上的计算机图标然后单击右健。然后再选择 “备份/恢复配置”。然后你就可以选择备份现有元数据设置或者恢复以前的版本。与此相同的选项在MetaEdit 2.2中也可找到。
当你以这种方式保存了元数据时,你的备份将以.md0文件的格式储存在C:\winnt\system32\instrv\metaback文件夹中。当你执行备份时,文件将使用你所指定的名称,如Pre-Lockdown.md0。如果你使用相同的文件名创建了多个备份,他们将使用数字逐渐递增的扩展名,如Backup.md0,Backup.md1等等。
在你的元数据严重损坏的情况下,你将不能启动IIS。此时,你也不能从IIS插件或metaedit中执行恢复操作。如果真的发生了类似情况,你就可以通过从备份文件夹中选用最合适的.md0(.md1等等)元数据备份文件来替换Metabase.bin。如果你的备份文件没有错误,IIS将会立刻启动。
制作元数据的备份还有其它两个意义。你可以使用xcopy,scopy或其它复制程序来简单地复制Metabase.bin文件。你应该先停止Internet服务,以保证你的元数据是最新的并且不在使用状态中。
最后,我们还提供了两个脚本--metaback.vbs和metarest.vbs--它们位于Inetpub/IISSamples/sdk/admin(如果你在IIS 5.0上安装了IIS SDK)文件夹中或在IIS Resource Kit/Utility/ADSI Admin Scripts文件夹(如果你安装了IIS 4.0 Resource Kit)中。这些.vbs脚本使用了一个ADSI命令,它是专门为创建元数据备份而提供的。
问: 什么工具能帮助我施加一个负载并进行应用程序的强度测试?
答: 有许多工具可以用来实现这个目的。而且有一些功能完备并且十分有用的你将会发现有相当多的可利用的商业工具可供您利用被完全装备了,并且这些工具是有很用的。Microsoft提供了Web Application Stress Tool,在大多数情况下,对于装载在Web服务器上施加负载来说,并检查它在一定压力下是否能够正常工作这一目的当进行应用程序强度测试时,查看它们的执行情况,这个工具是足够用的。预先执行测试是一个好主意,因为在应用程序的设计过程中,问题并不会显现出来,除非在这个服务器上施加一定负载被加载了--而且在一个产品成品服务器上你肯定不希望发现任何问题。
Web Application Stress Tool有几个有用的特性,它可以将您包括当你在通过Web站点中进行的指向并和点击操作记录为一个可重新回放的脚本路线时记录重放脚本的能力。然后当你远程监视服务器上的性能监视计数器时,就能同步地在一个或多个客户端上重新播放这个脚本。另外,你还能指定详细资料,如用于测试验证身份验证吞吐量所使用的用户账号,以及显示请求和测试计划日程之间的延迟。
当你在你安装了Web Application Stress Tool的时时候,它还在计算机上安装了一个服务,叫名为做“WebTool”的服务。如果你确信当不再需要这个工具时,您可以卸载Web Application Stress Tool。
问: 当Localstart.asp返回了一个“正在创建中”响应时,发生了什么事情?
答: 这个“正在创建中”页面应该出现在从一个远程的IP地址对默认的Web站点进行访问的时候。如果你从一个内部的IP地址访问,IIS在线文档就会被显示。如果你在Internet Explorer中访问http://localhost,并且未安装Default.htm或Default.asp,则Web站点将会运行IISStart.asp。IISStart.asp将检查下面两个条件:
你是否已经敲入输入了“localhost”。
客户端的IP地址是否与服务器端IP地址相匹配。
在任一种情况下,你都将会被重定向到Localstart.asp,然后打开所需要的页面。
确定这些文件在你的系统上是存在的,并且在“文档”选项卡标签中调用的是IISStart.asp。为了确定这些,你可以尝试写一段简短的.asp网页,来显示服务器变量的值,如下:
Your local IP address is 207.46.249.190
The client IP address is 210.82.106.28
如果IP地址没有被识别,则可能是因为Localstart.asp页未被调用。当然,你总是可以通过直接使用http://localhost/localstart.asp来调用它。如果没有配置默认文档,在直接调用Localstart.asp时就可能出现问题。脚本将返回下述消息:
目前当前,你没有为用户设置一个默认文档。当前所有试图连接到这个站点的用户都将收到一个“正在创建中”的页面。
问: 能在Microsoft Windows XP Home Edition中安装IIS或PWS吗?
答: Windows XP Home Edition不支持任何版本的IIS,没有任何可靠的方法能使其运行IIS。Windows XP Home Edition并未设计成一个Web应用程序的开发平台。在升级到Windows XP Professional后,你就可以在系统上安装IIS 5.1,以便利用ASP.Net进行开发工作。在Windows XP Professional上的IIS 5.1是一个全功能的Web服务器端,但是它只能建立10个并发连接,这是因为它只是一个工作站操作系统而不是服务器平台。Windows XP Home Edition还有一些与Windows XP Professional相同的其它限制,因为它也是一个工作站操作系统而不是服务器操作系统。大体上,你会发现,在Windows 2000 Professional和Windows 2000 Server或Advanced Server上的IIS 5.0中,这些差别是相类似的。无论怎样,对于使用.NET Framework来开发基于Web 的应用程序来说,Windows XP Professional才是一个优秀的环境。
答: 为与Web服务器协同工作所开发的应用程序都有着特殊的要求。例如,你不能从一个URL中调用一个Notepad.exe实例并且希望在客户端的系统上看到一个记事本窗口。为了从IIS中与请求进行交互(并不是CGI),程序必须使用ISAPI编写。ISAPI是Internet服务器应用程序接口(Internet Server Application Programming Interface)的缩写。有两种可执行的ISAPI:扩展和筛选器。
可以从一个URL中直接调用ISAPI扩展,如http://localhost/myisapi.dll。假设你已经在目录上配置了IIS,允许脚本和可执行程序,并且用户有执行NTFS的许可权限,则dll将会运行。IIS允许你指定应用程序是在进程内(作为Inetinfo部分)运行还是在进程外(作为IIS 4.0上的MTX部分,或者作为IIS 5.x部分的dllhost)运行。当一个应用程序在进程外运行时,Inetinfo就从问题中被隔离出来。如果应用程序出现故障,Web服务器也会出现故障。
ISAPI筛选器又是另一个内容。ISAPI筛选器能改变进入或离开IIS的数据流。因此,ISAPI筛选器有着非常强大的功能,能用来实现客户日志、验证或更改数据流。对IIS 5.0来说,在ISAPI筛选器中实现的特性包括数据压缩、摘要验证和URLScan。
因为筛选器在IIS中扮演了一个如此重要的角色,所以它们总是作为Inetinfo部分运行在过程内。因此,正确的ISAPI筛选器结构对服务器的正常运行是必备的。你可能希望与Microsoft 产品支持服务一起工作来确定问题,因为处理这种例外可能是一个较大的挑战。
基于这个考虑,有两个新技术可以使生活更加轻松,IIS 6.0就是其中的一个。由于它是一个新的体系结构,所有的ISAPI筛选器都在进程外运行。这将使Web 服务器从一个捉摸不定ISAPI筛选器中隔离开来,但这实际上并没有真正解决问题。为了解决这个问题,你可以考试使用.NET语言在ISAPI方面做一些工作。通使用C++设计ISAPI筛选器相比,使用.NET实现相同的功能要大为简单。
问: 我在哪能获得这样的示例代码--它显示了如何在使用WebDAV的ASP中编辑文档?
答: 从IIS上的脚本中使用WebDAV的最好方法就是使用ASP.Net的WebClient类。如果你正在使用Windows XP或Windows Server 2003,WebDAV功能就是这个操作系统的一部分。这就允许你在一个Web服务器上使用HTTP引用一个文件,就像使用一个UNC路径名称一样。例如,你可以用NET USE * http://servername/directory来映射一个驱动器,然后通过使用驱动器符号来访问这个位置。另一方面,你还可以创建一个COM对象,它是一个WebDAV的客户端。你可以使用这个对象向IIS 5.x或IIS 6.0传递WebDAV动词。
另外,如果你以WebDAV为关键词搜索MSDN,你将会找到一些例子,它们教你如何使用XML来为Exchange和其它Microsoft服务器构造WebDAV的查询。在Microsoft Exchange 2000 Server SDK中有一个WebDAV的示例应用程序。
问: 当我试图用ASP去访问一个数据库时,我得到了一个“拒绝访问”的回应,这是什么原因?
答: 有一个名为“Filemon”的优秀免费工具,你可以从Sysinternals.com上获得它。你可以使用Filemon来快速诊断出绝大多数的权限问题,因为它能实时显示服务器上的全部文件权限、调用的过程名称及访问的结果。因此,无论隐藏多么深的嵌套包含或多么模糊的临时索引,任何“拒绝访问”的消息都能被轻松识别。
当一个在先前的操作系统上能够正常工作的应用程序在升级后出现问题时,它就无能为力了。但是,这种类型的问题还是有启发意义的。IIS 4.0和IIS 5.0之间的一个差异就与COM和COM+之间的一个差异有关系。在IIS 5.0中,当一个COM+对象代表用户访问文件时,它的默认行为就是使用用户的安全上下文环境来完成这些工作。这在IIS 4.0中并不算什么事情。因此,当从IIS 4.0向IIS 5.0迁移包含COM的应用程序时,你可能需要向文件提供用户权限,而在IIS 4.0中并不需要。虽然跟以前相比这有些不方便,但是它在提高应用程序安全性设计方面的确是一个进步。即使是不能使用定制的COM对象去访问数据库,COM在本地的IIS组件中还是得到了广泛的应用。
这里有一个能够帮助您理解这种需求的例子,比如,你需要为正在创建数据库的用户授予请求使用Access临时文件夹的权限。更多的信息请查阅Microsoft Knowledge Base中的Q210457和Q271071。
答: IIS锁定工具非常有效。这个工具允许你轻松、显著地增加服务器的安全性。一旦运行了这个工具,它就将其活动的历史记录储存到一个文件中,这个文件的位置是%systemdrive%\%systemdir%\system32\inetsrv。你将在下面的文件中找到这个信息:
Oblt-rep.log
Oblt-once.md0
Oblt-mb.md0
Oblt-undone.log也可能是最新的。
如果你删除了这些文件,向导就会启动,就好像IIS Lockdown tool并未被运行一样。重复这个过程并没有什么风险。在你这么做之前,一定要制作一个Metabase.bin的副本。
因为当它第一次运行的时候,这个过程将会让你运行锁定工具,就好像它从未被运行过,但并不会“解开”或反转锁定工具进行了一些设置,所以这个过程应该可以正常工作。
问: 在我的intranet环境中,如何处理“server-side include”语法,而不必重新命名所有的文件?
答: IIS 4.0和IIS 5.0提供了这样一个选项,它不需要你更改所有文件的扩展名。ASP处理器也能处理服务器端的include语法,因此没有必要使用.stm或者是.asp扩展名。那么,这对你又有什么帮助呢?通过在应用程序配置中创建一个条目,你可以将.htm 文件映射为由asp.dll处理,这样,哪些带有.htm扩展名的文件就将由asp.dll来处理。通过使用这种方式,那些含有includes的.htm 文件不用重命名就能被处理。现在你可能在考虑:“这会不会导致我所有的.htm文件都像脚本一样被处理,从而降低系统的性能呢?”事实上,在IIS 4.0中,这的确是一个问题;但是,在IIS 5.0中,性能问题并不像你想象中的那么大,并且在IIS 5.1中,甚至会更好。IIS 5.0有一个特性叫做“Scriptless ASP”(无脚本ASP)用来处理这个特殊的问题。如果一个不包含脚本的文件被提交到ASP处理器,它就不会被解析,只是简单地作为静态页面发送出去--在这种特定的情况中是一个有用的特性。
问: 在Windows 2000 Professional中,我怎样做才能让域用户来管理虚拟目录,以便域用户能够创建和管理他们自己的虚拟目录?
答: 你需要做的最后事情就是将域用户加入到Power Users组中,因为这样就可以为域中任何一个拥有用户帐号的人赋予经过提升的权限。如果你信任域中的每一个成员都可以对系统进行很好的管理,这样做不会有什么问题,但是对于大多数计算机用户来说,这样的信任级别是不合适的。
为了在IIS中创建一个虚拟目录,用户需要有管理员权限。之所以这样设计,是因为任何能在Web站点上创建虚拟目录的人也能对虚拟目录进行删除、重命名、重定向或其它管理工作。
认识到这点后,你可能希望不为用户提供管理员身份就能获得类似的权力,在IIS插件中有一个特性(“操作员”标签),能让你指定一个Web站点操作员(不是管理员),为Web站点创建虚拟目录。这个特性只有在Windows 2000 Server、Windows 2000 Advanced Server和Windows 2000 Datacenter Server中是可用的。相同的特性也可应用于IIS 4.0。
另外,你还可以在IIS Web站点内部创建一个虚拟目录,并将它映射到%systemroot%\%systemdir%\inetsrv\iisadmin。你应该保护这个虚拟目录的安全,否则那些访问这个站点的人就能够管理这个Web站点。还要注意,这只有在Windows 2000 Server,Windows 2000 Advanced Server,和Windows 2000 Datacenter Server (以及IIS 4.0)上面是可行的。
当你发现你自己根据操作系统的限制将扩展权限授予了其他人或别的工作组,并且试图将你的工作站当作服务器时,你可能需要安装一个服务器操作系统。
问: 在Windows 2000 Server上,当一个站点需要SSL时,我怎样才能在相同的站点上使用主机头?
答: 让我们回顾一下SSL和主机头的问题,因为对IIS来说,它的问题一直在常见问题解答的头五个中。
当客户发出一个到IIS服务器的HTTP连接请求时,这个客户的请求包括一个叫做HOST:的字段,它包括了URL中的Web服务器请求。例如,如果你的请求将http://www.microsoft.com作为目的地,则浏览器将其发送到服务器,并一同提交HTTP头中的其它信息,HOST: http://www.microsoft.com。因为此字段的名称是“HOST”,并且它在客户的HTTP头中,所以我们把它称作“主机头”。
如果客户请求建立一个SSL连接,主机头字段仍然会包括在请求当中,只不过它被包含在这个包的加密部分里(在应用层中),因此Web服务器无法对其进行解密,以确定应该将请求发送到哪一个Web站点。
这就产生了一条定律:当使用SSL时,不能使用主机头来作为识别一个Web站点的主要手段。
如果你确实想使用带有主机头的SSL,那么会发生什么情况呢?考虑一下这个情况。你有两个Web站点,其中一个不使用主机头,另一个则使用。两个站点都使用相同的IP地址,并且都配置成使用证书。当你利用SSL访问使用主机头的站点时,第一个Web站点会对此做出响应。之所以发生这种情况是因为:我们使用IP地址来识别你希望用来建立连接的站点,而不是主机头。因为第一个站点对IP地址和HTTPS有反应,所以它接受了请求。如果第一个Web站点需要主机头,并且在不同的IP地址上,或者没有证书,那么连接将会失败。
因此,请考虑你的配置,在你需要SSL的相同站点上,只要不使用主机头,你就可以做任何想做的事情。