ARTICLE DETAIL

资讯详情

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

Windows Server 2022部署IIS Web服务器:从安装到HTTPS配置全指南

Windows Server 2022部署IIS Web服务器:从安装到HTTPS配置全指南 简介面向IT运维人员与服务器初学者这份docx文档系统梳理了Windows Server 2022 Web服务器从零搭建的全流程。内容从操作系统安装入手涵盖安装介质准备、语言时区选择、磁盘分区与格式化等基础配置随后介绍网络连接、硬件设备、操作系统层面的功能测试方法并详细讲解创建网站目录、拷贝站点素材、配置网站端口与域名等挂载步骤强调端口不可重复使用等注意事项最后延伸至DNS服务器角色安装、DNS记录配置与域名解析验证帮助读者实现网址与IP地址的相互转换形成从系统部署到网站可访问的完整闭环。文档以步骤化说明呈现重点突出测试验证与排错思路适合需要快速上手服务器部署与站点发布的读者。读者可参照操作步骤逐步实践借助功能测试环节避免部署后返工。整个资源包仅1个文件格式为docx文档压缩后大小约1016KB已有2758人学习下载。1. 拿到一台 Windows Server 2022 裸机别急着装 NginxWeb 服务器默认答案其实是 IIS做运维的人都有一个惯性一提 Web 服务器脑子里先蹦出 Nginx、Apache。但如果你手里是一台 Windows Server 2022尤其是给内部业务系统做网站托管默认答案其实是 IIS 10。我自己接过一个项目客户坚持要在 Windows 上装 Nginx结果折腾了三天证书轮转和 Windows 服务守护最后发现 IIS 自带的绑定、日志和权限模型几乎开箱即用。IIS 不是性能最强的 Web 服务器但它跟 Windows 内核、AD 域、.NET 程序的配合程度是其他方案比不了的。这篇文章就是把“Windows Server 2022 上搭 Web 服务器”这条路径完整拆开IIS 角色怎么装、站点怎么建、参数怎么调、最常见的问题在哪以及最后怎么把 HTTP 升级成 HTTPS。适合刚接手 Windows 服务器的运维新手也适合习惯 Linux 但被强制切换过来的老手。2. 装 IIS 前的系统准备版本选择、静态 IP 与防火墙规则2.1 选标准版还是数据中心版Web 服务器负载不高标准版就够了Windows Server 2022 有 Standard 和 Datacenter 两个主要版本核心区别在虚拟化授权和软件定义数据中心功能上。Web 服务器通常跑在物理机或少数几台 VM 上Standard 版最多支持两个虚拟机实例对绝大多数中小业务完全够用。数据中心版多出来的 Storage Spaces Direct、软件定义的网络这些能力在纯 Web 托管场景里几乎碰不到。我给客户选型的经验是除非你确定要在同一台宿主机上跑四个以上 Windows VM否则就买 Standard把省下的授权费用留给带宽和证书。另一个版本选择是 Desktop Experience 还是 Server Core。Web 服务器如果走 IIS 管理器图形界面就选 Desktop Experience如果团队习惯 PowerShell 和远程管理Server Core 更省资源补丁也更少。但要注意Server Core 上没有 IIS 管理器你得用 IIS Administration API 或直接写 PowerShell 脚本。项目里有新手的话别选 Core否则排查问题时要开着另一台机器远程连进来反而拖慢进度。2.2 静态 IP 与 DNS 记录别让 Web 服务器在 DHCP 里裸奔安装 IIS 之前先确认这台服务器的 IP 是静态的。Web 服务器监听 80/443 端口IP 一变所有站点的绑定地址全部失效域名解析也指向错误目标。用静态 IP 是最基本的要求。用 PowerShell 查看当前网卡信息Get-NetIPConfiguration | Format-List这条命令会列出每个网络适配器的 IP 地址、子网掩码、网关和 DNS 服务器。确认当前是 DHCP 还是静态分配然后改配置New-NetIPAddress -InterfaceAlias Ethernet0 -IPAddress 192.168.1.10 -PrefixLength 24 -DefaultGateway 192.168.1.1 Set-DnsClientServerAddress -InterfaceAlias Ethernet0 -ServerAddresses 192.168.1.2,8.8.8.8两条命令都是立即生效的。第一条把网卡设定为固定地址并配好网关第二条设置 DNS 服务器。InterfaceAlias要跟Get-NetIPConfiguration里看到的名称一致如果不一致命令会直接报错。企业内网通常有自己的 DNS 服务器把内网 DNS 放在第一位外网 DNS 作为备用避免 Web 服务器解析内网主机名时绕到公网。改完 IP 后去 DNS 服务器上给这台机器加一条主机记录比如web.yourcompany.local指向192.168.1.10。没有域名解析后面站点绑定时只能靠 IP 访问证书也签不下来。2.3 防火墙放行 80/443 之前先把远程管理端口一并规划好Windows Server 2022 默认启用 Windows Defender 防火墙装完 IIS 后即便服务正常启动外部也访问不了。常见做法是提前把入站规则创建好避免装完 IIS 再手忙脚乱。用 PowerShell 创建放行规则New-NetFirewallRule -DisplayName HTTP 80 -Direction Inbound -Protocol TCP -LocalPort 80 -Action Allow New-NetFirewallRule -DisplayName HTTPS 443 -Direction Inbound -Protocol TCP -LocalPort 443 -Action Allow New-NetFirewallRule -DisplayName RDP 3389 -Direction Inbound -Protocol TCP -LocalPort 3389 -Action Allow参数很直白Direction Inbound是入站方向Protocol TCP限定协议LocalPort写端口号。RDP 的 3389 不一定每台机器都开如果你用其他远程管理工具就把对应端口加上。这些操作需要管理员权限普通域用户即使能登录服务器新建防火墙规则也会被 UAC 挡下来。这里有个很隐蔽的坑客户机可能走了另一个网段的防火墙策略。放行规则是在 Web 服务器本机上创建的但如果这台服务器前面还有硬件防火墙或云安全组同样要放行 80/443。很多新手把 Windows 防火墙规则配好了跑过去找云平台控制台结果发现安全组没放行白折腾一小时。2.4 系统更新与兼容性检查补丁打齐后面少排错开始装 IIS 角色之前先把 Windows Update 跑一遍。Server 2022 的月度补丁会更新 IIS 的底层组件和 .NET Framework如果你装完系统直接装 IIS可能遇到角色安装失败或 HTTP.sys 行为异常的问题。检查当前补丁状态Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 10如果没有任何输出或列表空荡荡说明系统从未更新过。此时先执行 Windows Update安装所有重要更新重启后再继续。装 IIS 前更新系统不是玄学而是避免把累积更新里的修复项叠加到刚装的环境上出问题时分不清是新装的还是系统底子没干净。兼容性方面SQL Server 2014 是很多老业务系统的数据库它能不能装在 Windows Server 2022 上取决于 SQL Server 的 Service Pack 版本。你可以在装完 IIS 后用 PowerShell 查看 SQL 版本SELECT VERSION;SP2 之后的 SQL Server 2014 才官方支持 Server 2022。如果业务系统不兼容Web 站点的数据库连接就会报“无法打开登录所请求的数据库”之类的错跟 Web 服务器本身无关但排查起来特别容易走冤枉路。3. 安装 IIS 角色与创建第一个站点从角色服务勾选到默认文档3.1 用服务器管理器装 IIS最小角色组合和功能清单在 Windows Server 2022 上IIS 不是独立安装的软件而是通过“添加角色和功能”向导装进来的操作系统组件。打开服务器管理器点“添加角色和功能”到“服务器角色”页勾选“Web 服务器(IIS)”。这里会默认带出一组角色服务但很多新手直接一路“下一步”把它装完了后面动态页面打不开再回来翻工。我通常保留以下最小组合其他的按需要再加角色服务用途是否默认勾选HTTP 错误自定义错误页信息否建议勾选静态内容提供 HTML/CSS/JS/图片是默认文档自动加载 index.html 等页面是目录浏览访问目录时显示文件列表否生产环境不建议开ASP.NET 4.7运行 .NET Web 应用否有需要才勾Windows 身份验证对接 AD 域账户登录否默认是匿名认证日志工具记录 W3C 格式访问日志是IIS 管理控制台图形化管理界面是如果你的站点是纯静态页面只装默认那组就够了。如果要跑 ASP.NET 或需要域用户登录必须把“ASP.NET 4.7”和“Windows 身份验证”勾上否则部署完成后报“未安装这些必需的 Web 服务器角色服务: Windows 身份验证”还得回服务器管理器补装。安装完成后会有进度条等它跑完不需要重启。验证安装是否成功直接在浏览器地址栏输入服务器本机 IP看到默认的 IIS 欢迎页就说明角色安装成功。3.2 用 PowerShell 安装 IIS批量交付服务器时的标准做法如果你要同时交付多台 Web 服务器或者在 Server Core 上部署图形向导就不太现实。常见做法是直接用 PowerShell 装角色命令很短Install-WindowsFeature -Name Web-Server -IncludeManagementTools这条命令把 IIS 和 IIS 管理工具一起装好。IncludeManagementTools参数会把 IIS 管理控制台、命令行工具等一并安装。如果要加 Windows 身份验证得把功能名一并写上Install-WindowsFeature -Name Web-Server, Web-Windows-Auth, Web-Asp-Net45 -IncludeManagementToolsWeb-Asp-Net45是 ASP.NET 4.7 在 PowerShell 里的功能名不同系统的功能名偶尔有差异可以用Get-WindowsFeature Web-*查看完整清单。命令执行完看到Success True就可以继续下一步。装完后确认 IIS 服务状态Get-Service W3SVCW3SVC是 IIS 的 World Wide Web Publishing Service状态应为Running。如果它是Stopped直接启动并设置自动Set-Service W3SVC -StartupType Automatic Start-Service W3SVCIIS 装好后默认会创建一个Default Web Site监听 80 端口物理路径在C:\inetpub\wwwroot。很多人习惯直接把文件丢进去用但正规做法是新建一个站点部署和管理都更干净。3.3 创建第一个站点物理路径、绑定与应用程序池打开 IIS 管理器右键“网站”选择“添加网站”。站点名称建议跟业务名称一致比如ERP-Web。物理路径指向你的网站文件目录比如D:\Websites\ERP。绑定这一栏是重点类型选 HTTPIP 地址选服务器静态 IP 或“全部未分配”端口填 80主机名填你的域名。如果不填主机名这个站点就响应所有指向本机 80 端口的请求多个站点在同一端口会冲突。用命令行创建站点是另一种写法New-Item -Path D:\Websites\ERP -ItemType Directory New-Website -Name ERP-Web -PhysicalPath D:\Websites\ERP -Port 80 -HostHeader erp.yourcompany.com第一条命令先创建目录避免 IIS 因物理路径不存在而拒绝创建站点。第二条里的HostHeader是主机名绑定同一个 IP 的 80 端口可以挂多个站点靠主机名区分。如果只有一个站点且想用 IP 直接访问就把HostHeader参数去掉。创建完站点后把网站文件放进D:\Websites\ERP。如果目录不在默认的C:\inetpub下IIS 会提示你授权选择“是”给应用程序池账户分配该目录的读取权限。这一步漏了的话站点会一直 403 或 500.19。3.4 添加默认文档与验证为什么 index.html 打开是 404文件放进去之后浏览器访问站点域名如果返回 404先别急着查代码。IIS 的默认文档列表决定了访问根路径时加载哪个文件。默认文档通常包含Default.htm、Default.asp、index.htm、index.html但不同版本的默认列表不一样。如果站点根目录只放了一个index.php或有其他文件名IIS 找不到默认文档就会 404。在 IIS 管理器里双击“默认文档”点右侧“添加”输入index.html把它移到列表顶部。也可以用命令行Set-WebConfigurationProperty -Filter /system.webServer/defaultDocument/files -Name collection -Value {valueindex.html}Set-WebConfigurationProperty直接修改 IIS 配置文件。Filter指定到默认文档节点collection给文件集合添加一项。用命令行改完不要重启站点配置是动态生效的。验证站点是否正常在服务器本地执行Invoke-WebRequest -Uri http://localhost/ -UseBasicParsing看到StatusCode 200表示站点正常返回。如果返回 500 或 404查看C:\inetpub\logs\LogFiles\W3SVC1\下的访问日志末行的sc-status字段就是返回码。200 是成功403 是权限不够404 是文件不存在或默认文档没配500 是应用池或代码异常。4. IIS 搭建避坑指南五条能直接省下半天时间的踩坑记录4.1 现象装完 IIS 后所有浏览器都打不开页面本机能开、外网不能开这种情况十有八九是防火墙规则没生效。服务器本机能访问说明 W3SVC 服务在跑、站点配置没毛病外部打不开说明入站流量被某种东西挡了。原因有三个层面Windows 防火墙没有放行 80/443云平台或硬件防火墙的安全组没有放行对应端口或者网络里有一层 NAT 没有做端口映射。解决顺序从近到远先看 Windows 防火墙规则Get-NetFirewallRule -DisplayName HTTP 80 | Get-NetFirewallPortFilter如果规则不存在用上一章的New-NetFirewallRule补上。然后检查云平台安全组或硬件防火墙的端口转发。最后确认路由器或负载均衡器把公网 IP 的 80 端口转到了服务器内网 IP 上。排错时不要同时改多处否则这三点哪个恢复的都不知道下次再出问题还是抓瞎。4.2 现象装 IIS 时报“未安装这些必需的 Web 服务器角色服务: Windows 身份验证”这个报错一般出现在部署 .NET 项目时项目代码里配置了 Windows 身份验证但 IIS 里没有安装对应角色服务。IIS 在向客户端返回 401 之前会检查自身是否具备该认证模块若检查不到就直接报错。原因就是装 IIS 时漏勾了角色服务。默认安装只带匿名身份验证Windows 身份验证、Basic 身份验证、摘要式身份验证都是可选项没人勾就不会装。解决方法是直接补装功能Install-WindowsFeature -Name Web-Windows-Auth -IncludeManagementTools装完后在 IIS 管理器里双击站点“身份验证”把“Windows 身份验证”设为启用把“匿名身份验证”禁用。如果你的站点只想让域用户访问这一步就对了。注意这个操作会阻止所有未认证请求需要把访问控制做好再去切否则所有人都进不来。4.3 现象静态页能打开ASP.NET 页面全部 404 或 500.19静态内容正常说明 IIS 基础模块没毛病。ASP.NET 页面打不开问题出在应用程序池和功能组件上。原因一般是两种要么装 IIS 时没勾 ASP.NET 角色服务要么应用程序池的 .NET CLR 版本设成了“无托管代码”。默认创建的应用程序池.NET CLR 版本是 v4.0但如果你创建的是纯静态站点这个设置会保持“无托管代码”导致 .aspx 文件无法通过 .NET 引擎处理。在 IIS 管理器里找到你的站点对应的应用程序池右键“高级设置”把“.NET CLR 版本”改为.NET CLR v4.0.30319。如果没有这一项回到添加角色功能的页面补装Web-Asp-Net45Install-WindowsFeature -Name Web-Asp-Net45改完后重启应用程序池再访问。500.19 则是web.config里声明的模块或处理器没装查C:\Windows\System32\inetsrv\config\applicationHost.config里的对应节确认声明的模块在系统里存在。这个文件是 IIS 的总配置别直接手改用 IIS 管理器操作会自动改它。4.4 现象IIS 站点报 502.5同时系统里飘着一条“wsl needs updating”的提示502.5 是 .NET 进程启动时崩溃产生的错误码。Windows Server 2022 上搭 Web 服务器如果同时装了 WSL 用于开发测试可能会看到 wsl 的更新提示和 502.5 一起出现。排查时容易把它们当成同一个问题来回折腾半天。实际上是两码事。502.5 的根因是 ASP.NET Core 模块启动失败进程崩溃导致请求无法处理。WSL 更新提示只是 Windows 附加功能的通知与 IIS 完全无关。处理 502.5先去检查站点的 stdout 日志把应用程序池的“stdoutLogEnabled”设为 trueSet-ItemProperty -Path IIS:\Sites\ERP-Web -Name logFile.directory -Value D:\Logs\IIS或者直接在 IIS 管理器里给应用程序池添加环境变量ASPNETCORE_ENVIRONMENTDevelopment再访问一次看异常详情。通常问题是 .NET 运行时版本不匹配或站点物理目录没有被应用程序池账户授权读取。解决了 502.5 后WSL 的提示可以单独处理更新 WSL 内核即可两者不要混在一起排查。4.5 现象站点创建时提示端口已被占用netstat 也查不出是谁占的新站点绑定 80 端口时IIS 常报“端口已被占用”。netstat -ano | findstr :80能查到占用进程的 PID但任务管理器里对应的是一个叫 System 的进程PID 4。占用它的不是普通程序而是HTTP.sys内核驱动。IIS 的所有 HTTP 请求都通过 HTTP.sys 转发如果服务器上装过其他注册到 HTTP.sys 的组件比如旧的 Web 服务器或某些网银插件它可能预留了某个 URL 段。查看 URL 保留列表netsh http show urlacl输出里能看到类似http://:80/SomePath的保留条目。如果有不需要的保留项删除它netsh http delete urlacl urlhttp://:80/SomePath删完重启 W3SVC 服务再尝试创建站点。这台服务器上如果跑着多个 Web 相关服务先确认哪个服务真的还在用这个 URL别误删导致另一个站点挂掉。5. 把 HTTP 变 HTTPS证书导入、443 绑定与 HTTP 强制跳转站点跑通 HTTP 只是第一步生产环境没有 HTTPS 等于裸奔。Windows Server 2022 上做 HTTPS首推的做法是导入证书后修改站点绑定。先通过 MMC 的证书管理单元把 CA 签发的证书导入到“本地计算机 - 个人”证书存储。导入完成后确认证书的“持有者”名称和目标域名一致。然后用 IIS 管理器打开站点绑定编辑现有 HTTP 条目或直接新增一条字段值类型httpsIP 地址全部未分配端口443主机名erp.yourcompany.com需要服务器名称指示(SNI)启用SSL 证书上一步导入的证书SNI 必须启用同一个 IP 的 443 端口才能挂多个证书绑定不同域名。如果只有一张证书不启用 SNI 也能工作但这不是好习惯。HTTPS 绑定完成后把 HTTP 请求强制跳转到 HTTPS。IIS 里没有原生开关常见做法是装 URL Rewrite 模块然后添加一条规则匹配所有 HTTP 请求并重定向到 HTTPSrule nameRedirect to HTTPS stopProcessingtrue match url(.*) / action typeRedirect urlhttps://{HTTP_HOST}/{R:1} redirectTypePermanent / /rule这段配置写入站点根目录的web.config。{HTTP_HOST}保留原始域名{R:1}保留原路径。redirectTypePermanent返回 301浏览器和搜索引擎都会记住新地址。临时测试可以先改成Temporary(302)稳定后再换回永久重定向。最后验证配置在服务器上执行curl.exe -I http://localhost/返回 301 且Location指向 HTTPS 地址说明跳转生效。curl.exe是 Server 2022 自带的工具不需要额外安装。我的习惯是每改完一次配置用curl.exe -I看一遍返回头确认状态码和 Location 都对再收工。这套流程走下来IIS 上的 Web 服务器基本处于可交付状态。希望帮到你。本文还有配套的精品资源点击获取
返回列表