尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

IIS网站部署全攻略:从安装到外网访问实战指南

发布时间:2026/9/29 4:40:58

资讯中心
01
ARTICLE

IIS网站部署全攻略:从安装到外网访问实战指南

IIS网站部署全攻略:从安装到外网访问实战指南
1. 先想清楚IIS到底适不适合你的场景接触过不少朋友一说到搭建Web服务器脑子里冒出来的第一个方案就是Nginx或者ApacheWindows自带的IIS反而成了冷门选项。我最早也是这么干的直到有一次要在一个Windows Server环境里部署一个.NET项目才被迫正儿八经去摸IIS。后来摸熟了发现IIS真没有网上传的那么难用尤其在Windows生态里它和系统的契合度是别的Web服务器比不了的。这篇内容适合谁看三类人。第一类是公司服务器是Windows Server、但不知道IIS怎么下手的新手运维第二类是开发完一个网站或者Web应用需要自己发布到服务器上的程序员第三类是想在自己电脑上搭个网站、让外网朋友能访问试玩的爱好者。不管你属于哪一类这篇内容都会把从安装到外网访问的完整链路拆开讲清楚。先说IIS能干什么。它是Windows系统自带的Web服务器组件能把一台普通的Windows机器变成一台能对外提供网页服务的服务器。你可以发布静态HTML页面、ASP.NET应用、PHP项目也能做反向代理、域名绑定、HTTPS证书配置、FTP服务甚至还能承载流媒体服务。对于中小型站点来说IIS完全够用关键是它就在系统里躺着装一下就能用不像别的方案还要额外下载一堆依赖。我遇到最多的问题是两个方向一是一堆人卡在IIS安装完了但访问不了二是网站本地能打开、外网死活访问不上。这篇内容会把从零开始的每一步都讲到位包括那些常规教程里不会提的坑——比如应用程序池权限、Windows防火墙入站规则、路由器端口映射的细节以及IIS配置文件不小心弄坏了怎么恢复。2. 从零开始Windows环境准备与IIS安装2.1 先确认你的Windows版本IIS不是所有Windows版本都长得一样。家用Windows 10/11和服务器版Windows Server之间IIS的功能和操作路径都有差异动手之前先确认清楚你手上的是什么系统。我用过的几个典型环境是这样的Windows Server 2019/2022 Standard正式生产环境最常见IIS功能最全推荐加域或不加域场景都能用。Windows Server 2016老朋友了和2019操作逻辑几乎一致。Windows 10/11专业版或企业版适合本地开发测试临时用也能装IIS但隐藏了一些高级功能比如某些认证模块缺失。Windows 10/11家庭版不建议折腾IIS功能阉割比较严重实在要在本机测试建议直接装一个VMware虚拟机再弄Server版。如果是在已有的Windows Server上操作先用下面这条命令检查一下IIS到底装了没有Get-WindowsFeature Web-Server在PowerShell管理员模式下执行结果里Install State如果是Available说明没装如果是Installed说明已经装过了。这个步骤尤其适合接手别人配置过的服务器先把家底盘清楚再说。2.2 Windows Server 2019/2022安装IIS的完整步骤安装IIS方法不止一种图形化向导和PowerShell都行。我一般推荐新手用图形化方式看得见摸得着熟练之后用命令行更高效。方法一图形化安装打开“服务器管理器”点击右上角“管理”选择“添加角色和功能”。在弹出的向导里一路点“下一步”直到“服务器角色”这一步勾选“Web服务器(IIS)”。遇到弹出的提示框问“是否添加所需功能”直接点“添加功能”。继续“下一步”到“角色服务”这一步时重点关注下面几项常见HTTP功能默认勾选的必须保留建议额外勾选“HTTP重定向”、“静态内容压缩”。运行状况和诊断建议把“HTTP日志记录”、“请求监视”、“跟踪”勾上以后查问题全靠它们。性能保持默认即可。安全保持默认如果需要HTTPS访问确认“SSL设置”已勾选。应用程序开发这一项最容易踩坑。如果部署ASP.NET站点必须勾选对应的.NET版本扩展ASP.NET 3.5、ASP.NET 4.7/4.8、ASP.NET 6以上的运行时都在这里。只做静态网站或PHP项目的话也可以不勾。点击“安装”等进度条跑完关闭向导。装完之后验证一下浏览器地址栏输入http://localhost如果出现IIS默认的欢迎页面就说明安装成功了。方法二PowerShell安装如果追求效率或者管理的是云服务器没有图形界面用命令行快得多Install-WindowsFeature -Name Web-Server -IncludeManagementTools这条命令会把IIS主体和图形管理工具一并装上。如果只是最低限度安装不要管理工具去掉-IncludeManagementTools参数就行。但我的建议是保留后面配站点的时候图形界面还是省事。如果还要装ASP.NET相关功能命令要更长一些Install-WindowsFeature Web-Server, Web-Asp-Net45, Web-WebSockets, Web-Scripting-Tools -IncludeManagementTools2.3 安装后第一时间要做的三个设置装好IIS不等于万事大吉我每次在新服务器上装完IIS固定会做三个事情第一启动Windows防火墙里的“万维网服务”入站规则。这一步可以直接在防火墙高级设置里操作也可以在安装IIS时就确认系统自动放了80端口。如果之后在浏览器里访问http://localhost能打开但换局域网IP访问不通十有八九是防火墙入站规则没放行后面我会专门讲。第二确认W3SVC服务状态。在服务管理器里找到“World Wide Web Publishing Service”确保启动类型是“自动”运行状态是“正在运行”。有时候服务器重启之后这个服务没跟着起来网站又全部打不开问题往往就出在这里。第三修改IIS日志目录。默认日志路径是C:\inetpub\logs\LogFiles放在C盘会随着访问量增长把系统盘塞满。我会在IIS管理器的“网站”右键选择“管理网站”下的“高级设置”把“日志文件目录”改到D盘之类的数据盘。这个习惯在生产环境能避免非常多的磁盘告警。2.4 验证IIS是否真的跑起来了装完以后尽快做一次完整验证别等网站配好才发现IIS有问题。运行C:\Windows\System32\inetsrv\InetMgr.exe打开IIS管理器或者直接在“服务器管理器”里点“工具”再选“Internet Information Services (IIS)管理器”。能正常打开就说明管理组件装好了。然后在浏览器分别访问http://localhost和http://127.0.0.1都能看到IIS默认欢迎页面就说明HTTP服务本身工作正常。最后用netstat -ano | findstr :80确认80端口处于LISTENING状态。如果看到LISTENING说明IIS已经在正常监听。3. 第一个网站从目录结构到基本配置3.1 规划网站目录别把文件放在C盘这一点是我要特别强调的。很多初学者把网站文件直接丢在C:\inetpub\wwwroot下面用默认路径跑起来倒是省事但一旦系统盘故障或者需要重新安装系统网站数据就跟着没了。我习惯的做法是在独立数据盘建一个清晰的目录结构比如D:\WebSites\ ├── mysite\ │ ├── wwwroot\ # 网站文件根目录 │ ├── logs\ # 网站日志 │ └── backup\ # 站点备份这样做的第二个好处是权限管理更清晰。给整个D:\WebSites目录分配一个专门的应用程序池身份账号而不是直接对C盘目录授予宽泛权限能少掉很多安全顾虑。用IIS管理器创建网站时“物理路径”一栏直接填入D:\WebSites\mysite\wwwroot不会有什么障碍。3.2 创建网站端口、绑定、主机名打开IIS管理器左侧找到“网站”节点右键选择“添加网站”会看到几个关键的填写项网站名称取个好认的名字比如MySite。这个名字只是管理用不影响访问。应用程序池默认会和网站同名自动创建一个。如果不想自动创建可以提前建好再选。物理路径填网站文件所在目录上面说过的D:\WebSites\mysite\wwwroot。绑定类型HTTP默认80端口HTTPS默认443端口。如果这台服务器只跑一个网站就保持默认不变。如果一台服务器要跑多个网站就要靠不同端口或不同主机名来区分后面细讲。主机名这是很多新手会忽略的地方。本地测试可以不填主机名通过IP访问。但要对外提供服务并绑定域名就在这里填上你的域名比如www.example.com。点击“确定”以后网站就创建好了。在D:\WebSites\mysite\wwwroot目录里放一个最简单的测试页面就随便用记事本写一个HTML文件命名为index.html内容可以是一句话。然后浏览器访问http://localhost如果能看到页面内容说明整个链路已经通了。3.3 一台服务器跑多个网站端口、主机名、IP三种方案在实际工作环境里一台服务器上跑好几个网站是常态。最常见的三种方式第一种不同端口。一个网站用80另一个用8080访问时带上端口号即可。这种方式适合测试环境缺点是不太好看用户访问还要记端口。第二种不同主机名。两个网站都用80端口但分别绑定域名A和域名B。用户访问时通过域名区分。这种方式生产环境最常见前提是你有多个域名解析到这台服务器。第三种不同IP地址。服务器配置了多个IP每个网站绑定各自的IP。这种方式最彻底但需要服务器有多IP能力且对外IP资源充足时才会用。在IIS里操作时选中网站右键“编辑绑定”可以添加任意数量的绑定记录。比如一个网站既能通过http://localhost访问也能通过http://192.168.1.100:8080访问还能通过http://www.example.com访问全看绑定配置怎么写了。3.4 默认文档和自定义错误页创建网站后访问出现目录列表或者404通常是因为默认文档没配置对。选中网站双击“默认文档”IIS会按顺序尝试这些文件。默认顺序里有index.html、index.htm、Default.htm、Default.aspx等。如果你网站首页叫别的名字比如home.html在右侧操作栏点“添加”把它加进去并移动到最上面。还有一点容易被忽略部署一个不带扩展名的URL访问时比如访问http://example.com/about要求返回about.html内容IIS默认不会自动匹配。需要配置URL重写模块才能实现这个模块在IIS里不是默认装的要单独下载。如果你部署的是WordPress之类带伪静态需求的应用这一步少不了。另外把默认错误页替换成自己设计的404页面这类小优化也可以顺手做掉虽然不直接影响功能但给用户和专业度的体验不一样。我一般都会做包括把自定义错误页的代码状态码设置成404避免返回200误导搜索引擎。4. 那些绕不开的配置细节4.1 Web.Config 到底管什么在Windows的IIS环境里部署ASP.NET站点Web.Config是绕不开的配置文件。它本质上是一个XML文件放在网站根目录控制.NET运行时和IIS模块的各项行为。一个最简单的Web.Config长这样?xml version1.0 encodingutf-8? configuration system.webServer defaultDocument files clear / add valueindex.html / /files /defaultDocument httpErrors errorModeDetailed / /system.webServer /configuration上面的配置做了两件事把默认文档设为index.html然后开启详细错误信息输出。开发调试阶段开详细错误信息很有用但上线后一定要改成errorModeCustom避免把服务器路径、版本号等敏感信息暴露给访问者。这是安全审计中最常见的一条网上搜“iis关闭详细错误信息”搜到的就是这个问题。另一条常见的配置坑是运行时版本不匹配。比如部署一个用.NET 8写的新项目到Windows Server 2019上IIS默认只内置.NET 4.8及之前版本的运行时打开页面会得到类似“HTTP 500.19”或“IIS 中没有 .NET 8”的错误。解决办法是到微软官网下载对应的.NET 8 Hosting Bundle托管捆绑包装到服务器上装完重启IIS进程再刷新页面就好了。4.2 应用程序池权限最容易踩的坑之一网上搜“iis应用程序池权限设置失败 请手动为其设置localsystem权限未知错误(0x80005000)”能搜出一堆求助帖。这个错误我在实际干活时遇到过两次一次是管理脚本批量修改应用程序池高级设置时激发的一次是手动操作时不小心改了默认文档配置顺序后想改回池身份时出现的。这个0x80005000错误说白了是IIS管理器在修改应用程序池“身份凭据”时读取ADSI本地目录服务接口属性失败。常见触发原因是IIS管理器的操作账号对IIS配置存储的权限不足或是系统打了更新之后IIS配置存储文件损坏/权限错乱。解决办法按优先级排列第一招用管理员身份重新打开IIS管理器再试。很多这类问题就是UAC权限隔离造成的。第二招在另一个应用程序池上测试同样操作如果只有某一个池出问题说明那个池的配置损坏了删除重建一个池再绑定网站即可。第三招检查C:\Windows\System32\inetsrv\config目录下applicationHost.config文件的权限确保SYSTEM和Administrators对它有完全控制权。如果有杀软或同步软件动过这个目录把它加白名单。第四招实在不行备份配置文件后用以下命令重置IIS配置存储%windir%\system32\inetsrv\appcmd.exe recover config这条命令会用备份恢复applicationHost.config。前提是IIS自己之前的备份还在。所以我建议在生产环境养成一个习惯每次改动IIS关键配置前先把配置文件做一次备份appcmd一行命令就能搞定后面专门讲。关于应用程序池身份的权限设计我的通用建议是不是所有网站都需要LocalSystem权限。这是我们做安全加固的第一个抓手。普通站点用ApplicationPoolIdentity就够了IIS会自动管理权限。如果站点需要读写服务器上某个独立目录比如上传文件夹就单独给这个目录分配当前应用程序池身份的写入权限而不要直接放开站点根目录。只有在接入了老的COM组件、需要访问本机系统级资源的特殊老系统才考虑把应用程序池身份改成LocalSystem或NetworkService而且要记录清楚改了哪些池、为什么要改。还有一个高频坑0x80005000错误在Windows Server 2019和2022上尤其容易出现因为系统策略更新后IIS配置存储的默认ACL表变了。如果上述步骤都没解决用ServerManager卸载IIS的“管理脚本和工具”再重新装上往往就好了。4.3 关闭详细错误信息IIS默认在访问出错时会显示详细的堆栈信息和服务器内部错误状态这在我们本地调试时是好帮手但上了公网环境就变成了安全风险。攻击者可能通过这些信息找到具体模块版本和路径结构做针对性攻击。关闭详细错误信息的三个方法如果是ASP.NET应用在Web.Config的system.webServer节点下加httpErrors existingResponsePassThrough errorModeCustom /如果是IIS层面的配置在IIS管理器里双击“错误页”把“编辑功能设置”下的“错误响应模式”改成“自定义错误页”同时选中每一项错误码点击右侧“编辑”跳转到一个静态HTML页面自己写一个友好的别暴露细节。或者直接用PowerShellSet-WebConfigurationProperty -Filter system.webServer/httpErrors -Name errorMode -Value Custom -PSPath IIS:\Sites\MySite这套操作做完访问不存在的路径时就会看到一个模糊的404页面而不是具体的堆栈信息。4.4 日志管理和排查思路IIS的日志文件记录了每一条请求的访问时间、来源IP、请求路径、返回状态码、用户代理等信息。排查问题顺序一般是先看Windows事件日志尤其是System和Application日志再看IIS的HTTP日志最后用浏览器开发者工具看响应头。有一次我们线上网站突然出现大量500错误页面倒还能打开但接口返错排查了很久最后是在IIS日志里看到请求全是POST /api/xxx且User-Agent异常判断是某个第三方服务在调我们的接口数据格式变了导致后端异常。这种时候日志就是救命稻草。日志文件在C:\inetpub\logfiles\W3SVC{站点ID}\目录下是一个个.log文本文件可以用任何文本编辑器打开。如果需要做统计推荐用Log Parser或者直接在PowerShell里用Get-Content加Select-String快速过滤。Get-Content C:\inetpub\logfiles\W3SVC1\u_ex250101.log | Select-String 500 配置日志轮转也很重要。IIS管理器里选中站点右侧“配置”区双击“日志”可以设置“日志文件大小上限”和“按天创建新文件”。生产环境我一般设置成每天一个日志文件保留30天。超过了就让计划任务定期清理别让日志把磁盘塞满了。5. 外网访问整条链路一步一步打通5.1 先搞清内网和外网的访问路径很多人的困惑在这里http://localhost能打开http://192.168.1.100局域网IP也能打开为什么外网的同事朋友访问不了访问路径是这样的外网的浏览器根据域名解析出你服务器的公网IP发请求到这个IP的80端口请求先到你家或者公司机房的路由器出口网关路由器再把请求转发到内网那台装IIS的服务器上。这里面有三个条件要同时满足服务器本身防火墙允许外部访问80端口路由器上做了端口映射也叫端口转发把公网80端口转到内网服务器IP的80端口服务器获取的是公网IP能直接从外网访问到你的路由器如果是云服务器则要放行安全组规则并配置弹性公网IP。这三个条件缺一个外网就访问不通。5.2 服务器防火墙放行第一步操作Windows防火墙。在“高级安全Windows防火墙”里确认“入站规则”中有“万维网服务(HTTP)”并且是“允许连接”状态。如果没有这个规则自己新建一条规则类型端口协议和端口TCP特定本地端口填80操作允许连接配置文件域、专用、公用三项都勾上名称填IIS HTTP 80如果你还要用HTTPS同样的方法放行443端口。用命令也可以New-NetFirewallRule -DisplayName IIS HTTP 80 -Direction Inbound -Protocol TCP -LocalPort 80 -Action Allow完成后在局域网内的另一台电脑浏览器输入http://服务器内网IP如果能打开说明服务器这一层已经通了。5.3 路由器端口映射进入路由器管理页面找到“端口映射”或“虚拟服务器”菜单添加一条规则外部端口80内部IP地址你IIS服务器的内网IP比如192.168.1.100内部端口80协议TCP保存生效后在路由器的WAN口那个公网IP前面加上http://在你手机流量模式下访问如果能打开说明公网入口已经通了。实际操作中几个常见问题自家宽带如果是动态公网IPIP会变每次变了之后就访问不了。解决办法是配置DDNS动态域名解析路由器一般自带这个功能把域名和路由器绑定IP变了自动更新解析记录。运营商没给公网IP也就是大家在讨论的“大局域网”或者叫“NAT内网网络”环境。这种情况下路由器WAN口的IP是运营商内部地址外网根本访问不到你的路由器。我个人是不建议用第三方内网穿透工具的这里我只说一句如果确实需要外网访问生产环境优先考虑云服务器如果是临时演示用自己的电脑加些专用工具也能搞定但不在本篇的合规讨论范围内。5.4 域名解析与备案提示公网IP配好之后直接用IP访问也能用但谁也不想给别人一串数字吧。正确姿势是买个域名然后在域名服务商的控制台添加A记录指向你的公网IP。解析生效后用浏览器访问http://www.example.com就能打开网站了。如果你的服务器在中国大陆境内并且使用的是国内服务器空间需要完成网站的ICP备案并在服务器上正确配置域名。如果不备案域名解析虽然能指向IP但在服务器端未备案的域名往往会被拦截或者服务器服务商会封禁80端口。我的建议是生产环境优先选择已备案的域名和合规的云服务商解决方案。5.5 HTTPS证书部署现在都2025年了还有人在用纯HTTP对外提供服务被浏览器标成“不安全”不说数据都是明文传输的实在不应该。在IIS上配HTTPS现在是特别简单的一件事。单域名的免费证书申请渠道很多自己根据实际情况选择一个即可一般流程是通过验证域名所有权拿到证书文件通常是.pfx格式。在IIS管理器中选中你的网站右侧“绑定”里编辑现有80端口的绑定添加一条443端口的HTTPS绑定。证书下拉框中导入之前生成的PFX证书文件输入密码。再在绑定里加上一条URL重写规则把HTTP访问自动跳转到HTTPS。如果在IIS里没有看到“服务器证书”图标说明IIS安装时没有勾选SSL相关功能重新打开“添加角色和功能”把安全模块补装上。6. 安全这块真的不能跳过6.1 默认配置能跑但不代表能裸奔IIS默认装好后安全配置是相对保守的但很多人在部署过程中会主动“打开方便之门”比如给整个站点目录Everyone完全控制权限比如关闭了Windows更新比如用默认的“Everyone”匿名身份运行网站。这些操作如果只是自己电脑上测试问题不大一旦对外开放等于给攻击者开了后门。我自己的服务器上线前的安全清单大致是这样的只保留必要的服务器角色和功能不需要的功能不装。修改默认站点目录不在inetpub下发布生产站点。应用程序池身份使用ApplicationPoolIdentity不随手改成LocalSystem。启用Windows防火墙和杀软确保设置正确。定期使用最新补丁更新系统。维护独立的备份策略包括配置和内容的备份。6.2 目录权限最省事但最危险的配置在Windows下权限配置错了用户就能看到不该看的东西。IIS的匿名认证本质上是使用一个名为IUSR的账号访问站点资源。要严格控制这个账号的权限网站根目录只需要读取和执行权限上传目录、缓存目录才需要写入权限数据库文件目录绝对不能让网站账号访问。操作路径是站点目录右键属性 → 安全 → 编辑 → 添加IIS AppPool\{应用程序池名}这个账号如果你用的是ApplicationPoolIdentity授予“读取和运行”“列出文件夹目录”“读取”权限即可。特殊功能目录再单独加“修改”或“写入”权限。小程序里看到的iis 应用程序池权限设置失败的报错往往是想用IIS管理界面修改权限时触发的因为IIS管理器改的是配置存储中的ACL元数据底层设置实际是通过资源管理器完成的。所以我一直建议目录权限用Windows资源管理器改IIS管理器只负责网站配置。两种工具各管各的少踩很多坑。6.3 限制上传大小和请求长度有些站点是允许用户上传文件的之前的安全事件里至少有一起是攻击者通过上传超大文件把服务器磁盘塞满导致拒绝服务。所以对上传大小要做出限制。ASP.NET默认最大请求体是30MB左右具体看版本如果你不需要上传大文件保持默认即可。如果需要调整比如要支持100MB以内的视频上传在Web.Config的system.webServer下设置security requestFiltering requestLimits maxAllowedContentLength104857600 / /requestFiltering /security这里写的是字节数104857600就是100MB。同时还需要在system.web节点下设置httpRuntime的maxRequestLengthsystem.web httpRuntime maxRequestLength102400 executionTimeout3600 / /system.web注意这两个值要配合着改光改一个不生效。这也是一个常见的坑很多人改了没反应就是因为没改全。6.4 日常巡检建议服务器安全不是装完就完了日常巡检必须有。我个人的习惯是每周做一次快速检查查看IIS日志里有没有大量异常请求特别是POST到不存在的路径。检查Windows事件日志中的登录失败记录和IIS相关错误。确认磁盘剩余空间正常防止日志把空间耗尽。确认IIS和Windows补丁已经更新到最新。如果你的站点是正式业务有条件的话建议配置一套监控告警比如网站无法访问时立刻通知你。宁可多花点精力在预防上也不要等出了事再到处找原因。7. IIS备份与还原手贱党的救命稻草7.1 哪些东西值得备份IIS的备份主要有两块配置文件层面的备份和网站内容的备份。配置文件包括C:\Windows\System32\inetsrv\config\applicationHost.config所有网站、应用程序池、绑定关系的核心配置、administration.config管理授权配置、以及各个站点目录下的web.config文件。网站内容当然是整个站点目录的文件。如果站点有数据库还要把数据库备份排除在外数据库的备份策略更多是数据库那一套计划备份、事务日志、异地存储但这里要强调的是站点代码和配置分离备份数据库单独处理。7.2 用appcmd做配置备份推荐用IIS自带的命令行工具appcmd做配置备份几秒钟搞定%windir%\system32\inetsrv\appcmd.exe add backup before-change-20250115这条命令会把当前完整的IIS配置包括网站、应用程序池、配置设置的快照保存到C:\Windows\System32\inetsrv\backup目录下的before-change-20250115文件夹里。需要还原时先运行appcmd list backup查看有哪些备份然后执行%windir%\system32\inetsrv\appcmd.exe restore backup before-change-20250115还原会覆盖当前所有IIS配置并重启IIS服务操作前一定要确认这就是你想做的操作免得把半天的配置又冲掉。还原操作有风险这项一定要记住。更稳妥的做法是先把当前状态再做一次备份再还原到旧版本这样就算弄错了还能回去。配置备份只是IIS配置的部分不含网站文件。网站文件的备份我建议直接压缩整个站点目录保留最近3份或者把它纳入系统备份计划。7.3 还原的完整流程遇到IIS被改废了的情况还原流程是尝试用appcmd list backup确认有可用备份。执行appcmd restore backup 备份名。重启IIS服务iisreset。打开IIS管理器确认所有网站和应用池都正常加载。如果配置文件层面恢复不了比如applicationHost.config彻底损坏先把损坏文件改名然后检查IIS是否自动生成了备份或者从之前的正常备份中复制再执行appcmd recover config尝试恢复。实在无备份可恢复的极端情况卸载IIS再重新安装然后手动重建所有站点绑定和应用池同时把网站文件目录绑定好。这也是我强调平时做备份的原因。7.4 一键备份的PowerShell脚本手动敲命令还是太依赖记忆了我习惯写一个简单的PowerShell脚本一键完成配置备份和网站内容备份的组合操作$date Get-Date -Format yyyyMMdd-HHmmss $backupName iis-backup-$date $configBackupDir D:\IISBackups\config $contentSource D:\WebSites $contentBackupDir D:\IISBackups\content # 备份IIS配置 $env:windir\system32\inetsrv\appcmd.exe add backup $backupName # 备份网站内容 Compress-Archive -Path $contentSource -DestinationPath $contentBackupDir\$backupName.zip -Force # 清理60天前的旧备份 Get-ChildItem $configBackupDir -Directory | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-60) } | Remove-Item -Recurse -Force放到计划任务里每天凌晨执行一次比自己手动强多了。8. 常见问题排查速查表最后把我这些年遇到过的IIS相关问题整理成一个速查表方便你遇到问题时快速定位。这些问题是我在实际操作中真实遇到并解决的。现象可能原因解决办法本地localhost打不开IIS欢迎页IIS未安装成功或W3SVC服务未启动重装IIS查看服务状态iisreset重启局域网能访问外网不行路由器未做端口映射或运营商没有公网IP配置端口映射确认路由器WAN口是公网IP外网用域名访问不了IP可以域名解析未生效或未备案检查DNS设置确认A记录指向公网IP确认备案状态访问出现503 Service Unavailable应用程序池停了或应用程序池权限异常查看应用程序池状态右键“启动”检查池身份权限访问出现500.19Web.Config被改动过或配置语法错误查看详细错误信息检查Web.Config是否缺少节或版本不匹配访问出现403.14 Forbidden目录中没有默认文档或目录列表被禁用配置默认文档确认index.html存在且路径正确上传大文件提示HTTP 404.13请求大小超过IIS限制修改maxAllowedContentLength和httpRuntime maxRequestLength访问HTTPS链接显示不安全证书过期、域名不匹配或证书未正确绑定更新证书确认SSL证书绑定443端口并使用正确域名应用程序池权限改不动0x80005000权限或配置存储损坏管理员身份重开IIS管理器检查applicationHost.config权限appcmd recover config改造配置后IIS管理器打不开配置文件语法错误用appcmd list site或appcmd list apppool查错修复配置IIS日志文件巨大磁盘警告日志未轮转或保留时间过长配置每天生成新的日志并限制保留天数页面中文乱码默认文档或HTML文件编码不对或Web.Config没有声明正确的globalization设置Web.Config的globalization culturezh-CN uiCulturezh-CN /确保文件保存为UTF-8这个表基本覆盖了从安装到外网访问的绝大多数问题。遇到故障先别慌按照“服务状态 → 配置 → 网络路径 → 日志”的顺序逐步排查绝大多数问题都能在15分钟内定位。9. 几个额外的小技巧9.1 在Windows 2019/2022上做URL重写WordPress的固定链接、各类伪静态规则在IIS里需要URL Rewrite模块支持。默认装IIS时不包含这个模块需要单独下载安装。装好以后站点根目录下的web.config就会多出一个rewrite节点。WordPress的规则网上很多核心就是一条把非真实文件路径的请求统一交给index.php处理rewrite rules rule nameWordPress stopProcessingtrue match url.* / conditions add input{REQUEST_FILENAME} matchTypeIsFile negatetrue / add input{REQUEST_FILENAME} matchTypeIsDirectory negatetrue / /conditions action typeRewrite urlindex.php / /rule /rules /rewrite9.2 进行站点的冷备和热备前面提到备份补充一点IIS站点内容备份用Compress-Archive压缩没问题但站点在运行时有文件被占用可能导致压缩失败。所以备份时间最好选在凌晨访问量低的时候或者用专门的卷影副本功能来冷备。如果站点业务重要可以考虑双服务器架构。一台主服务器对外服务另一台定期同步站点文件并做配置镜像。这种方案虽然部署成本高一些但能极大降低故障恢复时间。9.3 把常用检查写成一个脚本检查服务状态、防火墙规则、端口监听状态、磁盘空间、最近日志错误这些操作整合到一个PowerShell脚本里执行一次就能看出问题。下面是一个简化版Write-Host 检查IIS相关服务 Get-Service W3SVC, WAS, IISADMIN | Format-Table Name, Status Write-Host 检查端口监听 netstat -ano | findstr :80 :443 Write-Host 检查防火墙规则 Get-NetFirewallRule -DisplayName *IIS*, *WWW* | Format-Table DisplayName, Enabled, Action Write-Host 检查磁盘空间 Get-PSDrive -PSProvider FileSystem | Format-Table Name, {LUsed(GB);E{[math]::Round($_.Used/1GB,2)}}, {LFree(GB);E{[math]::Round($_.Free/1GB,2)}} Write-Host 最近错误日志 Get-EventLog -LogName Application -EntryType Error -Newest 10 | Format-Table TimeGenerated, Source, Message9.4 遇到问题先查官方文档说实话IIS的问题绝大多数不用求助“玄学”微软的官方文档和社区帖子基本覆盖了99%的常见错误。我自己排查问题时的顺序是官方文档 → 开发者社区 → 技术博客 → 自己实验验证。网上很多答案是几年前的对应老版本IIS参考时可以注意版本差异但很多基础逻辑是相通的。另外如果部署的是.NET 8以上新的跨平台应用就别硬套老IIS的部署思路了新式应用的托管模型和依赖处理都不太一样。网上有一类问题是“IIS 中没有 .NET 8”其实是没装Hosting Bundle装了以后IIS就能直接托管.NET 8应用不用非得走Kestrel加反向代理那套当然那样也行。10. 收尾想说的话从零开始部署一个能对外访问的IIS网站看起来步骤挺多但实际操作一遍就会发现真正的关键节点就那五六个装IIS、建站点、配防火墙、做端口映射、绑定域名、加HTTPS。每完成一个节点你离“外网能访问”就近一步。我个人踩过印象最深的坑是第一次给路由器做端口映射时把外部端口设成了8080结果自己老忘记带端口号访问后来改成80才消停。类似这种小问题正好就是这篇内容想帮你避免的。最后再分享一个习惯每次动手改IIS配置前先用appcmd add backup做个快照成本不到一秒钟但能让你在改坏之后不慌不忙地恢复。这个习惯帮我挽救了至少两次生产事故级别的误操作。从最简单的静态页面开始慢慢加上自己的项目、数据库、HTTPS、域名你会发现IIS这套体系其实挺稳固的。希望这篇内容能帮你省下一些摸索的时间如果你在部署过程中遇到了什么特别棘手的报错欢迎在评论区写出来大家一起看看到底卡在哪一步。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。