news 2026/10/1 4:45:44

Windows Server IIS从安装到排错:Web站点部署完整指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Windows Server IIS从安装到排错:Web站点部署完整指南

很多刚接触Windows服务器的人,第一次听说IIS都是一脸懵——这到底是个什么东西?为什么别人让我装个网站动不动就说“开一下IIS”?其实说白了,IIS(Internet Information Services)就是微软Windows系统里自带的Web服务组件,装上它,你的Windows机器就能像Linux上的Nginx或Apache一样对外提供网页访问。尤其在企业内网、Windows/.NET技术栈、或者你手上只有一台Windows Server又不想额外折腾Docker的时候,IIS就是最省事的方案。

这篇我把自己这些年装IIS、配IIS、被IIS各种报错折磨的经验完整梳理一遍。不光是“下一步下一步”的安装向导,还包括装完之后必做的验证、你大概率会遇到的权限和配置文件报错、以及怎么把第一个网站真正跑起来。无论你是刚入行的运维、需要自己搭测试环境的后端开发,还是公司里兼职管服务器的IT,按这篇走一遍都能把IIS从零到落地摸通。

1. 为什么我建议新运维先把IIS装明白

先别急着点安装向导,我想先花点时间说说选型的事。总有人问:现在都是Nginx和Docker的天下了,还有必要学IIS吗?我的回答是:要看你在什么环境里干活。

如果你所在的公司是典型的Windows生态——AD域控、Exchange、SQL Server、SharePoint——那IIS根本绕不开。微软系产品对IIS的依赖是写进架构里的,很多企业应用在部署文档里第一行就是“请先安装IIS功能”。再加上.NET Framework和ASP.NET相关的老系统,只有IIS才能跑得最省心。虽然Kestrel可以独立托管.NET应用,但企业要的往往是Windows集成认证、应用程序池隔离、图形化管理这些能力,IIS依然是生产环境的默认选择。

反过来,如果你的业务是纯静态站点、前后端分离的Node.js应用、或者容器化微服务,那确实不一定需要IIS。Nginx在并发性能和配置灵活性上有优势,Docker则让环境一致性变得很简单。但即便是这些场景,IIS也可以作为一个边缘入口做反向代理。我见过不少混合架构,外层Nginx转发,内层IIS承载Windows集成认证的旧系统。

所以我的建议是:不要抱着“这技术过时了”的心态跳过IIS。它不是你想象中的上古遗留物,到今天依然是Windows平台上部署Web服务最权威、最标准、和系统层集成最深的方式。把这套东西装明白,本质上是搞懂了Windows服务器的角色管理、进程隔离、权限体系和安全模型的一整套逻辑。

顺便辟个谣:IIS不是一个需要去官网下载的独立软件包,它是Windows操作系统内置的一项“功能”或“角色”。你不需要找什么“IIS安装包.exe”,只要在系统设置或服务器管理器里把对应功能勾上,系统就会从本地组件库里把文件装好。这个认知很多人搞错,导致到处找下载,浪费时间还容易中招。

2. 安装前先看清:系统版本、IIS版本与准备工作

2.1 不同Windows版本对应的IIS版本

IIS是跟着Windows版本走的,不同系统装出来的IIS版本和功能集有一些差异。装机之前先认清自己手上的系统是什么,避免照着别人的教程点了一堆结果发现选项对不上。

Windows系统版本对应IIS版本常见使用场景
Windows Server 2022IIS 10.0最新服务器系统,生产环境主力
Windows Server 2019IIS 10.0目前存量服务器中占比很高
Windows Server 2016IIS 10.0老项目常见运行环境
Windows 10 / 11 专业版/企业版IIS 10.0开发调试、本机测试、演示环境
Windows 10 / 11 家庭版部分组件受限建议升级系统版本或换专业版

