三、IIS配置及调试
刚装好的机子,装了IIS以后测试时弹出对话框,需要输入用户名和密码?晕了,机子是刚装的,哪有设置什么密码啊?在网站搜了好长时间终于把问题给解决了。把心得贴一下:
忙活了半天,IIS总算正常启动了,赶快来体验一下WINDOWS默认的IIS欢迎主页,通常有以下四种访问方式:
http://localhost
http://本地计算机名
http://127.0.0.1
http://本地IP地址
实际上主要是两种方式,一种IP 地址,一种主机地址。下面仅以http://localhost和 http://127.0.0.1 这两种方式来详细剖析一下(因为多数网络爱好者都是基于XP下的环境,以下都是在XP SP3 IIS5.1的环境下测试)。
但大多数用户会很失望,看到的不是欢迎页面,而是一些错误提示。网上有很多关于IIS安装好以后默认主面不能打开的资料,但看了都让人感到很困惑了,有的用户按照做了解决问题了,有的做了没有解决问题了,有的解决问题了,但也不知道是怎么回事了。本人经过反复的实验,总算理清了各种故障的原因,希望让大家不再困惑。
关键的三处设置
1、对默认共享目录的权限设置(主要是针对NTFS格式)
2、IIS配置中对共享WEB“目录安全性”和单个文件的“文件安全性”中的“匿名访问和身份验证方式“的设置。
3、浏览器中“安全设置”中“用户验证”模式
系统中三处的默认配置
1、默认的IIS的共享WEB即“系统盘\Inetpub\wwwroot”的安全设置中默认帐户“IUSR_机器名”是有“读取”的权限的。
2、刚新建IIS的,为了测试IIS,所以此时访问即是“系统盘\Inetpub\wwwroot”下的iisstart.asp,随之 iisstart.asp又跳转到localstart.asp,并同时打开虚拟目录下的iishelp。“目录安全性”的身份验证默认设置是“匿名访问”,而在默认的共享WEB下有一个文件“localstart.asp”在“文件安全性”中单独设置了身份验证为“基本身份验证”和“集成WINDOWS身份验证”,这两点很重要,也是困惑大家的地方。
3、浏览器中“安全设置”中,“安全”---“选择要查看的区域”---“自定义级别”—“安全设置”—“用户验证”—“登陆”
IE6、IE7或IE8浏览器中当在“internet” 和“intranet”中默认的用户验证登录方式都是“只在“intranet区域内自动登录,而在“可信任站点”中登录方式是“自动使用当前用户名和密码”,在“受限站点”登录方式是“用户名和密码提示”。
常见故障原因分析
1、不管以哪种方式登陆都出现如下错误提示
 

注意错误的关键信息:
HTTP 错误 401.3 - 访问被资源 ACL 拒绝Internet 信息服务
 原因1分析及处理:由于在NTFS下对共享WEB目录的用户权限配置不对,看帐户“IUSR_机器名”是有“读取”的权限,而且是否添加了“EVERYONE”用户,它是否有读取的权限了。
 原因2分析及处理:如果在IIS中“iisstart.asp” (默认首页)文件安全性没有设置“匿名”方式,也会出现以上错误提示,应该在IIS中将该文件的“匿名”方式选中。
2、不管以哪种方式登陆都“需要输入用户名和密码。如下图所:
 

原因:主要是针对于“localstart.asp”文件的访问身份验证,在浏览器中的“安全设置中“用户验证”方式在作怪。一共是四种方式:①“匿名登陆”、②“用户名和密码提示”、③“只在intranet区域自动登陆”、④“自动使用当前用户名和密码”。经反复实践,针对“127.0.0.1”IP地址方式,只有在方式①④下才不会出现用户名和密码登陆窗口。而针对“localhost”计算机名地址方式,只有在方式①③④下才不会出现用户名和密码登陆窗口。
因为“localstart.asp”文件默认的访问是需要用户名和密码验证的,选择方式①因为是“匿名”,是默认的帐户和密码,因为权限不够,尽管可以登陆,但不能访问。选择方式②因为是“用户名和密码提示”,所以必须有用户名,而其它文件都是以“匿名”(有用户名)访问,而唯独“localstart.asp”文件没有选择“匿名”访问方式,所有没有用户名,就会出现登陆窗口。方式③自动登陆即以默认的用户登陆,方式④“自动使用当前用户名和密码”就是用当前登陆系统的用户名自动登陆,所以也不会出现登陆窗口。
而且“internet”针对于IP地址类的登陆方式即“127.0.0.1”,“intranet”针对于计算机名地址类的登陆方式即“localhost”。至于有的“localhost”方式能正常登陆,而“127.0.0.1”不能登陆,是因为在各自的登陆区域“intranet”或“inter net”中选择了不同用户验证的登陆方式。
处理:在确保IIS中设置了“匿名”方式后,再在IE中设置“自动使用当前用户名和密码”。
3、两种方式都未出现用户名和密码登陆窗口,但都出现了以下错误提示:
 

