ARTICLE DETAIL

资讯详情

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

IIS 6.0安装包详解:从Server 2003提源到静默安装与避坑

IIS 6.0安装包详解:从Server 2003提源到静默安装与避坑 简介IIS 6.0完整安装包面向需要在Windows XP环境中搭建Web服务器的用户解决XP默认未集成IIS 6.0、手动添加组件时又缺少依赖文件的问题。包内除必要组件外还含IIS_XPSP3适配补丁可确保在SP3版本系统上顺利安装运行。压缩包共273个文件以dll组件、exe安装程序、cab安装包、htm帮助文档及as_示例网页为主整体大小11.69MB获取和携带都较方便已有282人学习下载。资源支持Web服务、FTP服务、WebDAV和Windows身份验证并附带默认示例站点文件适合用于学习IIS安装配置、研究ASP动态页面也可支撑个人或小型企业快速搭建测试站点。1. 别再找 iis6.0.exeIIS 6.0 完整安装包的本质是一张 Server 2003 安装源如果你搜了一圈“iis6.0完整安装包”下载下来的却是一堆叫 setup.exe 或 autorun.exe 的文件先停下来——这个文件从根上就不存在。IIS 6.0 没有官方独立发行版它只作为 Windows Server 2003 的内置组件埋在系统安装源里。所谓“完整安装包”本质是一张完整的 Server 2003 安装盘、一份拷到本地的 i386 目录或者一个把源里 IIS 相关文件抽出来重新打包的离线安装包。这篇写给还在维护 2003 老机器的运维也写给要在虚拟机里复现经典站点的同学。我会把安装包怎么选、组件怎么勾、静默安装怎么写、装完怎么验证以及 5 个高频翻车点一次性讲清楚。2. IIS 6.0 安装包从哪来官方从没发过独立版三种安装源的取舍2.1 微软当年把 IIS 6.0 焊死在 Server 2003 上XP 用户最高只有 5.1先直接说结论IIS 6.0 和 Windows Server 2003 是强绑定的它不是一个能脱离系统单独跑的软件包。Windows XP Professional 自带的是 IIS 5.1具备一部分 IIS 6.0 的管理界面但底层没有 http.sys 内核驱动也没有工作进程隔离机制跟真正的 IIS 6.0 是两套东西。很多人拿 XP 的安装盘想装出 IIS 6.0折腾半天装出来一看版本还是 5.1这就是第一个认知坑。IIS 6.0 的“完整”体现在三个层面安装源里有整套组件文件系统里有 http.sys 内核驱动来接管 80 端口配置存放在 metabase%systemroot%\system32\inetsrv\MetaBase.xml而不是注册表。这三个特性决定了你找安装包时不能只看“有没有 iis 相关的 dll”而要看整个 Server 2003 安装源是否齐全组件的 cab 压缩文件是否都在。还有一个老生常谈但必须说的点IIS 6.0 发布后微软又补了 SP1、SP2 和一堆安全更新。搜到的“完整安装包”如果只是 RTM 版本装完会有两个问题一是补丁数量巨大二是默认配置的安全性比 SP2 差一截。我一般会优先找带 SP2 的安装源或者装完立刻打上 SP2。这个选择在维护老机器时能省下不少后续补丁的工作量。2.2 从系统盘提取 i386 目录做本地安装源我的标准做法只要你手里有一张 Windows Server 2003 带 SP2 的光盘或 ISO 镜像就可以自己做出一个能反复用的安装源。这里并不需要什么特殊工具核心思路是把光盘上的 i386 目录完整复制到本地硬盘然后安装时把安装源指到这个目录。听起来很简单但这里头有个容易翻车的细节i386 目录里大部分文件是 cab 压缩过的比如 iis.dl_、iisadmin.dl_这些不是能直接解压使用的文件安装程序会在安装过程中自动解压。你千万不要手动把扩展名改成 dll 去覆盖系统文件这是老手也会犯的错。复制命令可以直接用 xcopy把整张光盘的 i386 目录带隐藏文件和子目录结构原样搬到 D 盘xcopy X:\i386 D:\i386 /e /i /h /r /k /y每个参数在这个场景里都有实际用途/e 拷贝所有子目录包括空目录避免安装向导中途找不到某个子目录里的组件/i 表示目标是目录如果 D:\i386 不存在会自动创建/h 带上隐藏文件安装源里有些文件是隐藏属性漏掉会在安装后期报“找不到文件”/r 覆盖只读文件光盘文件很多带只读属性/k 保留原有属性防止复制完变成普通文件影响后续刻盘/y 在覆盖时直接确认避免批量操作卡在交互提示上。复制完你最好看一眼 D:\i386 里有没有 iis.dl_ 这个文件有它说明 IIS 组件源进来了。为什么我坚持把源放到本地硬盘而不是直接用光驱或 ISO 挂载的盘符实战里遇到过太多次安装进行到一半弹窗“请插入 Windows Server 2003 CD”结果光驱读盘抖动读到坏道或者虚拟光驱在某次重启后丢失盘符导致安装源失效。把源文件落地到硬盘上安装过程的源路径不会中途漂移这是最稳的一步。如果你有原始 ISO 文件也可以直接用解压工具把整张盘解出来效果一样。2.3 第三方整合安装包怎么选看目录结构、查时间戳、先过虚拟机网上下载的“IIS 6.0 完整安装包”主要有两种形态一种是完整的 Server 2003 ISO 镜像另一种是把 IIS 组件提取出来重新打包的压缩包。后者我一般只用于临时演示或实验环境生产机器从来不用。原因很简单你不知道发布者有没有在安装脚本里夹带私货。见过有人把 autorun.inf 改成木马启动项也见过整合包里多了一个看起来像驱动文件的 exe。选整合包时我会有三个固定动作。第一解压后看根目录有没有整个 i386 目录以及目录里有没有 iis.dl_、iisadmin.dl_ 这些核心文件如果只有一个 setup.exe没有安装源的目录结构放弃。第二看 i386 下文件的修改时间跨度正常提取的安装源文件时间戳应该集中在一两天内对应 SP2 集成镜像的制作时间如果时间戳前后跨度几年说明是多个来源的文件拼凑的这种包装到一半出问题的概率极高。第三不管发布者写了什么说明先在虚拟机里装一台干净的 Server 2003 试一遍确认安装过程不联网、不弹额外的交互窗再考虑在真实机器上用。这三种安装源的取舍可以这样看安装源形态优点缺点适用场景官方盘/ISO 提源文件完整、时间戳一致、可反复使用需要先准备镜像再复制稍微费时生产机、要长期维护的机器第三方整合 ISO开箱即用、附带常用补丁来源不明需自行校验虚拟机复现、临时测试提取版压缩包体积小、下载快极易被修改缺依赖件时难排查功能验证不碰生产我自己的习惯是能自己从镜像提的绝不下载整合包必须用整合包时先虚拟机试装没问题再进生产。下面开始说安装本身。3. 把 IIS 6.0 装进 Server 2003图形向导、无人值守应答文件与装后三件套3.1 图形界面最小安装6 个复选框一次勾对在 Server 2003 上装 IIS 6.0最直观的方式还是“添加或删除 Windows 组件”向导。路径是控制面板 → 添加或删除程序 → 添加/删除 Windows 组件 → 应用程序服务器 → 详细信息。这里有个容易看花眼的地方“应用程序服务器”这个大类默认是勾选的但它并不等于 IIS你得继续点“详细信息”进去在子组件里明确勾上 Internet 信息服务IIS。我推荐的勾选策略是IIS 管理器、万维网服务、万维网服务公共文件这三项是核心必须选。文件传输协议FTP服务看需求如果你只跑 Web 就不要勾少一个服务就少一个被扫描的攻击面。FrontPage 2002 服务器扩展千万不要勾这是个老坑装完它会在站点目录生成一堆 _vti_bin 之类的隐藏目录还会注册一堆 ISAPI 筛选器不用的项目把它留在勾选框里只会给后续排错添乱。应用程序服务器子项里的 ASP.NET 在 IIS 6.0 时代通常默认不勾除非你确定站点跑的是 .NET 1.1/2.0否则别动它。勾选的时候向导会弹“安装组件”的依赖提示比如“要使用万维网服务必须安装万维网服务公共文件”这属于正常联动直接确认即可。它还会要求指定安装源路径这时把路径指到你准备好的本地源比如 D:\i386 或镜像解压目录而不是留空让系统猜。如果源路径正确接下来就是一段带进度条的复制文件过程机子性能差的话可能要等五到十分钟。装完向导会提示“无法完成安装”才是有问题正常结束基本就成功了。这里给你一个最小勾选对照表照着选就不会多装不该装的东西组件是否勾选理由应用程序服务器勾选进入子项的前提Internet 信息服务IIS管理器勾选管理控制台排错必须万维网服务勾选Web 站点运行的核心万维网服务公共文件勾选依赖项自动联动文件传输协议FTP服务不勾不需要 FTP 就别开FrontPage 2002 服务器扩展不勾没需求纯增加 ISAPI 复杂度3.2 用 sysocmgr 跑无人值守一条命令装完整个 IIS批量装机或者远程操作时图形向导不够顺手这时可以写一个无人值守应答文件用 sysocmgr 调起来。在 Server 2003 里sysocmgr 是系统自带的 Windows 组件安装工具不需要额外装东西。应答文件是个文本文件内容这样写[Components] iis_common On iis_inetmgr On iis_www On iis_www_common On iis_asp On这几行分别控制iis_common 装 IIS 核心文件iis_inetmgr 装 IIS 管理器iis_www 装万维网服务iis_www_common 装万维网公共文件iis_asp 启用 ASP 脚本支持。组件名以你系统里 %windir%\inf\sysoc.inf 的 [Components] 段为准不同版本的 2003 可能有细微差异写应答文件前先打开这个文件核对一下别照抄完直接跑。把上面的内容存成 D:\iis_install.txt然后执行sysocmgr /i:%windir%\inf\sysoc.inf /u:D:\iis_install.txt /q /r这条命令的参数拆开讲/i 指定组件安装定义文件默认就是 sysoc.inf/u 指定无人值守应答文件也就是刚才写的那个 txt/q 静默模式不弹交互窗口/r 禁止安装结束后的自动重启提示。如果你的机器上源路径不是系统默认查找位置还需要在应答文件里补一个 [InternetServer] 段来指定具体段名同样以 sysoc.inf 里的实际写法为准。更保险的做法是先把源路径配到注册表或本地目录里让安装程序能从固定位置找到文件这样 /u 应答文件只负责组件开关排错面更小。用 sysocmgr 装完以后去 services.msc 里扫一眼正常情况下能看到三个跟 IIS 直接相关的服务IIS Admin ServiceIISADMIN、World Wide Web Publishing ServiceW3SVC、HTTP SSLHTTPFilter。IISADMIN 是管理服务负责读取 metabaseW3SVC 是站点服务负责工作进程生命周期HTTP SSL 负责 SSL 和一部分底层请求处理。这三个都在说明安装成功。3.3 装完立刻要做三件事服务开机自启、匿名账号状态、ASP 扩展允许装完 IIS 6.0 不代表能直接上线有三件事我每次都会在重启前做掉。第一件是把 IISADMIN 和 W3SVC 的启动类型设为自动因为 2003 默认的服务配置有时候会把 IIS Admin Service 设成手动一旦服务器重启IIS 不会自动起来网站跟着静默下线。用 sc 命令改最直接sc config IISADMIN start auto sc config W3SVC start auto命令里的 start 后面必须有个空格这是 sc 命令的老脾气写成 startauto 反而会报参数错误。两个服务都要设因为 W3SVC 在启动时会去拉 IISADMIN依赖链断了就起不来。第二件事是确认匿名访问账号有效。IIS 管理器里打开“网站”属性的“目录安全性”选项卡点“身份验证和访问控制”的编辑按钮确认“启用匿名访问”是勾上的匿名账号指向 IUSR_机器名并且勾选了“允许 IIS 控制密码”。这个 IUSR 账号的密码同时存在系统 SAM 和 IIS metabase 两处如果不同步访问任何页面都会弹 401而这个坑在 GUI 里极难一眼发现。第三件事是把“Web 服务扩展”里的 ASP 从“禁止”改为“允许”。IIS 6.0 出于安全考虑默认把所有动态内容扩展全部设成“禁止”包括 ASP、ASP.NET 和各类 ISAPI。很多第一次接触 6.0 的人装完发现 ASP 页面全部报错实际上是这里没放开而不是程序写得有问题。右键状态列点“允许”即可这就是那句老话里的主动安全设计但同时又是新手最容易忽略的开关。4. 装完不等于能跑验证安装结果、建第一个站点并打通 ASP 脚本映射4.1 三步验证 IIS 6.0 是否在服务服务状态、端口监听与默认网站装完 IIS 6.0第一件事不是急着建站点而是确认系统层面真的在对外服务。我会按顺序做三个检查每一步都有它存在的理由。第一步看服务状态用命令比用服务管理器快net start | findstr /i IIS W3SVC正常输出会包含 IIS Admin Service 和 World Wide Web Publishing Service。如果只看到一个说明依赖服务没起来这时去系统事件查看器里找来源为 Service Control Manager 的错误日志它会告诉你依赖链断在哪。第二步看端口监听IIS 6.0 的 http.sys 作为内核驱动会直接绑定 80 端口服务状态有时候会骗人但端口监听不会netstat -ano | findstr :80看到 0.0.0.0:80 且状态为 LISTENING说明 http.sys 已经把 80 端口接管了。如果端口被别的程序占用比如本机装了 Apache 或某些软件自带 Web 服务IIS 就会出现“服务已启动但访问不到”的怪象。第三步才是打开浏览器输入 http://127.0.0.1 或 localhost看到默认网站页面说明安装链路通了。这三步做完你应该得到一个明确判断服务在跑、端口在听、默认页面能返回。如果前两步正常第三步还是出不来页面问题多半出在默认站点或默认文档上这属于配置层的问题下一节细说。这里要提醒的是验证尽早做别等所有配置改完再查那样问题迭问题排错成本会高很多。4.2 新建网站与主机头绑定两个站点抢 80 端口时谁说了算IIS 6.0 支持在同一个 80 端口上跑多个网站靠的是“主机头”区分。新建网站的路径是IIS 管理器 → 网站 → 右键 → 新建 → 网站跟着向导走。关键参数有这么几个描述随便填这是给人看的名字IP 地址一般选“全部未分配”端口填 80主机头填你要绑定的域名比如 www.oldweb.local。如果只有一个站点主机头可以留空如果有多个站点这个字段就决定了访问 www.a.local 和 www.b.local 时请求分别落到哪个站点。物理路径指到站点文件所在目录比如 C:\Inetpub\wwwroot。权限设置这里不要全勾只勾“读取”和“运行脚本如 ASP”写入和浏览目录这两项在大多数生产站点里应该关掉。浏览目录一开访问者可以直接列目录看到文件清单等于把站点结构泄露出去。写入权限更危险一旦脚本被绕过攻击者能直接往站点目录丢文件。建完站点后默认文档列表是你必须检查的地方。右键站点属性 → 文档选项卡默认列表里有 Default.htm、Default.asp、index.htm、iisstart.htm。IIS 按列表顺序从上到下找文件找到哪个就返回哪个。注意 Default.asp 默认在 index.htm 下面如果你的站点入口是 index.asp记得点“添加”加进去否则直接输入域名会 404。很多老系统换服务器后出现“首页访问不了”都是这个顺序问题不是代码问题。4.3 把 ASP 和父路径打通、64 位机器上开 32 位模式如果站点要跑 ASP安装层面的 ASP 扩展启用第 3 章说的“Web 服务扩展”只是第一步还有两个配置会拦路。第一个是“启用父路径”。ASP 代码里经常出现类似 Server.MapPath(../include/head.asp) 这种上级目录引用而 IIS 6.0 默认禁止父路径访问。设置位置在站点属性 → 主目录 → 配置按钮 → 选项选项卡勾上“启用父路径”。不勾的话脚本执行到上级目录引用会直接报错而且错误内容有时候是误导性的“类型不匹配”。这个开关和“Web 服务扩展”是两回事别搞混前者是权限策略后者是扩展允许。第二个拦路的是 64 位系统和 32 位 ISAPI 的兼容问题。如果你在 64 位的 Server 2003 上跑 32 位的 ASP 脚本或第三方 ISAPI 扩展比如某些老厂商的加密组件IIS 6.0 默认用 64 位工作进程加载这些 dll结果必然是加载失败站点崩溃或者扩展灰掉。解决办法是让 IIS 以 32 位模式运行cscript %systemdrive%\inetpub\adminscripts\adsutil.vbs SET W3SVC/AppPools/Enable32BitAppOnWin64 TRUEcscript 是 Windows 自带的脚本宿主adsutil.vbs 是 IIS 6.0 官方提供的 metabase 管理脚本路径默认在 C:\inetpub\adminscripts 下。SET 后面跟的是 metabase 属性路径W3SVC/AppPools 表示万维网服务下的应用程序池配置Enable32BitAppOnWin64 就是打开 32 位应用支持的开关TRUE 表示启用。改完这个属性后执行 iisreset /restart 让配置生效iisreset /restart这个命令会重启全部 IIS 服务所有站点会瞬间中断几秒生产环境一定要避开业务高峰执行。如果站点跑的是 .NET还要用 aspnet_regiis.exe -i 重新注册对应版本的 ASP.NET 脚本映射否则 IIS 里会出现“未知的脚本扩展”一类的问题。5. IIS 6.0 安装配置避坑清单5 个让人反复翻车的现象与排查路径5.1 装到一半弹“无法复制文件”或“找不到源文件”现象安装向导走到复制文件阶段突然弹窗报错“安装程序无法复制文件: iis.dll: 错误 2”或者“找不到源文件”。 原因安装源不完整或者安装程序找不到刚才指定路径里的文件。尤其是在使用第三方整合包时制作方漏掉了部分依赖文件安装过程中前段正常、后段文件缺失。 解决先用第 2 章的 xcopy 命令把 i386 目录完整还原确认 iis.dl_、iisadmin.dl_ 都在如果用的是 ISO 解压目录重新解压一遍再指定源路径不要一边从网络共享路径安装一边断开网络网络共享断连也会报同样的错。最稳的永远是本地硬盘源。5.2 IIS 服务全部已启动访问 localhost 却是 404现象services.msc 里 IIS Admin Service 和 W3SVC 都是“已启动”netstat 看 80 端口也在监听但浏览器访问 localhost 返回 404。 原因默认站点被删了或者默认文档列表里没有站点的首页文件。我在迁移老站点时遇到过更隐蔽的情况站点物理目录下只有 index.asp而默认文档列表的顺序是 Default.htm 优先IIS 按顺序找第一个存在的文件时发现 Default.htm 不存在却不会继续去找 index.asp于是直接 404。 解决右键站点属性 → 文档选项卡把 index.asp 添加到默认文档列表并移动到顶端确认站点状态不是“已停止”在 IIS 管理器里看一下默认网站的物理路径确认目录里确实有文件。这步排查通常五分钟内能定位。5.3 ASP 页面返回 500“启用父路径”勾了照样报错现象ASP 页面运行报 HTTP 500错误内容是“配置错误”或“类型不匹配”但站点属性里“启用父路径”已经勾上了。 原因最常见的是“Web 服务扩展”里 ASP 的状态还是“禁止”。很多新手只记得勾父路径不知道 ASP 扩展默认禁止结果启用了父路径也白搭。另外如果应用池的身份是本地系统且目录权限不足ASP 也会 500错误日志里会提示“检索 COM 类工厂中 CLSID 时失败”。 解决第一步去 IIS 管理器 → Web 服务扩展把 ASP 设为允许第二步看应用程序池属性身份设置为 NetworkService第三步勾选父路径改完重启站点。按这个顺序排查ASP 500 的 90% 都能解决。5.4 重启之后 IIS 再也不起来手动启动秒失败现象服务器重启后IISADMIN 和 W3SVC 全部处于停止状态手动启动立刻弹“服务返回错误 1”。 原因依赖服务没起来最常见的是 Remote Procedure CallRPC或 HTTP SSL 服务没启动也可能是 metabase 文件损坏导致 IISADMIN 读取配置失败。 解决先看系统事件日志来源为 Service Control Manager 的红色错误里会写明依赖服务名依次确认 RPC、HTTP SSL 已启动然后执行 iisreset /start 尝试冷启动如果还是失败打开 IIS 管理器 → 操作菜单 → 备份/配置从历史备份恢复 metabase。注意不要直接用记事本改 MetaBase.xml改坏了连备份都没得恢复。5.5 64 位系统上 32 位 ISAPI 反复崩溃现象64 位 Server 2003 上装了 32 位的 ISAPI 扩展事件查看器里频繁出现 w3wp.exe 的错误站点间歇性打不开过一会儿又自己恢复。 原因IIS 6.0 在 64 位系统上默认以 64 位模式运行工作进程加载 32 位 dll 时直接失败。老厂商的安全组件、支付控件很容易踩这个坑。 解决用第 4 章那段 adsutil.vbs 命令把 Enable32BitAppOnWin64 设为 TRUE然后 iisreset /restart。改完再看事件日志确认错误不再出现。这个坑不踩一次很难想到当年我在这上面耗了一整天才定位到原因。6. 用 telnet 手写一个 HTTP 请求确认 IIS 6.0 在服务一套遗留系统可用的验证手艺6.1 直连 80 端口手工敲一次原始 HTTP 报文IIS 管理器显示的“已启动”有时会骗人但 http.sys 的响应不会。我最常用的一套验证方式是 telnet 直连 80 端口手写一个最原始 HTTP 请求看它返回什么。先保证 Telnet 客户端已安装2003 的“添加或删除 Windows 组件”里有 Telnet Client然后执行telnet 127.0.0.1 80连上后输入下面三行每行以回车结束GET / HTTP/1.1 Host: localhost Connection: close再多敲一个回车表示请求头结束。如果 IIS 在服务你会看到类似这样的返回HTTP/1.1 200 OK Server: Microsoft-IIS/6.0 Content-Type: text/html ETag: xxxxxx:yyyyy这里最值得看的是 Server 头和 ETag 格式。Server 头显示 Microsoft-IIS/6.0 说明是 IIS 6.0 直接响应如果显示 Microsoft-HTTPAPI/2.0说明请求根本没有到 IIS 的站点逻辑可能是别的程序占着 80 端口。IIS 6.0 的 ETag 格式是冒号分隔的多段字符串跟 IIS 7 之后的两段格式有明显区别可以作为判断版本的辅助依据。这个方法的好处是不依赖浏览器、不走主机头解析、不受默认文档顺序影响只要站点能响应第一眼就能看到状态码和服务器标识。6.2 HTTPERR 日志与 w3wp 转储是最后一道防线如果 telnet 连得上但返回的是 503事情就有点复杂了。IIS 6.0 会把底层的连接错误写到独立于 IIS 日志的 HTTPERR 文件里路径在%systemroot%\system32\LogFiles\HTTPERR\httperr*.log这个日志记录了一些站点日志看不到的信息比如 Connection_Abandoned_By_AppPool、503 的细分状态码。用记事本打开最新的 httperr 文件搜索当天日期段就能看到工作进程把连接丢掉的直接原因。如果日志显示 app pool 频繁回收配合事件查看器里的 w3wp.exe 错误基本可以定位到是应用池内存限制问题还是脚本死循环。这套“telnet 请求 HTTPERR 日志”组合是我在 2003 老机器上最依赖的验证链。现在每接手一台遗留的 IIS 6.0 机器我都会先把这三段检查跑一遍服务状态、端口监听、手写请求返回正常才做后面的迁移或排障。这套习惯帮我避免过太多次“界面显示正常但实际无法访问”的假象也写进了我给团队的运维交接清单。希望帮到你。本文还有配套的精品资源点击获取
返回列表