判断系统版本很简单,按下Win + R,输入winver回车,弹窗里会显示完整的系统版本和内部版本号。服务器系统还能在“服务器管理器”首页看到当前OS信息。

这里提醒一下:家庭版Windows虽然也能看到“启用或关闭Windows功能”里的IIS条目,但有些子组件是缺失的,比如IIS管理器控制台在某些家庭版上无法使用。如果你是想本机做开发测试,建议至少用专业版。

2.2 安装前的环境检查清单

正式开始安装之前,花两分钟做这三件事,能让你后面少踩很多坑:

  • 确认管理员权限:无论是图形界面还是命令行,装IIS都必须以管理员身份操作。普通用户账号在UAC弹窗时直接让你怀疑人生。
  • 确认系统激活状态:未激活的Windows Server可能出现组件安装失败,或者装完IIS后服务无法启动。别问我怎么知道的,有一次我拿了个未激活的评估版Server 2019装了半小时,最后发现是激活状态的问题。
  • 确认当前是否已安装IIS:有些系统镜像默认带了IIS,重复安装会浪费时间,也可能造成组件状态异常。检查方法很简单,在“服务”里找World Wide Web Publishing Service(W3SVC),如果存在且启动类型是自动或手动,说明IIS已经装过了。也可以用命令行Get-Service W3SVC查看。

2.3 关于联网和系统更新源

图形界面从“服务器管理器”装IIS时,默认会从系统本地源或Windows Update服务器拉取组件文件。如果服务器处于内网隔离环境、没有配置WSUS(Windows Server Update Services)或者无法访问微软更新服务器,安装过程可能卡在“正在安装”很长时间甚至报错。

对于离线环境,两个办法:

一是提前准备好系统镜像,挂载后指定源路径。在服务器管理器里打开“添加角色和功能”时,向导会让你选“从服务器池中选择服务器”,这步不会触发下载;真正缺文件时,可以到“本地服务器”页面的“Windows更新”设置里指定备用源。

二是直接用命令行指定Source参数,这个后面在PowerShell章节细说。总的来说,先在软件源列表里确认能正常获取组件,再开始安装,能避免装到一半卡死的尴尬。

3. 图形界面安装全流程:服务器管理器与Windows功能两种路径

3.1 服务器系统:使用服务器管理器添加角色和功能

Windows Server系统的标准安装路径是:打开“服务器管理器” → 点击右上角“管理” → “添加角色和功能”。接下来会进入一个向导:

  • “开始之前”页面直接下一步;
  • “安装类型”选择“基于角色或基于功能的安装”;
  • “服务器选择”确认选中的是本机;
  • “服务器角色”这步是核心,勾选“Web服务器(IIS)”,弹出的“添加Web服务器(IIS)所需的功能”对话框直接点“添加功能”;
  • “功能”页面如果有其他需要可以顺带勾选,比如“.NET Framework 4.8功能”、“Telnet客户端”之类,IIS本身不强依赖这些;
  • 走到“Web服务器角色(IIS)”页面继续下一步,在“角色服务”列表里仔细勾选你需要的内容。

“角色服务”这一步很关键,很多人只勾了一个大项,结果ASP.NET用不了、管理工具也没有。我建议的常用组合是:

  • 常见HTTP功能:默认全勾(静态内容、默认文档、HTTP错误等);
  • 运行状况和诊断:建议至少勾上“HTTP日志记录”和“请求监视”,排错必用;
  • 应用程序开发:按需勾选。.NET应用对应勾“.NET Extensibility”和“ASP.NET”;历史遗留系统可能要勾“ASP”;CGI偶尔会用到;WebSocket协议是在现代应用里常用到的,建议勾上;
  • 安全性:如果不需要单独配置SSL证书或URL授权,可以保持默认。等真正用到再回来补装;
  • 管理工具:务必展开“IIS管理脚本和工具”和“IIS管理服务”,IIS管理器控制台就在这里。很多人装完找不到图标就是漏了这步。