原因:注意这里的“无权查看网页”同上面的是有区别的。主要是因为选择了“匿名”验证方式,为什么呢?这里我们要提到“locatstart.asp”这个神秘的文件了,因为它在IIS安装时系统就在它的“文件安全性”中单独设置了身份验证为“基本身份验证”和“集成WINDOWS身份验证”,这说明它必须通过严格的身份验证,而不能以匿名方式,而在浏览器的“身份验证”方式中,我们选择了“匿名”方式,所以,当iisstart.asp以“匿名”方式访问转到它时就提示未授权了。既然“匿名”方式不行,那我们就选择“自动使用当前用户名和密码”方式,因为默认系统都是管理员用户登陆了,所以“当前用户名”就是管理员了,这个身份级别够高了。但即便这样,仍然会出现以上出错提示。这就让人费解了,问题出现在下面了,如下图所示:
 

不知什么原因,取消了对localstart.asp文件身份验证的所有设置,不管是一般用户还是管理员都别想访问了,难怪出现以上出错提示了。只要恢复到默认设置即选中“基本身份验证”和“集成WINDOWS身份验证”。另如果在共享的WEB目录的目录安全性设置中没有选中“匿名”方式,也会出错如上错误,应该选中“匿名”访问方式。
4、排除以上故障后,我们继续向后做,发现还是会出现以下错误提示:
 

看出错提示,核心意思是没有权限,问题出现在哪了呢?问题出现在“locatstart.asp”的身份验证方式了,如下图所示:
 

看到了吗:“匿名访问”被选中了,这里很有必要说三种验证方式的优先权了,匿名访问—集成WINDOWS身份验证---基本身份验证,三种方式都选中的情况下,该文件是以“匿名”方式访问了,根据出错提示,出错的语是
sPath = "IIS://" & sServername & "/W3SVC/" & sServerinst
Set oDefSite = GetObject(sPath)
结合上下文分析了一下,应该是在系统下建立一个路径了(应该是在共享WEB目录外)。当然匿名用户没有权限了。如果没有选择“匿名”方式,就会以浏览器中的“当前用户”即管理员访问,当然有权限了。把“匿名”方式去掉即可。
注意:其实还有一种方法,不去掉“匿名”方式。因数“匿名”方式实际上是IIS默认的帐户“IUSR_YH-ZJ”,只要把它加到“Administratrs”组中,把它的权限极别提高即可。
5、有很多用户发现在IE6中正常访问,到了IE7、IE8就不能正常访问了,要求用户名和密码,那是因为在安全设置中,IE6与IE7、IE8默认的用户验证方式不一样了。更改过来即可。
6、误区:在网上关于不能正常登陆到IIS欢迎页面都是一样的说法,就三种原因:
一、没有设置“匿名访问”
二、没有将wwwroot目录设置为“Everyone完全控制”权限
三、要使得“iisstart.asp”和“localstart.asp”能正常访问,必要要单独设置取消“匿名访问”
但是,这个匿名访问默认本来就是勾上的(除非你自己去掉勾选了),还有,那个Internet来宾用户的权限也是给的足够的,默认下“localstart.asp”是没有“匿名访问”的。这三点其实默认都是做到的,结果大家根据建议改变了默认设置,越搞越糊涂了。实际上所有问题都集中到localstart.asp这个文件上了。而且只有服务端才会访问到这个文件,在客户端浏览默认的IIS主页只会显示“网站正在建设中”,而且运行自己搭建的网站,一切正常。
另外:有的朋友介绍了一种方法:在“工具”-“Internet选项”-“安全”-“本地Intranet"(或“可信站点”)-“高级”中将“127.0.0.1“添加进去就可以了,实际上也是针对localstart.asp文件设置了合适的用户验证方式了。
注意:“localstart.asp”文件的访问方式默认是“集成WINDOWS身份验证”,有时可能在对网站的“目录安全性”设置匿名访问方式时,无意改了它的访问方式,如下图所示:
 

