游客发表
IIS7默认把ASP关掉了,打开装完系统打开网站,打开只要页面里有ASP代码,打开浏览器直接甩给你一个404或者500错误。打开这事我遇到过不下十次,打开每次帮人排查,打开最后都落到同一个地方:服务器角色里ASP那个勾没打上。打开
打开服务器管理器,打开左边树形菜单找到“角色”,打开点开“Web服务器(IIS)”。打开右边主区域往下拉,打开在“角色服务”那一块能看到一长串功能列表。打开注意,打开这里不是打开点一下就能改的,得先点右边的打开“添加角色服务”。弹窗出来之后,在列表里找“应用程序开发”这个分组。ASP就藏在里面,通常和ASP.NET、CGI、ISAPI扩展挨着。勾上ASP,点下一步,等进度条走完。
装完之后别急着关窗口。很多人以为勾了就行,结果一访问还是报错。IIS7的ASP设置分两层:服务器级别和站点级别。服务器级别改的是全局默认值,站点级别可以覆盖。我建议先改全局,省得每个站都调一遍。
在IIS管理器里点最顶上的服务器名称,中间区域找到“ASP”图标,双击进去。这里选项多得让人眼花,但真正需要动的就那么几个。展开“调试属性”,把“将错误发送到浏览器”改成True。默认是False,所以ASP报错时你只能看到一句“An error occurred on the server”,具体哪一行出错根本不知道。改成True之后,浏览器会直接显示错误行号和描述,排错效率翻倍。当然,生产环境别这么干,泄露源码路径不安全。开发机或者内网测试随便开。
接着看“行为”分组。有个“启用父路径”选项,默认False。如果你代码里用了这种相对路径,不打开这个就会报错。我见过一个老系统迁移到IIS7,首页直接白屏,查了半天就是父路径没开。改成True,问题消失。不过要注意,父路径有目录遍历风险,确认代码可控再开。
再往下,“编译”分组里有“默认ASP语言”。VBScript是默认值,但有些老代码用JScript,那就得改。还有“ASP代码页”,中文环境一般设936,UTF-8的站设65001。设错了会出现乱码,页面里的中文变成问号或者方块。我习惯先看一眼代码文件的实际编码,再用记事本另存为确认,最后回来改这个值。
站点级别的设置更细。点具体某个网站,再双击ASP图标,你会看到和服务器级别一样的界面。区别在于,这里改只影响当前站。如果服务器级别已经设好,站点级别保持“继承”就行。但有时候某个站需要单独开父路径,其他站不开,那就到这里改。改完右上角点“应用”,否则不生效。
还有个小坑:IIS7的ASP设置里,“会话属性”下的“启用会话状态”默认True,但“最大会话数”有限制。如果网站并发高,会话超时或者丢失,可以适当调大“会话超时”值,默认20分钟,改成60或者120。不过别改太大,内存扛不住。
最后说个实际案例。上个月帮一个客户配Windows Server 2008 R2,IIS7.5。ASP装好了,权限也给了,访问还是500。错误信息只显示“500 - 内部服务器错误”。我打开“将错误发送到浏览器”,刷新,看到具体报错:“Active Server Pages 错误 'ASP 0131' 不允许父路径”。回去勾上父路径,搞定。整个过程不到五分钟,但没开错误显示的话,可能得折腾半小时。
所以记住顺序:装ASP功能,开错误显示,按需调父路径和代码页。这三步做完,九成以上的ASP运行问题都能解决。剩下的就是代码本身的bug了,那跟IIS设置没关系。
友情链接