勾完之后点“安装”,等待进度条走完,右上角会提示“安装成功”。不需要重启系统,但保险起见,如果提示需要重启的组件较多,可以顺手重启一次。

3.2 桌面级系统:控制面板的“启用或关闭Windows功能”

如果你用的是Windows 10/11开发机,路径完全不同,但也更简单:控制面板 → “程序” → “启用或关闭Windows功能”(也可以直接按Win + R输入optionalfeatures回车)。弹出的“Windows功能”窗口里找到“Internet Information Services”:

  • 把“Internet Information Services”主项勾上;
  • 展开它,勾选“万维网服务 → 应用程序开发功能”里的.NET Extensibility 4.8和ASP.NET 4.8;
  • 再勾选“Web 管理工具 → IIS 管理控制台”;
  • 确定后系统会自动配置,等待完成。

桌面版IIS装完之后,在开始菜单搜索“IIS”就能看到“Internet Information Services (IIS)管理器”。如果找不到这个管理器,多半是上面的管理控制台没有勾上,回去重新打开功能窗口补勾即可。

3.3 两种路径的适用性判断

很多教程告诉你服务器系统要这样装、桌面系统要那样装,但实际工作中还有个变通场景:你手里的Windows Server版本太老(比如Server 2008 R2),控制面板里其实也有“打开或关闭Windows功能”入口。这个功能面板在服务器系统上同样存在,只是入口藏得深一点,路径是“控制面板 → 程序和功能 → 打开或关闭Windows功能”。如果你不想走服务器管理器向导,也可以在这里直接勾IIS,效果等价。

我的经验是:生产服务器优先用服务器管理器,因为能看到更强的进度反馈和依赖检查;开发机或快速验证环境用optionalfeatures,点几下就完事,不用来回翻向导。

4. PowerShell与DISM批量安装:适合无人值守和脚本交付

如果你只需要在一台机器上装一次IIS,图形界面绰绰有余。但如果你要一次性交付几十台服务器,或者想在CI/CD流程里自动准备一台Web服务器,图形界面就完全不现实了。这时候PowerShell和DISM就是正解。

4.1 PowerShell安装IIS角色

以管理员身份打开PowerShell,执行:

Install-WindowsFeature -Name Web-Server -IncludeManagementTools

这条命令的意思很直白:安装Web服务器角色,并且把管理工具(IIS管理器、命令行工具等)一并带上。-IncludeManagementTools这个参数建议每次都带上,否则装完连管理器图标都没有,还得手动补装。

如果只需要IIS核心引擎,不需要管理界面,可以简化为:

Install-WindowsFeature Web-Server

4.2 常用子功能与安装参数

实际部署中常常需要按项目定制子功能,比如装完IIS还要支持ASP.NET。可以先用Get-WindowsFeature Web-*查看所有和Web相关的功能名称,然后按需组合:

Install-WindowsFeature -Name Web-Server, Web-Asp-Net45, Web-WebSockets, Web-Mgmt-Console -IncludeManagementTools

常用功能名称对照表(这部分名称在Server 2016/2019/2022和Win10/11上基本一致,只是桌面版部分功能可能不可用):

功能名称作用
Web-ServerIIS核心引擎
Web-WebServerWeb服务器角色,通常和Web-Server互相关联
Web-Static-Content静态内容托管
Web-Asp-Net45ASP.NET 4.5/4.8支持
Web-Net-Ext45.NET扩展性支持
Web-WebSocketsWebSocket协议支持
Web-Mgmt-ConsoleIIS管理器图形界面
Web-Mgmt-ToolsIIS管理脚本和工具
Web-Http-LoggingHTTP日志记录
Web-Request-Monitor请求监视器
Web-Http-ErrorsHTTP错误页
Web-Default-Doc默认文档(默认页)
Web-Dir-Browsing目录浏览

4.3 DISM方式的补充

