ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

IIS 6.0完整安装包:老系统Web服务部署与避坑指南

IIS 6.0完整安装包:老系统Web服务部署与避坑指南 简介针对 Windows XP 环境下部署 IIS 6.0 的完整安装包主要面向需要在旧系统上搭建 Web/FTP 服务的个人开发者、小型企业运维人员以及初次学习 IIS 管理的新手。压缩包共 273 个文件以 dll、exe、htm、in_、as_、ch_ 等类型为主dll 和 exe 提供 IIS 核心运行组件in_/as_/ch_ 等属于安装配置与脚本文件htm 包含本地说明页面整体大小约 11.69MB目录层级清楚可按需提取。目前已有 282 人学习下载。包内除 IIS 核心服务外还包含 FTP 服务、ASP 动态页面支持及 XP SP3 相关组件可帮助配置元数据库Metabase、启用 SSL/TLS 加密、管理站点权限与性能计数器IIS 6.0 的独立工作进程模型也能在练习中直观体现应用崩溃隔离与稳定性提升。借助这份打包好的组件用户可以避免逐个寻找缺失 DLL 的麻烦在 Windows XP 上快速完成 IIS 6.0 的部署和调试也能通过完整的服务环境熟悉进程隔离、WebDAV 协作等特性为后续学习或实际建站提供扎实基础。1. iis6.0 完整安装包老系统上装 Web 服务比想象中难“iis6.0 完整安装包”这个词搜的人大多是老运维、实验室管理员、还有接手旧工控系统的工程师。很多人以为在 Windows XP 或 Server 2003 上装 IIS 就是控制面板里勾一下实际勾完组件、重启完World Wide Web 服务常常直接回滚到停止状态或者 ASP 页面一访问就是 500。这份安装包解决的问题就是让 IIS 6.0 在老系统上一次装到位把精简系统里缺失的组件文件补齐、把安装顺序理顺顺带附上无人值守安装脚本适合还在维护老教学网站、旧版 ASP 管理系统、工控设备 Web 配置界面的人。别被网上那些“打勾就能用”的说法忽悠了坑都在后面。2. 装之前先分清版本XP 上是 IIS 5.1Server 2003 上才是完整 IIS 6.02.1 IIS 6.0 与 IIS 5.1、IIS 7 的边界进程模型与元数据库差异很多人被“iis6.0”这个名字带偏以为下载了完整安装包随便装到哪台 Windows 上都行。这里必须先说清楚完整的 IIS 6.0 只随 Windows Server 2003 提供而 Windows XP 上自带的 IIS 5.1 虽然内核用了 IIS 6.0 的一部分技术但功能上是受限版不支持应用程序池隔离。这一点如果搞混后面所有配置都会跟着翻车。先看三种版本的本质差异我用一张表来对比对比项IIS 5.1XP 自带IIS 6.0Server 2003IIS 7Vista/2008 起进程模型inetinfo.exe 单进程所有站点共用w3wp.exe 多进程按应用程序池隔离WAS 服务托管模块化请求管道配置存储metabase.bin 二进制metabase.xml带 schema 校验applicationHost.config web.config故障隔离一个站点崩溃拖垮全部按池隔离互不影响同左且回收机制更细32 位 COM 组件默认支持默认支持可切换 32/64 位模式需显式启用 32 位模式这个差异直接决定了你的使用姿势。如果你手里的老系统是 XP那哪怕装的是“IIS 6.0 完整安装包”装完实际跑的还是 5.1 内核单进程承载所有站点一个 ASP 应用写坏了 Session 或者把内存吃满整个 IIS 都跟着死。我在实际维护中见过不止一次这种情况明明只是一个小站点挂了结果同机器上其他网站也一起停止响应查半天才发现是 inetinfo.exe 整个进程崩了。而真正完整的 IIS 6.0 引入的应用程序池概念是这套系统里最值钱的东西。每个池对应独立的 w3wp.exe 进程池与池之间隔离一个池崩溃了其他池的站点还能继续响应。这也是为什么很多老项目坚持要在 Server 2003 上跑而不是迁移到 XP——迁移看似省事实际把故障隔离能力也迁移丢了。2.2 哪些场景必须用 IIS 6.0老站点迁移时的兼容性硬指标从兼容性角度说IIS 6.0 是经典 ASP 应用的“舒适区”。我接触过的几个典型场景第一个是旧版 ASP 教务系统或 OA 系统。这类系统往往用了大量的 VB6 COM 组件比如文件上传组件、数据库连接组件它们编译于 2005 年前后在 32 位环境下活得好好的。IIS 6.0 默认就是 32 位工作模式装完组件注册即用。而到了 IIS 7 和 IIS 8 上64 位系统默认跑 64 位进程老的 32 位 COM 组件如果不做兼容配置直接报“ASP 0177 Server.CreateObject 失败”这种问题处理起来极其痛苦。第二个是依赖 ISAPI 筛选器的老站。以前很多 ASP 站用 ISAPI 做 URL 重写、防盗链、单点登录。IIS 6.0 加载 ISAPI 的方式是直接挂在 w3svc 上配置简单路径清清爽爽。到了 IIS 7 的集成模式下面如果原有 ISAPI 筛选器写得不够规范会被新管道机制反复触发出现各种奇怪的请求失败。第三个是纯粹的资源限制场景。Server 2003 配合 IIS 6.0内存占用低512MB 内存的旧服务器也能带得动几百人同时访问的纯 ASP 信息发布站。换成 IIS 7 以上的系统不说别的光 WAS 服务、NetFx 支持这些就比老系统多吃不少内存硬迁移到新版本往往得不偿失。所以这份安装包真正解决的是两类人的问题一类是手里系统盘损坏、精简版系统缺组件文件装不上 IIS 的人另一类是需要在多台同配置机器上快速标准化部署的人。3. 三种安装路径图形界面、命令行静默、已有站点迁移3.1 路径一控制面板添加 Windows 组件XP 与 2003 通用先走最常规的路径。XP Professional 和 Server 2003 都支持从控制面板添加 IIS 组件但有一个大前提你的系统必须能识别安装源文件。安装包在这里起的作用是把 IIS 组件所需的源文件补回系统里让后续的安装过程不再提示“找不到 iis.dll”或者“源文件位置”之类的错误。完整的 IIS 6.0 安装包通常会把组件文件整理成标准的安装结构。我会先做这样几步把安装包解压到本机固定目录比如D:\iis6尽量不要放在桌面或临时目录。打开控制面板进入“添加或删除程序”点击左侧“添加/删除 Windows 组件”。在组件列表中勾选“应用程序服务器”Server 2003 下或直接勾选“Internet 信息服务IIS”XP 下。点击“详细信息”确认勾选了“Internet 信息服务管理器”和“万维网服务”。这一步很容易漏掉只勾根节点往往装出来没有管理界面。点击确定系统开始安装。如果期间弹出“需插入磁盘”或“找不到文件”的对话框把路径指向D:\iis6里的对应目录。参数说明XP 的组件列表只会显示“Internet 信息服务IIS”里面包含万维网服务、文件传输协议FTP服务、SMTP 服务等子项。完整的 IIS 6.0 场景下“万维网服务”里还有“Active Server Pages”子项这个必须勾上否则装完能访问静态 HTML但跑不了 ASP等于白装。这里有个细节值得留意XP Home 版没有 IIS 选项。前面说过IIS 5.1 只随 XP Professional 提供Home 版想装只能换系统。如果面对的是 Home 版机器不建议折腾硬装直接换 Professional 镜像或者升级到 Server 2003 更省事。3.2 路径二用包里的批处理做静默安装适合批量与远程批量部署的时候图形界面点击是噩梦。几十台机器一台一台点下来点错一个选项就前功尽弃。安装包里通常自带无人值守安装的命令行方案核心工具是sysocmgr.exe。我先写一个最小可用的应答文件[Components] iis_common ON iis_www ON iis_asp ON iis_inetmgr ON把上面的内容存成iis_install.txt注意编码要用 ANSI不要用 UTF-8 带 BOM 的格式否则 sysocmgr 读起来会乱码。然后执行sysocmgr /i:%windir%\inf\sysoc.inf /u:C:\iis_install.txt /q /z命令说明/i参数指定组件定义文件XP 和 2003 默认都在%windir%\inf\sysoc.inf/u指定应答文件路径/q是安静模式不弹出任何界面/z表示完成后不自动重启。整个执行过程大概 30 到 90 秒取决于机器性能期间可以在命令行窗口看到进度输出。逻辑说明应答文件的[Components]段声明了要安装的四个组件。iis_common是 IIS 的公共核心文件所有 IIS 功能都依赖它iis_www是万维网服务也就是 Web 服务器本体iis_asp是 ASP 支持如果你的站点是纯静态 HTML这个可以不装但绝大多数老系统都跑 ASP建议带上iis_inetmgr是管理界面不装的话没法用图形工具配置站点只能靠脚本运维风险高。我把这个命令封装成一个批处理方便整个机房统一跑echo off set SRCD:\iis6 set ANSWER%SRC%\answer.txt echo [Components] %ANSWER% echo iis_common ON %ANSWER% echo iis_www ON %ANSWER% echo iis_asp ON %ANSWER% echo iis_inetmgr ON %ANSWER% sysocmgr /i:%windir%\inf\sysoc.inf /u:%ANSWER% /q /z if %errorlevel% equ 0 ( echo IIS installed successfully. ) else ( echo Install failed with error code %errorlevel%. )参数说明%errorlevel%是批处理里判断上一条命令是否成功的关键变量0 代表成功。如果返回非 0常见的是 1参数错误和 2组件文件缺失。遇到 2 的时候基本可以断定是sysoc.inf里指向的组件 cab 文件和实际系统不匹配典型原因是 XP 打了某个补丁后iis.dll的版本号对不上这种情况我一般直接放最后讲到的完整安装包中的修复组件覆盖一次再执行。3.3 路径三在 XP 上依赖兼容层跑老应用注意边界还有一类场景是老应用必须在 XP 上跑但代码里调用了 IIS 6.0 的某些管理接口。严格说 XP 装不了完整 IIS 6.0但可以依赖 5.1 内核自带的兼容 API。实际操作中我会在 XP 上先按照 3.1 的方式安装自带 IIS 5.1再把从安装包里提取的核心组件文件覆盖到%systemroot%\system32\inetsrv下随后注册元数据库。这个操作存在较大风险我把它放在第三位不是因为推荐而是因为确实有人会这样做。覆盖文件以后服务管理器和 IIS 管理单元往往显示异常最常见的现象是“Internet 信息服务”管理界面打不开或者打开后看不到默认网站。原因很简单5.1 的 metabase 结构和 6.0 的 schema 不完全兼容强行覆盖组件文件容易把配置存储搞坏。我的建议是如果必须用 IIS 6.0 的完整能力老老实实装 Server 2003如果机器必须是 XP那就接受 IIS 5.1 的边界按 5.1 的方式配置。别去挑战微软在这道坎上设的限制我试过好几轮最后都是回滚重装系统才收拾干净。4. 装完别急着配站先验证服务、ASP 与目录权限4.1 服务与监听端口验证装完 IIS第一件事不是马上建站点而是确认服务真的起来了。我见过太多次“装完一切都正常”的假象重启服务器以后才发现 w3svc 没起来。验证用两条命令就够了net start | findstr /i IISADMIN W3SVC netstat -ano | findstr :80第一条命令的输出里应该能看到Windows Internet Information Services (IIS) 管理器相关的管理服务IISADMIN以及World Wide Web 发布服务W3SVC。第二条命令用来确认 80 端口有人在监听。如果netstat的输出里出现:80且状态是LISTENING说明 HTTP 服务已经正常绑定端口。参数说明net start不带参数时列出所有已启动的服务用findstr过滤出关键项netstat -ano里的-a显示所有连接和监听端口-n用数字形式显示地址和端口-o显示对应的进程 PID。只看到一个监听进程还不够最好再确认这个 PID 对应的进程是w3wp.exe或inetinfo.exe而不是被某个软件把 80 端口抢占了。常见的抢占者是迅雷、Skype 的老版本、还有某些网页调试工具。如果 80 端口被占用IIS 服务本身是启动的但你访问本机 IP 永远打不开页面。遇到这种情况先在服务管理器停掉抢占进程对应的服务而不是去改 IIS 端口——改端口会牵连所有基于 80 的绝对路径配置后续麻烦不断。4.2 创建虚拟目录并放一个 ASP 探针页服务跑通以后建一个虚拟目录放一个最简 ASP 页面验证脚本引擎。我在 IIS 6.0 上一般会新建一个名为test的虚拟目录物理路径指向本机任意文件夹例如D:\wwwroot\test。将下面的内容保存为D:\wwwroot\test\check.asp% Response.Write IIS OK - Now() %然后浏览器访问http://127.0.0.1/test/check.asp。如果页面显示IIS OK - 2026/xx/xx xx:xx:xx这样的字样说明三件事同时正常IIS 服务在跑、虚拟目录映射成功、ASP 脚本引擎能工作。逻辑说明Response.Write是 ASP 最基础的输出方法Now()返回服务器当前时间。这个探针页妙在只依赖 ASP 内置对象不涉及任何第三方组件如果它能跑说明环境基础没问题如果这个页面都报 500后面的 COM 组件问题根本不用查了。创建虚拟目录这一步XP 和 2003 的图形界面路径略有差异但核心是设置“别名”和“本地路径”。别名决定 URL 访问路径本地路径指向物理目录。权限方面建议先保持默认的“读取”和“脚本”权限即可不要一上来就勾选“写入”防止测试阶段的漏洞暴露。4.3 开启 ASP 父路径与默认文档老 ASP 站点经常用到相对定位语法比如在二级目录里用../访问上级目录文件。IIS 6.0 默认出于安全考虑关闭了这个能力于是你在本地测试完全正常部署到服务器上却一片 500。遇到这种情况需要手动开启父路径。操作路径是在 IIS 管理器中右键站点属性切到“主目录”选项卡点“配置”按钮在“选项”选项卡里勾选“启用父路径”。这个配置按站点级别生效不需要全局开启我习惯只为真正有需求的站点打开。默认文档的坑更隐蔽。老 ASP 站点没有显式文件名访问习惯用户直接输http://ip/test/IIS 需要在目录下按顺序查找默认文档。IIS 6.0 默认的默认文档列表是Default.htm, Default.asp, index.htm, index.html。如果你的站点入口文件叫index.asp不在默认列表里直接访问目录就会得到 404 页面。我会把默认文档列表改成站点实际需要的顺序优先级文档名说明1index.asp多数老站点的入口2Default.asp微软默认3index.html回退到静态页面4Default.htm最低优先级保证不空白参数说明IIS 6.0 的默认文档列表顺序即查找顺序越靠前越先被执行。这个顺序影响用户体验更影响安全——如果首页文件意外删除了列表里有可用的备用文件就能避免裸目录暴露在访问者面前。4.4 IUSR 匿名账户与 NTFS 权限检查这一步属于“不踩不知道、一踩想摔键盘”的类型。IIS 6.0 装完后匿名访问使用IUSR_机器名这个账户。如果站点目录所在的 NTFS 分区没有给这个账户任何权限那么即使 IIS 配置全部正确访问时依然会弹出登录框或者直接给你一个 401.3 错误。验证方法很简单右键站点目录选“属性 → 安全”确认IUSR_机器名至少具有“读取和执行”、“列出文件夹目录”、“读取”三项权限。如果看不到这个账户点“添加”按钮手动输入IUSR_机器名补上。我在给老机房配置时遇到过最气人的情况是管理员之前为了“安全”把 Everyone 从目录权限中去掉了结果 IIS 匿名账户也没啥权限网站表现为时好时坏——静态文件偶尔能开ASP 一执行就 500。排查了半天最后发现是最外层目录的“读取”权限缺失导致 ASP 引擎无法加载脚本文件本身。这里的取舍要说明白NTFS 权限是累积的父目录权限会传递给子目录。我通常只给到虚拟目录对应的实体文件夹这一层子目录全部继承遇到需要写文件的目录比如上传目录再单独给IUSR_机器名加“写”权限。别为了省事直接给 Everyone 完全控制那等于把服务器大门敞开老系统本来补丁就不到位经不起这么折腾。5. 避坑指南IIS 6.0 装完最常见的五个炸点5.1 服务起不来World Wide Web 服务卡在“启动”后回滚现象IISADMIN 服务能启动但 W3SVC 服务点击“启动”后过几秒又回到停止状态系统日志里能看到“服务特定错误”之类的提示。原因最常见的是 HTTP.sys 驱动没有加载。IIS 6.0 的 HTTP 协议栈由内核驱动 HTTP.sys 提供如果这个驱动被禁用或者异常W3SVC 就无法完成端口绑定服务自然启动不了。另一个常见原因是IISADMIN服务没有设为自动启动导致 W3SVC 启动时依赖的管理接口不可用。处理办法先看服务依赖关系在服务管理器里打开 W3SVC 的属性确认它依赖的服务包括 IISADMIN 和 HTTP。然后跑一次net start iisadmin确认管理服务起来之后再net start w3svc。如果还在回滚去设备管理器或系统服务里确认 HTTP.sys 驱动的启动类型是“自动”。我遇到过的极端情况是杀毒软件把 HTTP.sys 当成了可疑驱动直接禁掉了。这种时候单纯改服务启动类型是没用的必须进杀毒软件的白名单把驱动恢复出来再重启系统所有服务才能正常拉起。5.2 ASP 页面报 500父路径未开和 COM 组件未注册是两码事现象访问静态 HTML 正常一访问.asp页面就报 500且 IIS 日志里的状态码是 500子状态码不确定。原因前面提过的父路径问题只占一部分比例。更大的份额来自 COM 组件未注册。老 ASP 站点几乎都依赖某种组件来连数据库或做上传比如ADODB.Connection是内建的还好但像Persits.Upload、AspJpeg这些第三方组件如果换了机器没有重新注册Server.CreateObject就直接炸。处理办法先通过父路径开关排除配置问题再逐列排查组件。常见做法是写一个诊断 ASP 页面% On Error Resume Next Set conn Server.CreateObject(ADODB.Connection) If Err.Number 0 Then Response.Write ADODB OK Else Response.Write ADODB Failed: Err.Description End If %参数说明脚本中Err.Number为 0 表示创建对象成功。对任意组件把ADODB.Connection换成它的 ProgID访问这个页面就能精确看到是哪个组件没注册。以前我在一个系统上报 500 查了两天最后就是用这个页面逐个试组件才发现是一个老的文件上传组件没注册一个regsvr32就解决了。这里特别提醒On Error Resume Next在排查阶段很有用但它会吞掉所有错误。排查完务必删掉这个页面否则后续正常使用时错误会被隐藏问题更难暴露。5.3 页面 404默认文档列表和匿名账户目录权限都要查现象虚拟目录配置完全正确访问具体文件如check.asp能打开但访问目录http://ip/test/返回 404。原因纯粹是默认文档列表里没有匹配的文件名或者当前目录没有设置继承到前几级目录的匿名访问权限。处理办法打开站点属性面板切到“文档”选项卡确认默认文档列表里有和站点入口匹配的文件名。没有就手工添加。与此同时检查目录的 NTFS 权限如果IUSR_机器名连“读取”权限都没有IIS 找不到该文件还以为是文件不存在反馈给浏览器的就是 404 而不是 401。这两个原因叠在一起的情况最多管理员配好了权限但默认文档没加index.asp或者反过来。我的经验是把两个检查都放进部署脚本里不要凭肉眼判断。5.4 XP 系统上的并发限制超过 10 个连接就挂起现象XP 上装的 IIS 5.1本地和几台机器访问正常稍微多几个访问者就出现页面打开缓慢、超时甚至完全无法访问。原因XP 的 IIS 5.1 自带 10 个并发连接的限制。这不是性能问题是微软在操作系统层面人为划的线。Server 2003 的完整 IIS 6.0 没有这个限制理论上连接数只受内存和带宽约束。处理办法从 XP 出发的话别无他法只能减少不必要的长连接。老 ASP 站点默认 Keep-Alive 开着一个浏览器会占用一个连接挂着10 个用户就能把系统挤爆。把站点的 HTTP 保持活动Keep-Alive关闭可以缓解症状但治标不治本。真正的解法是换 Server 2003 跑完整 IIS 6.0。以前学校机房里面用 XP 做课程设计站点测试五六个学生同时访问就卡死换成 2003 虚拟机后同规模访问毫无压力。5.5 卸载重装后配置全丢主动备份 metabase现象因为某些原因卸载了 IIS之后重新安装发现以前配置的 IP 绑定、虚拟目录、默认文档统统不见了。原因这是 IIS 6.0 的元数据库metabase生命周期问题。卸载组件时系统会清理配置存储重装后生成的是全新默认配置。如果你没有提前备份所有站点配置不可恢复。注意这里说的是主动备份不是把metabase.xml复制一份那么简单。处理办法正规做法是用 IIS 管理器自带的“备份/还原配置”功能。右键机器名选择“所有任务 → 备份/还原配置”输入备份名系统会生成带时间戳的备份文件。还原时从同一入口操作即可。这样备份的是包含 IIS 内建用户、站点绑定、虚拟目录映射的完整元数据库快照比手动拷贝文件可靠得多。我在这上面吃过亏有一次帮老客户维护一台 ERP 前置服务器系统补丁装挂了我图省事直接卸载 IIS 重装结果客户两年来配置的十几个站点全部归零。从那以后我无论操作任何一台 IIS 6.0 机器动手之前必做备份同时把备份文件复制到另一台机器留存。6. 进阶写一个无人值守脚本半小时部署 20 台机器6.1 应答文件与静默安装命令模板前面第 3 章的静默安装是单机用法批量部署时还需要封装一层。我通常把安装包解压到网络共享目录比如\\192.168.1.8\share\iis6然后在一台机器上生成好应答文件通过远程脚本批量推送到各目标机器执行。批处理模板如下echo off set SHARE\\192.168.1.8\share\iis6 set ANSWER%TEMP%\iis_answer.txt if not exist %SHARE% ( echo Network share unavailable. exit /b 1 ) echo [Components] %ANSWER% echo iis_common ON %ANSWER% echo iis_www ON %ANSWER% echo iis_asp ON %ANSWER% echo iis_inetmgr ON %ANSWER% pushd %SHARE% sysocmgr /i:%windir%\inf\sysoc.inf /u:%ANSWER% /q /z popd if %errorlevel% equ 0 ( echo %COMPUTERNAME% IIS installed OK \\192.168.1.8\share\install_log.txt ) else ( echo %COMPUTERNAME% IIS failed error%errorlevel% \\192.168.1.8\share\install_log.txt )逻辑说明脚本先把应答文件写到目标机器的临时目录避免每次都从网络共享读取。pushd会把当前位置切换到网络共享路径同时映射成一个临时盘符popd退出后自动断开映射。安装完成后把成功或失败的记录追加写到共享目录的日志文件里这样管理员只需要在控制台看日志就能知道哪些机器需要人工介入。6.2 部署后的自动验证批处理装完不代表结束批量装完后的验证比安装本身更耗时。我后来养成的习惯是把验证也写成脚本每台机器装完立即执行echo off set HOST%COMPUTERNAME% net start | findstr /i W3SVC nul if %errorlevel% neq 0 ( echo %HOST%: W3SVC not running exit /b 1 ) netstat -ano | findstr :80.*LISTENING nul if %errorlevel% neq 0 ( echo %HOST%: port 80 not listening exit /b 2 ) for /f tokens5 %%i in (netstat -ano ^| findstr :80.*LISTENING) do ( tasklist /fi PID eq %%i | findstr /i w3wp.exe inetinfo.exe nul if %errorlevel% neq 0 ( echo %HOST%: port 80 owned by unknown process exit /b 3 ) ) echo %HOST%: IIS verification passed exit /b 0参数说明findstr /i W3SVC忽略大小写地查找服务列表netstat -ano | findstr :80.*LISTENING筛选监听 80 端口的行for /f tokens5提取 PID 列再通过tasklist /fi PID eq %%i确认该进程到底是 IIS 还是其他软件。三段检查分别对应服务状态、端口绑定、进程归属三层全部通过才宣告部署成功。我在实操中发现一个细节第三段检查很关键。曾经有一台机器装完显示服务正常、端口也在监听结果一访问页面直接被弹到某个流氓软件的广告页。查了半小时才发现是一个电脑管家类软件抢占了 80 端口IIS 服务虽然启动但根本没绑上端口。如果不做进程归属检查这种情况下根本看不出异常。从那以后我每次批量装完 IIS 6.0都会强制走一遍“服务确认 → 端口确认 → 进程归属确认”的完整流程连带着把 metabase 备份、IUSR 权限验证也塞进部署文档里。这些步骤每一个都是从实际翻车记录里来的不是纸上谈兵。希望帮到你少走几步弯路。本文还有配套的精品资源点击获取
返回列表