总之,一切按照安装IIS好后默认的设置方式即可,再调整浏览器中的用户验证方式了。
重要声明:以上错误都是针对在服务端登陆IIS默认的欢迎页面,才出现的错误提示。其实要是测试自己的WEB网站,大可不必理会它,因为你会发现一切太顺利了。但是出于对技术的无限追求,弄清故障背后的神秘是一种享受了。
有趣的实验:通过这个实验,我们可以说明一切都是因为localstart.asp这个文件的访问方式惹的祸.
将localstart.asp文件中的代码全部清除,换上如下代码:
<%=now%>再输入http://127.0.0.1/localstart.asp,依然弹出要求输入用户名和密码的登录框,晕,原以为是此文件中的代码导致这样的现象,看来并不是代码的原因,完全是是针对这个文件名似的,又将iisstart.asp文件中的代码全部清除,也换上如同上面所附的代码,测试却是正确输出当前日期时间值。这足以说明“localstart.asp”文件安全性中的身份验证方式发挥了作用。
我再将localstart.asp文件名改为default.asp,再测试(输入http://127.0.0.1/default.asp,这次测试此页代码依然是原来的代码,并非上面改过的代码),结果出现如下错误:
Microsoft VBScript 运行时错误 (0x800A0046)
没有权限: 'GetObject'
/default.asp, 第 40 行
改了文件名就不行了,最后,我再一次输入http://127.0.0.1/localstart.asp,又弹出要求输入用户名及密码的登录框,但此时wwwroot目录下并没有localstart.asp文件啊(已经改为default.asp了),为何不是提示“找不到网页”错误呢,明明没有这个网页嘛,把人搞的糊里糊涂了。其实这是因为IIS的缓存机制了,因为在缓存中还有相关的信息了。
强烈建议:不要随意更改默认帐户的密码 
“IUSR_机器名”和“IWAM_机器名”两个用户账号是安装IIS5时系统自动建立的内置账号,账号建立后被Active Directory、IIS metabase数据库和COM+应用程序三方共同使用,账号密码被三方分别保存,有操作系统负责同步,但是如果用户只更改其中一处密码,这种同步有时会出错,导致访问出错。出现IIS Out-Of-Process Pooled Applications启动失败的结果,从而*.asp不可访问
补救措施:人工同步这三方的账号和密码
先启动MSDTC服务,什么是MSDTC服务?显示名称:Distributed Transaction Coordinator;描述:协调跨多个数据库、消息队列、文件系统等资源管理器的事务。如果停止此服务,则不会发生这些事务。如果禁用此服务,显式依赖此服务的其他服务将无法启动。
CMD下net start msdtc ,结果显示“Distributed Transaction Coordinator 服务不能启动”。解决方法:把 C:\WINDOWS\system32\dtclog 这个目录重命名(如果有的话,没有就直接省去这一步),然后重新建立该目录。在命令行下:msdtc –resetlog ,再net start msdtc,显示服务启动成功了。然后右键我的电脑--管理--本地用户和组,给“IUSR_机器名”和“IWAM_机器名”两个用户设置密码,要一样。接着“开始”→“运行”→输入“cmd”并确定,执行以下命令:
%SystemDrive%
cd %SystemDrive%\Inetpub\AdminScripts
cscript.exe adsutil.vbs set w3svc/wamuserpass 你设置的密码
cscript.exe adsutil.vbs set w3svc/anonymoususerpass 你设置的密码
看一下,行了没有?如果还不行,那么执行以下命令:
cscript.exe synciwam.vbs -v
然后重启IIS,命令:iisreset
到这一步还是不行,最后在CMD下执行以下命令:
%SystemDrive%
cd %SystemRoot%\System32\inetsrv
rundll32 wamreg.dll, CreateIISPackage
regsvr32 asptxn.dll
 不过,我建议还是卸载IIS后重装了。
四、解决数据库链接错误的方法
在NTFS格式下,temp目录的权限肯定会改变,由于数据库操作时需要使用temp目录作缓存进行数据交换,当权限不足时就出现:“数据库连接出错,请检查连接字串。”的错误提示。 修正temp权限后再试,找到temp目录:C:\WINDOWS\这里即可找到。 给temp文件夹加上guests组的权限就OK了,我IIS用户是属于GUESTS组的,所以加GUESTS 加上以后,测试,OK
五、ASP.NET环境搭建
1、安装顺序
在ASP.net 环境搭建中,用户往往忽略了安装顺序,因该是先请确保你的IIS服务器能正常运行,接着你才可以安装NET Framework2.0。否则就会出现“服务器应用程序不可用”的出错提示。原因是asp.net2.0没有正确地在IIS中注册,不过可以通过以下方式重新注册。
cd c:\
net stop w3svc
cd C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
aspnet_regiis.exe -ua
aspnet_regiis.exe -i
net start w3svc
2、访问权限
需要确保asp.net运行帐户(默认情况下,在win2003中是Network Service,在xp中是aspnet)对N个目录具有相应的访问权限,主要是系统目录(c:\windows\temp,C:\windows\microsoft.net\framework\v2.0.50727\Temporary ASP.NET Files),还有一个容易忽略的目录:Web应用所对应的虚拟目录.要保证aspnet帐号或者NetService能够访问你当前的项目文件夹。如果没有访问当前项目文件夹的权限,则始终报错。
当然,在实际工作环境中,还有很多的故障会出现,关键是我们要善于分析出错的提示信息,然后对症下药,切不随便在网上搜索一下,照搬下为。比如如果提示拒绝访问,应该是权限配置问题,从系统运行机制逐步分析,找到问题的本质所在。这样才能以不变应万变。

文章如转载,请注明转载自:http://www.5iadmin.com/post/852.html