如果你的Windows镜像本身比较精简,或者PowerShell的Install-WindowsFeature在当前系统上不可用(比如某些Win10精简版移除了服务器管理器模块),可以改用DISM:

dism /online /enable-feature /featurename:IIS-WebServerRole /featurename:IIS-ManagementConsole /all

DISM的注意点是它不会自动把依赖项抓全,有时候你需要先开IIS-WebServerRole再开其他子功能。/all参数表示启用所有父功能,这个参数建议保留。

4.4 离线环境指定源路径

前面提到的离线环境问题,在PowerShell里可以通过-Source参数指定安装源,比如:

Install-WindowsFeature Web-Server -Source D:\sources\sxs -IncludeManagementTools

这个D:\sources\sxs就是系统安装镜像里sources\sxs文件夹的解压路径。离线部署时,先把安装镜像ISO挂载到服务器上,再把这个参数指过去,就能正常安装,这也是批量交付时最稳的方式。

5. 装完别急着用:验证环境、认识IIS管理器、放行防火墙

5.1 三步验证IIS是否真正可用

装完IIS后,我习惯用以下三步确认环境是好的,而不是直接丢一个网站上去然后一脸懵地排查:

第一步,打开浏览器,访问http://localhost。如果出现IIS默认欢迎页(那个“Windows Server”或“Internet Information Services”的蓝色页面),说明核心服务已经正常启动。这一步也顺带验证了IIS默认站点Default Web Site的状态。

第二步,打开“服务”管理器,确认World Wide Web Publishing Service的状态是“正在运行”,启动类型是“自动”。如果服务没起来,八成是端口被占用或配置文件有问题,这种问题越早发现越好排查。

第三步,用命令行查看站点监听状态:

netstat -ano | findstr :80

如果能看到LISTENING状态且进程PID对应的进程是System或w3wp.exe相关进程,说明80端口已经在正常监听了。看到这个结果心里就有底了——IIS真的装好了,不是在装样子。

5.2 认识IIS管理器的核心界面

打开IIS管理器,左侧是“连接”面板,顶部是当前服务器节点,展开后能看到“应用程序池”和“网站”两个核心目录。中间区域是功能视图,按模块组织的,比如“ASP.NET”、“IIS”、“管理”等分组。右侧是“操作”栏,所有针对当前选中对象的快捷操作都在这。

几个必须记住的位置:

  • 应用程序池(App Pool):每个网站运行时的进程隔离容器。你把鼠标点到一个网站名称上,右侧操作栏里才有“基本设置”和“应用程序池”。不同的网站可以分配到不同的池,互相隔离,一个崩溃不影响另一个。
  • 默认站点:安装后自动生成,物理路径在C:\inetpub\wwwroot。这个目录就是IIS的网站根目录的默认位置。
  • 配置存储:IIS的配置集中在C:\Windows\System32\inetsrv\config下的applicationHost.config,里面是全局配置。没事不要手动改,改错了整个IIS可能起不来。后续遇到一堆报错都和这个目录的权限有关。

5.3 防火墙放行HTTP/HTTPS端口

IIS装好后,很多人在本机能访问,但局域网其他电脑访问不了,第一个想到的往往是IIS配置错了。实际上大部分情况是Windows防火墙默认拦截了80端口。

打开“Windows Defender防火墙高级安全”,点“入站规则” → “新建规则” → 选择“端口” → 协议选TCP、端口填80,443→ 允许连接 → 应用到所有配置文件。或者直接用命令行:

netsh advfirewall firewall add rule name="IIS HTTP 80" dir=in action=allow protocol=TCP localport=80 netsh advfirewall firewall add rule name="IIS HTTPS 443" dir=in action=allow protocol=TCP localport=443

这里特别提醒:如果你用的是云服务器(阿里云、腾讯云等),光改服务器内的防火墙不够,云控制台里的“安全组”也要放行对应端口。每次我在云服务器上排查半天发现是安全组没放开,都想抽自己。

