接手一台新服务器,十有八九第一件事就是装IIS。装完之后才能在浏览器里敲出一个“IIS Windows Server”的默认页面,才能开始挂站点、转发端口、配置反代。这篇就是把我自己在Windows Server 2022和Windows 11上安装IIS的完整过程,从功能勾选到踩坑记录,全部摊开讲一遍,照着做基本不会出问题。
IIS这个东西,说简单也简单,就是在Windows系统上开一个Web服务,让它可以响应HTTP/HTTPS请求,把网站页面发给访问者。说复杂也复杂,因为它不是装完就完事的,后面还有应用程序池、身份验证、URL重写、SSL绑定等等一堆配套动作。但不管后续怎么折腾,第一步都是把“IIS管理控制台”和“World Wide Web服务”这两个核心组件装上去,先让服务器能跑起来。
这篇教程适合谁?刚接触Windows服务器的新手运维、需要在本地开发环境里模拟生产环境的前端和后端开发、还有临时要在内网搭一个文件共享页面的同学。我会把每一步都拆开讲,包括为什么要勾这个选项、不勾会有什么后果,以及装完之后怎么验证、怎么处理最常见的报错。
1. 开始之前:IIS装的是什么、装给谁用
1.1 IIS到底是什么
IIS的全称是Internet Information Services,微软出品的Web服务器,Windows系统自带。你可以把它理解成“Windows上的入口门户”——所有从外网或内网访问你服务器的HTTP请求,都由它接收、解析,然后交给后端程序处理。
以前很多人觉得IIS只能跑ASP.NET,其实不是。安装IIS之后,它可以托管纯静态页面HTML/CSS/JS,配合FastCGI可以运行PHP,配合反向代理模块可以转发给Tomcat、Node.js、Python等后端服务。所以哪怕你主力技术栈不是.NET,IIS照样有存在价值,尤其在纯Windows环境里,它比装一个跨平台服务器更方便管理。
1.2 安装前要确认的三件事
先别急着点下一步,装之前建议花两分钟确认环境,不然后面可能装了一半天发现白干。
第一,操作系统版本。IIS在不同系统上的安装路径不一样:Windows Server是走“服务器管理器—添加角色和功能”,Windows 10/11是走“控制面板—启用或关闭Windows功能”,两个入口完全不同,千万别混。第二,管理员权限。安装IIS是系统级改动,Windows账号必须属于Administrators组,否则会在“添加功能”那一步直接弹权限不足,连验证都过不了。第三,确认没有一个程序占着80端口。IIS默认网站绑定的是80,如果之前装过Apache、Nginx、Skype或者某些开发工具占用了80端口,就算IIS装好,启动默认站点时也会报“端口被占用”,到时候排查半天,其实一开始就该处理掉。
2. 功能选型:勾选框背后藏着什么
2.1 默认功能就够了?
很多人安装IIS的时候习惯全程默认,直接“下一步”到底。这样能不能装成功?能。但装完之后通常会发现两个问题:缺少ASP.NET支持、缺少管理脚本工具。前者导致你部署.NET应用时找不到处理程序,后者导致你想用PowerShell命令备份IIS配置时提示命令不存在。
所以我的建议是:默认选项可以作为基础套餐,但安装过程中多花一分钟把“应用程序开发”和“管理工具”下面的几个关键子项勾上,能省下后面很多麻烦。怎么选,在下一节实操里我会按步骤说清楚。
2.2 按需补充:常见功能拆解
IIS安装界面里,“角色服务”一栏有很多复选框,看着眼花,其实分几大类,归类记住就好。
一类是“常见HTTP功能”,含静态内容、默认文档、HTTP错误、目录浏览等。做网站基本都勾上,其中“目录浏览”一般开发环境下勾,生产环境建议关掉,防止网站目录结构泄露。一类是“运行状况诊断”,包括HTTP日志、请求监视、日志记录工具,日志一定要装,不然出了故障无从查起。一类是“应用程序开发”,这一组最关键,ASP.NET、ASP、CGI、ISAPI扩展等都在这里。如果你想跑.NET程序,记得勾上相应版本的ASP.NET;如果想跑PHP,要勾“CGI”或“FastCGI”。
剩下的是“FTP服务器”和“管理工具”,FTP服务真的需要再装,平时用不上可以不选;管理工具里的“IIS管理控制台”必须选,不选就找不到IIS管理器界面。
3. Windows Server版安装实操(图文级详解)
3.1 进入“添加角色和功能向导”的两种方式
以Windows Server 2019/2022为例,打开“服务器管理器”,正常情况下会默认停在“仪表板”页面,右上角有个“管理”菜单,点开后选择“添加角色和功能”,就进入了向导。如果你的服务器管理器开机没有自动弹出,也可以在任务栏搜索“服务器管理器”手动打开。
还有一种快捷方式:打开PowerShell,运行Install-WindowsFeature Web-Server命令,系统会自动安装IIS核心组件。不过这样装的是纯默认版本,没有管理工具也没有ASP.NET,适合批量初始化时用,手动学习还是建议走向导。
3.2 “服务器角色”这一步怎么勾
向导前面几步,安装类型默认“基于角色或基于功能的安装”,服务器选择默认“从服务器池中选择服务器”,都不用改。一直点到“服务器角色”这一步,界面会列出当前机器可以安装的角色,往下滚动,找到“Web服务器(IIS)”。
勾选时会弹出一个对话框,提示“是否添加Web服务器(IIS)所需的功能?”,这个必须点“添加功能”,它会把IIS依赖的IIS管理控制台、Windows进程激活服务等前置组件一并加进来。不添加的话,后续步骤里很多选项是灰的,等于装不完整。
3.3 “角色服务”这样选才不后悔
点“下一步”到“角色服务”,默认已经勾选了“管理工具—IIS管理控制台”和“常见HTTP功能—默认文档、HTTP错误、静态内容”等几项。在此基础上,我建议按使用需求补充:
- 需要跑ASP.NET网站:把“应用程序开发”展开,勾上ASP.NET 4.8或对应版本,弹窗提示依赖项,点“添加功能”。
- 需要跑PHP:在“应用程序开发”里勾上CGI。
- 需要看网站日志:确认“运行状况诊断”下的“HTTP日志记录”和“请求监视”已勾。
- 需要远程管理服务器上的IIS:确认“管理工具”下的“IIS管理脚本和工具”已勾,后面可以用命令行备份配置。
选完之后点“下一步”,到“确认安装”页面。建议先点“安装”,然后盯着进度条。正常情况下两到三分钟装完,弹回服务器管理器界面,右上角出现“安装成功”的提示。
3.4 确认安装与第一次启动
安装成功之后,在浏览器地址栏输入本机IP或者http://localhost,能看到一个默认的IIS欢迎页。同时在“服务器管理器”左上角点“工具—Internet Information Services(IIS)管理器”,能正常打开控制台窗口,说明安装真正完成。
注意一个细节:首次打开IIS管理器,左侧“连接”面板会列出一个“启动页”,下面会有“开始使用”和“IIS新闻”两块内容,单击你的服务器主机名节点,右边会显示具体的功能配置入口。到这里,IIS才算真正待命。
4. Windows 10/11 客户端版安装路径
4.1 控制面板启用IIS
Windows 10和Windows 11是个人电脑系统,安装方式和服务器版不一样。按Win+R,输入control打开控制面板,点“程序”,再点“启用或关闭Windows功能”,在弹出的Windows功能列表里找到“Internet Information Services”。
默认展开IIS节点,建议把“Web管理工具—IIS管理控制台”勾上,再把“万维网服务—应用程序开发功能”下面的“.NET Extensibility 4.8”“ASP.NET 4.8”“ISAPI扩展”“ISAPI筛选器”都勾上,方便本地调试。如果只是本地做个静态页面测试,默认选项也行。确定之后系统会自动应用更改,逻辑和服务器版一样,只是用了DISM底层部署。
4.2 用“可选功能”方式安装
Windows 11还有第二种安装方式,在“设置—应用—可选功能”里,点“添加可选功能”,搜索“IIS”,系统会列出“Internet Information Services”相关项,点安装即可。这种方式比较隐蔽,但它安装的功能更精简,适合不想开控制面板的人。
不过实测下来,控制面板方式最直观,可以看到IIS的完整子项结构,不会漏选管理控制台。可选功能方式装完,有时候开始菜单搜不到“IIS管理器”,还要单独去确认管理工具组件是否装上。
4.3 确认IIS管理器能打开
安装完成后,按Win键输入“IIS”,能看到“Internet Information Services(IIS)管理器”出现在搜索结果里,打开即可。然后在浏览器里访问http://localhost,如果出现默认页面,就说明IIS已经在本地跑起来了。
本地开发时还有一个高频需求:让局域网其他电脑访问你电脑上挂的站点。默认安装完只能本机访问,因为Windows防火墙没有放行80端口。你需要在“允许应用通过防火墙”里勾上“万维网服务”或者手动新建入站规则放行TCP 80端口,其他设备才能访问到。这个问题我在第5节会再讲。
5. 安装成功了吗?三种验证方法和常见报错对照
5.1 本地访问、IP访问、hosts绑定
验证IIS是否安装成功,最简单的方法就是在浏览器访问http://localhost,能看到IIS默认页面就是成功。第二个验证方式是访问本机IP,在网站绑定里确认默认站点绑定的是“所有未分配”的IP和80端口,然后浏览器输入http://局域网IP,如果打不开,八成是防火墙拦了。第三个方式是绑定域名验证:如果你准备部署正式站点,可以先用记事本编辑位于C:\Windows\System32\drivers\etc下的hosts文件,加一条记录把域名解析到本机IP,然后浏览器访问该域名,看是否能命中IIS。这是开发阶段最常用的验证手段,不用真去改DNS。
5.2 报错速查表
我整理了一些在IIS安装和初始访问时最常碰到的报错,基本可以对照处理:
| 问题现象 | 常见原因 | 处理方式 |
|---|---|---|
| 访问localhost提示端口被占用 | 其他Web服务或软件占用80端口 | 运行netstat -ano命令查看占用PID,结束对应进程或改IIS绑定端口 |
| 提示“无法连接到远程服务器” | IIS服务未启动或依赖服务被禁用 | 打开服务管理器,确认W3SVC(World Wide Web)服务状态为“正在运行” |
| 打开IIS管理器报“未知错误0x80005000” | 系统目录权限或ADSI路径异常 | 用管理员身份运行IIS管理器;检查C:\Windows\System32\inetsrv\config目录是否可读 |
| 浏览器显示500.19 | 网站根目录缺少访问权限或配置文件被锁定 | 给IIS_IUSRS组添加网站目录的读取权限;在“功能委派”中解锁配置文件 |
| 浏览器显示404.3 | 缺少对应的处理程序映射 | 安装对应的ASP.NET或CGI功能,然后执行iisreset |
| 打开网站提示503服务不可用 | 应用程序池未启动 | 打开IIS管理器,找到错误站点对应的应用程序池,右键“启动” |
这些报错里,我觉得有两个最值得单独讲,都是新手高频踩坑的重灾区。
5.3 深入排查:端口占用、权限、配置锁定
端口占用这个问题,最常见的场景是电脑上装了某些即时通讯软件、虚拟机软件或者之前的Nginx没有正确卸载,把80端口悄悄占了。排查方法:以管理员身份打开命令提示符,输入netstat -ano | findstr :80,输出结果里如果有LISTENING状态的行,记下最后一列的PID;然后打开任务管理器—详细信息,按照进程ID找到对应进程,结束它,或者把IIS站点绑定的端口改成8080这样不冲突的端口。
权限问题里,0x80005000这个报错很特殊。它多出现在修改应用程序池高级设置时,提示“由于配置信息不完整或已损坏,请手动为其设置LocalSystem权限”。这个错误我在不少Windows Server机器上遇到过,通常是因为当前操作系统的用户权限分配异常,或者inetsrv目录下的config文件夹被安全软件锁定。解决办法有两步:第一步,用管理员身份重新打开IIS管理器;第二步,在C:\Windows\System32\inetsrv\config目录上右键—属性—安全,确认SYSTEM和Administrators拥有完全控制权限。如果还不行,可以执行iisreset命令重置IIS服务,再重新打开管理器。
配置锁定问题表现在浏览器里打开ASPX页面提示“不能在此路径使用此配置节”,原因是IIS默认锁定了handler映射。解决办法是进入IIS管理器,找到对应站点,双击“处理程序映射”,点击右侧“编辑功能权限”,确保“读取”“脚本”“执行”三个选项都勾上。
6. 安装后的第一顿饭:目录权限、日志与备份
6.1 网站根目录与权限配置
IIS默认站点根目录是C:\inetpub\wwwroot,你安装完之后可以直接把网页文件扔进去,然后访问http://localhost/文件名.后缀名。这个目录是系统盘上的,如果只是测试无所谓,但正式环境强烈建议把网站文件放到独立分区,比如D:\wwwroot\site1,方便备份,也避免系统盘崩溃时网站文件跟着遭殃。
新建网站目录之后,需要在系统里给目录授权,否则IIS访问不到文件,浏览器会报500.19。右键目录—属性—安全—编辑—添加,在输入框里填入IIS_IUSRS,点“检查名称”,确认后赋予“读取和执行”“列出文件夹目录”“读取”三个权限。如果站点需要写文件,比如日志或者上传目录,再额外给“写入”权限。“写入”权限要谨慎,只给必要的子目录就够了,不要整个网站根目录都放开。
6.2 默认文档和HTTP重定向
把网页文件放进去之后,如果直接访问域名不带任何路径,IIS会按列表顺序查找默认文档。默认文档的配置位置在IIS管理器的“默认文档”功能里,默认顺序是Default.htm、Default.asp、index.htm、index.html、iisstart.htm等。如果你的网站首页是default.aspx或者index.php,需要手动添加一条。
点击右侧“添加”,输入文件名,然后通过“上移”调整到第一位。这一步不设置,访问首页就会得到目录列表或者403错误。如果是PHP或Node.js项目,通常还需要配合URL重写模块做伪静态,这部分后续可以单独开一篇讲,但你现在至少知道默认文档在哪里处理。
6.3 .NET 8应用托管配置
如果你是.NET开发,装了IIS之后千万别以为直接部署就行。.NET Core和.NET 5之后的运行时和IIS的交互方式变了,IIS本身不直接处理托管代码,而是通过反向代理把请求转发给Kestrel。所以部署.NET 8应用,除了IIS,还要额外安装一个模块:AspNetCoreModuleV2。
这个模块在安装.NET Hosting Bundle时会自动装进IIS,下载地址在微软官方.NET下载页,搜“NET 8 Hosting Bundle”就能找到。装完Hosting Bundle之后重启IIS管理器,才能在站点“模块”里看到AspNetCoreModuleV2。发布网站时,在Visual Studio里选择发布目标为“文件夹”,然后把发布出来的文件复制到网站目录,再将网站应用程序池的“.NET CLR版本”调整为“无托管代码”,否则IIS会用老式的托管管道去加载应用,直接报HTTP 500.19或者500.30。
关于这个,我再多说一句:很多人在网上搜“IIS 中没有.NET 8”,其实不是IIS没有,是你忘了装Hosting Bundle模块。装了之后IIS管理器不会平白多出一个新图标,而是让现有网站具备了转发.NET请求的能力,这是一个常见的认知偏差。
6.4 IIS备份与还原
安装好IIS只是起点,配置了各种站点、程序池、绑定、重写规则之后,最怕系统出问题重装。IIS配置是可以整包备份的,利用安装时我让你勾的“IIS管理脚本和工具”,在管理员PowerShell里运行以下命令就能备份:
%windir%\System32\inetsrv\AppCmd.exe add backup "backup_20250101"这条命令会把IIS配置快照保存到C:\Windows\System32\inetsrv\backup目录下,包含站点、应用程序池、绑定、虚拟目录等所有配置。还原时运行:
%windir%\System32\inetsrv\AppCmd.exe restore backup "backup_20250101"还原之后执行iisreset生效。
如果你不想用命令行,还有图形化方式:IIS管理器左栏选择服务器节点,右键“重新启动”;不过这个只是重启服务,不算备份。真正的图形化备份在“共享的配置”功能里,点击“导出配置”,选择一个导出目录并设置加密密码,会生成applicationHost.config等核心配置文件,还原时通过“导入配置”即可。
我的习惯是每次变更完配置做一次命令行备份,原因很简单:命令行备份是时间点快照,可以保留多个版本;共享配置导出更适合把整个配置迁移到另一台服务器。
实际操作中,我发现备份易踩的坑是:如果当初安装IIS时没有勾选“IIS管理脚本和工具”,运行AppCmd命令会直接提示“不是内部或外部命令,也不是可运行的程序”。解决办法有两种:回到服务器管理器添加“IIS管理脚本和工具”角色服务,或者手动进入C:\Windows\System32\inetsrv目录运行appcmd.exe命令。为了避免这种尴尬,我在前面第3.3节特地强调过这个选项,现在你应该明白用意了。
7. 一点个人心得
多装了几十次IIS之后,我的体会是:IIS安装本身并不难,难的是“装对了”。所谓“装对”,就是在安装阶段就想明白这台服务器将来要跑什么应用,然后一次性把相关功能都选上。宁可多勾几个用不上的,也不要漏掉一个关键的,因为每次补装功能都需要重启IIS服务,如果是生产环境,就意味着业务中断。
一个小技巧放在最后:装完IIS之后,立刻到“服务和应用程序—服务”里,找到World Wide Web Publishing Service,把它启动类型改成“自动”,防止服务器重启后IIS没有自动拉起。很多运维事故不是IIS坏了,就是服务没有随系统启动,这个细节非常不起眼,却经常成为线上故障的元凶。