防火墙放行之后,在另一台电脑浏览器输入服务器的IP地址,能看到IIS欢迎页,说明网络层全通了。到这一步,IIS安装才算真正画上句号。

6. 高频报错排雷:0x80005000、administration.config、.NET 8缺失

装了这么多年IIS,我总结出一个规律:安装过程本身顺顺利利的人,反而会在装完之后被各种报错折腾得够呛。下面这三个是搜索量最高、也最折磨人的,我把完整排查思路写出来,你照着链路走,能比自己瞎试省一天时间。

6.1 应用程序池权限设置失败:未知错误(0x80005000)

先描述一下这个报错的典型场景:你在IIS管理器的“应用程序池”里选中一个池,点右键“高级设置”,想改“标识”(Process Model → Identity)为LocalSystem或自定义账号,结果弹窗报错:“请手动为其设置localsystem权限未知错误(0x80005000)”。这个报错把我当年气得够呛,因为这问题不是你的操作不对,而是IIS管理器在读写配置时出了问题。

0x80005000这个错误码,从我的排查经验看,最常见的根因是系统时间异常。AD域环境里,如果服务器时间跟域控时间偏差太大,Kerberos认证会失败,任何对配置库的写入操作都可能报这个错。不少公司内网服务器没配好时间源,跑着跑着时间就漂移了。

完整排查链路建议这样走:

  • 第一,检查系统时间。用w32tm /stripchart /computer:ntp.aliyun.com(或者你的内网时间服务器)对比时差,差超过5分钟就先用w32tm /resync强制同步一次。
  • 第二,检查事件查看器。打开“Windows日志 → 系统”,过滤来源为Schannel或Krb5的错误事件。如果有大量Kerberos相关的错误,那基本锁定时间或域认证问题。
  • 第三,还是报错就检查配置目录权限。IIS管理器读写的是C:\Windows\System32\inetsrv\config,如果这个目录的NTFS权限被改过、或者Authenticated Users组失去读权限,也会报类似错误。右键该文件夹 → 属性 → 安全 → 确认Authenticated Users至少要有“读取和执行”权限。
  • 第四,如果前三步都不管用,直接绕开图形界面。用命令行修改应用程序池标识:
%windir%\system32\inetsrv\appcmd.exe set apppool "DefaultAppPool" /processModel.identityType:LocalSystem

命令行能改成功说明配置文件本身没坏,只是IIS管理器的权限交互有问题;命令行也失败,那就要考虑修复.NET Framework或者修复安装IIS了。

6.2 “执行此操作时出错,文件名:C:\Windows\System32\inetsrv\config\administration.config”

这个报错比上面那个还常见,通常是在IIS管理器里做任何操作时弹出来的(比如启动默认网站),报错信息末尾会带着配置文件路径...\config\administration.config。第一次见到的时候我还以为IIS安装损坏了,差点重装系统。

这个报错的根源几乎都指向IIS配置目录权限异常或配置文件被锁定。IIS管理器启动时会读取administration.config和applicationHost.config,一旦读不到或没有权限,就会以这种形式弹错。

排查步骤:

  • 第一步,先检查文件是否存在。资源管理器进入C:\Windows\System32\inetsrv\config\,看看administration.config文件在不在。不在就从别的同系统版本机器上拷一份过来,或者用DISM修复系统文件。
  • 第二步,检查文件的访问权限。右键administration.config→ 属性 → 安全,确认SYSTEM和Administrators有完全控制权限。如果是Authenticated Users权限丢失导致IIS管理器无法读取,可以用icacls命令重置:
icacls C:\Windows\System32\inetsrv\config\administration.config /grant "SYSTEM:(F)" "Administrators:(F)" "Authenticated Users:(RX)"
  • 第三步,如果权限没问题,考虑是否有第三方软件在占用。杀毒软件或安全软件经常会把IIS的配置文件目录列入防护名单,导致IIS管理器无法正常读写。把C:\Windows\System32\inetsrv目录加入杀毒软件白名单再试。
  • 第四步,尝试命令行工具看能否绕过IIS管理器:
%windir%\system32\inetsrv\appcmd.exe list sites

如果appcmd命令能正常返回网站列表,说明IIS引擎本身是健康运行的,问题出在IIS管理器的配置交互上。这种时候的终极解决手段是把IIS管理器组件卸载重装一次(还是在“启用或关闭Windows功能”里操作),配置文件不用删,管理器重新注册一遍通常就好了。

6.3 新装了.NET 8,IIS里却没有ASP.NET Core Module

现在的.NET生态有个高频场景:你在服务器上装了.NET 8 Hosting Bundle(所谓“托管捆绑包”),系统也提示安装成功,但打开IIS管理器看模块列表,找不到AspNetCoreModuleV2,发布上去的.NET网站直接返回502.3或500.19。

这个坑的本质是安装顺序和模块注册问题。.NET Core Hosting Bundle在安装时会向IIS注册原生模块,但如果你在装Bundle之前没装IIS,注册动作会被跳过。你实际上是“先装了.NET再装IIS”,方向反了。

解决办法:

  • 重新运行一次.NET 8 Hosting Bundle的安装程序,选择“修复”或“卸载后重装”,安装程序会检测到IIS环境并重新注册模块。
  • 重装完执行iisreset重启IIS服务,然后重新打开IIS管理器,在“模块”里确认有AspNetCoreModuleV2。
  • 另外,IIS管理器的“应用程序池”里,.NET 8网站的池的“.NET CLR版本”建议设置为“无托管代码”,因为.NET 8应用自己是独立运行时的,不需要IIS托管CLR。这是很多人忽略的点:选了.NET CLR版本 v4.0反而会报错,选“无托管代码”才正确。

6.4 为什么你的站点总是403.14或404

这两个报错其实不是IIS安装问题,但只要建了站就会遇到,我顺手一起说了。

  • 403.14:IIS默认禁止目录浏览,如果你的站点根目录下没有默认文档(index.html或default.aspx),访问http://服务器IP/就会报403.14。解决方法是确认根目录有默认文档,或者在IIS管理器“默认文档”里加上你的首页文件名。
  • 404:文件放在别的盘符或外部目录,IIS进程(应用程序池身份)没有该目录的读取权限,就会返回404而不是403。解决办法:在网站的“物理路径”指向的目录上,给IIS_IUSRS组添加读取权限,操作方法是在资源管理器里右键文件夹 → 属性 → 安全 → 编辑 → 添加 → 输入IIS_IUSRS→ 给予“读取和执行”权限。

7. 把网站真正跑起来的完整流程:创建站点、绑定、权限与备份还原

7.1 准备站点文件和物理路径

不管你是要部署.NET应用、还是Unity WebGL导出的纯静态页面、或者就是一个最简单HTML测试页,先把文件放到位。我习惯把站点目录和系统盘分离,比如放在D:\WebSites\MySite,好处是系统盘崩了重装不丢网站文件,也方便直接备份目录。

文件放好后,在IIS管理器左侧“网站”上右键 → “添加网站”。界面上的几个字段要理解透了再填,别乱来:

  • 网站名称:只是个标识,和实际绑定的域名/端口无关,随意但有意义就行。
  • 应用程序池:默认会创建一个同名的新池。如果已有想要的池,可以直接选。
  • 物理路径:指向你的站点文件目录,这里要注意别只填根目录,如果你希望http://ip/直接打开站点,路径就要指向含默认文档的那一层。
  • 绑定类型:HTTP对应80端口,HTTPS对应443端口。刚开始测试用HTTP就行。
  • IP地址:默认“全部未分配”即可,意思是服务器上所有IP都能访问这个站点。
  • 端口:默认80。如果你同一台机器要跑多个网站,可以用不同端口区分,比如:8080。
  • 主机名:也就是域名。内网测试没域名可以留空,留空就是通过IP访问;填了域名就只允许通过该域名访问(需要在DNS或hosts里解析)。

7.2 给网站配置好默认文档和目录权限

添加完站点后,如果直接访问出现403.14,按前面说的去处理默认文档。IIS的默认文档优先级是Default.htm、Default.asp、index.htm、index.html、iisstart.htm,没有你要的首页就手动添加。

目录权限这一步特别容易被跳过。很多开发者在本地开发时用的是管理员账号,文件权限随便改,但IIS的应用程序池身份默认是ApplicationPoolIdentity,一个低权限账号。你直接把整个网站目录从开发机复制到服务器,没有单独给IIS授予权限,网站就会各种404或403.19。

最省事的授权方式:右键网站文件夹 → 属性 → 安全 → 编辑 → 添加 →IIS_IUSRS→ 勾选“读取和执行”、“列出文件夹目录”、“读取”权限。这就够了,不需要给Everyone,也别给写入权限,减少安全风险。

如果网站需要写日志或上传文件,单独给对应的子目录(比如/logs、/uploads)额外添加修改和写入权限即可。全开权限虽然能跑,但是把整个站的安全等级拉低了。

7.3 HTTPS绑定和证书配置

现在部署新站点,强烈建议直接上HTTPS,即使内网访问用自签名证书也比裸HTTP强。IIS里绑定HTTPS证书的操作路径是:选中站点 → 右侧“绑定” → 添加 → 类型选https→ 端口443 → 选择SSL证书。如果服务器上没有证书,先通过“服务器证书”模块导入或创建自签名证书,再回来绑定。

自签名证书在浏览器上会提示不安全,但内网测试可以接受。生产环境建议用正规CA签发证书或者内网部署企业CA。这个流程不复杂,但优先级值得排在建站最开始,因为半路再切HTTPS还要改站点内的绝对路径引用,麻烦。

7.4 站点上线后的备份与还原

站点上线以后,真正的运维压力才开始。IIS的配置、网站文件、应用程序池设置,这三样东西只要一个没了,恢复起来都要大半天。所以备份策略一定要现在就做,别等故障发生。

IIS自带的命令行工具appcmd.exe支持备份和还原IIS配置:

%windir%\system32\inetsrv\appcmd.exe add backup "PreUpdateBackup"

这条命令会把applicationHost.config等配置打包到C:\Windows\System32\inetsrv\backup\PreUpdateBackup目录。需要还原时执行:

%windir%\system32\inetsrv\appcmd.exe restore backup "PreUpdateBackup"

如果你改配置之前忘了备份,还可以用appcmd list backup看看系统有没有自动生成的历史备份(IIS默认会在某些操作前自动备份,比如用服务器管理器装角色时)。

网站文件层面,不要用系统自带的“备份服务器状态”那种大而全的东西,直接打一个压缩包把整个站点目录和相关数据库备份带走,这才是最实用的小备份策略。我见过太多人只备份了文件忘了备份配置,恢复完发现IIS管理器里面网站列表是空的。配置和文件要一起备份,二缺一等于没备份。

7.5 Unity WebGL项目部署到IIS的两个特殊点

如果你是用Unity做WebGL项目然后在Windows服务器上部署(这是目前挺常见的一个组合,很多公司内部工具和展示项目都这么干),有两个IIS配置是必踩的点:

一是MIME类型。Unity WebGL导出的文件里有.json、.js、.data、.wasm等后缀,IIS默认并不认识.json对应的MIME类型。你部署完访问页面显示404.3,大概率不是路径问题,而是IIS没把.json映射到正确MIME。解决办法:站点 → “MIME类型” → 添加:

扩展名MIME类型
.jsonapplication/json
.wasmapplication/wasm
.dataapplication/octet-stream
.memapplication/octet-stream
.symbols.jsonapplication/json
.unitywebapplication/octet-stream

二是“.dll文件被锁定”的问题。Unity WebGL项目虽然主要靠WebAssembly,但有时服务器上会有.NET相关的.dll,如果你用Debug模式构建然后频繁覆盖旧文件,IIS可能会因为文件被进程占用导致复制失败。解决办法是发布网站时先停止对应站点或应用程序池,再覆盖文件,覆盖完重新启动。这也是为什么很多人都强调“发布=停止站点→复制文件→启动站点”三步走的原因。

最后说两个装了这么多年才真正想明白的心得

第一个心得关于故障排查的顺序。IIS的报错信息往往很唬人,什么0x80005000、什么administration.config,看起来像天书。但实际排障不需要懂Windows内部,你只要记住一条铁律:先低后高、先网络后应用、先日志后猜测。先确认服务有没有启动、80端口通不通、防火墙放没放行;再看事件查看器里的系统日志和应用日志;最后才动手改配置。按这个顺序来,90%的IIS问题都能在三步之内定位。

第二个心得是给刚入行的朋友的建议。很多人上来就怼Docker、怼K8s,反而把IIS这种系统自带的基础能力忽略了。但实际上,Windows生态里的很多东西就是绕不开IIS的,与其到急用时才慌慌张张去搜教程,不如现在就找一台机器把安装、建站、改权限、对配置、备份还原这些流程全部走一遍。所有报错都在自己可控的环境里踩一遍,等线上出问题时,你才会有底气说一句:这问题我见过。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/1 4:45:39

从后见之明到经验回放:强化学习稀疏奖励难题的破解之道

先说个几乎每个人都遇过的场景:比赛结果刚出来,旁边就有人一拍大腿说“我早就知道是这个结果”;股票跌了,翻聊天记录发现其实当时自己也在犹豫,但事后总觉得“明明有信号”。这种“事后诸葛亮”的感觉,心理…

作者头像 李华
网站建设 2026/10/1 4:44:22

Debian 11 bullseye 国内源配置深度指南:架构、仓库与签名校验

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/1 4:43:56

周期信号傅里叶变换详解:从冲激函数到频谱离散化

【信号与系统 - 6】周期信号的傅里叶变换这个【信号与系统】系列写到这里,前面几篇已经把傅里叶级数、非周期信号傅里叶变换、常用变换对都过了一遍。按理说主线框架已经差不多了,但真正做题的时候,你会发现题目里动不动就冒出这么一句&#…

作者头像 李华
网站建设 2026/10/1 4:43:42

Android ScrollView从入门到实战:原理、用法、嵌套冲突与性能优化

做Android开发的人,不管是自学还是科班出身,基本都逃不过ScrollView这一关。它太常用了,凡是内容超出屏幕的情况,你第一个想到的往往就是它。但正因为它“基础”,反而有很多细节被忽略了,等到实际项目里出了…

作者头像 李华
网站建设 2026/10/1 4:43:31

生成式推荐缓存高可用验证:多级缓存与故障注入实践

最近刚把基于 openYuanrong 的生成式推荐缓存高可用验证跑完一轮,回头整理下整个方向的思考过程和实操细节。生成式推荐和传统推荐最大的不同在于,推理链路的单位成本上了一个量级,缓存早已不是"加个 Redis 提速"这么简单&#xff…

作者头像 李华
网站建设 2026/10/1 4:43:28

骨骼癌目标检测数据集:1288张医学图像YOLO标注与训练实践

简介:骨骼癌目标检测数据集.zip专为医学影像AI目标检测场景设计,面向需要训练骨骼肿瘤检测模型的算法工程师、医学影像研究者及医疗AI开发者。数据集内含骨肿瘤(bone-cancer)单一类别标注,训练集908张、验证集380张&am…

作者头像 李华