多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

Windows Server 2022 Web服务器搭建:IIS站点与DNS解析实战

Windows Server 2022 Web服务器搭建:IIS站点与DNS解析实战 简介本资源是一份面向IT运维人员与Windows服务器初学者的实操文档围绕Windows Server 2022环境下Web服务器的搭建与配置展开帮助读者掌握从系统安装到网站上线的完整流程。资源包共1个docx文件压缩包约1016KB内容以图文步骤形式组织涵盖服务器安装、功能测试、网站挂载及域名解析等核心环节便于按章节对照操作。文档中详细说明了安装介质准备、语言与时区选择、分区格式化等安装要点并给出网络连接、硬件设备与操作系统三类功能测试方法在网站挂载部分涉及创建网站目录、拷贝网站素材、配置端口与域名等操作同时强调端口不可重复使用等注意事项域名解析部分则介绍DNS服务器安装、记录配置与解析测试。目前已有2762人学习下载适合需要快速上手Windows Server 2022 Web服务部署、查漏补缺的运维人员参考。1. 从裸机到能访问的站点Windows Server 2022 Web 服务器搭建到底在做什么很多同行第一次接触 Windows Server 2022 时会下意识把它当成一台“配置高一点的 Windows 10”结果装完系统、配好 IIS、把站点目录一挂浏览器里敲 IP 却只看到默认页或者 404。问题往往不在 IIS 本身而在于整条链路——系统角色、站点绑定、端口占用、DNS 解析——任何一环没对齐访问就会断在中间。这篇笔记拆的就是这条链路从服务器安装、功能测试到把网站素材挂到 IIS 站点再到用 DNS 服务器把域名和 IP 对应起来。适合刚接手 Windows 服务器运维的工程师、需要在内网或测试环境快速起站点的开发以及准备把本地项目搬到 Windows Server 2022 上做验证的人。整套流程不依赖第三方面板全部用系统自带角色和工具完成复现门槛低但细节坑不少。2. 装系统与角色选型为什么是 IIS 而不是别的2.1 Windows Server 2022 安装时的几个关键选择安装介质可以从 Microsoft 官方渠道获取也可以用已有的 ISO。启动安装程序后语言、时区、键盘布局按实际机房位置选这些后面改起来虽然能改但时区不对会导致日志时间戳偏移排查问题时容易误判。许可协议接受后安装类型选“自定义”因为完整安装会带上大量用不到的角色后续打补丁和排查攻击面都更麻烦。分区环节是第一个容易翻车的地方。如果服务器只有一块盘系统分区建议不低于 60 GB因为 Windows Server 2022 累积更新体积不小再加上 IIS 日志、DNS 日志空间吃紧会直接导致更新失败。分区格式用 NTFS不要用 ReFS 做系统盘IIS 的某些元数据写入在 ReFS 上兼容性并不理想。安装完成后第一件事是改计算机名并重启。默认的随机名在后续加入域或者做 DNS 注册时会造成混乱。改完名再装角色顺序不要反。# 重命名计算机并重启名字按机房命名规范来 Rename-Computer -NewName WEB-DMZ-01 -Restart这条命令执行后会自动重启。参数-NewName后面跟的是新主机名建议用“角色-区域-序号”的格式方便后续在 DNS 里做记录时一眼认出用途。-Restart表示改完立即重启不加的话需要手动重启才生效。2.2 IIS 角色安装与最小化功能选择Windows Server 2022 里装 IIS 有两条路服务器管理器图形界面或者 PowerShell。图形界面适合第一次装、想看清楚每个选项的人PowerShell 适合批量部署和写进脚本。我一般先用图形界面走一遍确认功能清单再把它转成 PowerShell 命令存档。服务器管理器里点“添加角色和功能”走到“服务器角色”那一步勾选“Web 服务器 (IIS)”。弹出的“添加角色和功能向导”里会问要不要加 IIS 管理控制台选“添加功能”。接下来功能列表里以下几个是必须勾的Web 服务器 → 常见 HTTP 功能 → 默认文档、目录浏览、HTTP 错误、静态内容Web 服务器 → 性能 → 静态内容压缩管理工具 → IIS 管理控制台如果站点要跑 ASP.NET 或者 PHP再按需加“应用程序开发”下的对应项。不要一次性全勾装多了等于给自己增加补丁面和被扫描面。用 PowerShell 装的话命令是这样的# 安装 IIS 核心角色包含管理控制台和静态内容支持 Install-WindowsFeature -Name Web-Server -IncludeManagementTools-Name Web-Server是 IIS 的角色标识-IncludeManagementTools会把 IIS 管理器一起装上。执行完不需要重启但建议重启一次让所有组件状态一致。装完后在浏览器里访问http://localhost看到 IIS 默认欢迎页说明角色本身没问题。2.3 装完先测什么网络、硬件、系统三层验证系统装完、IIS 角色就位别急着拷网站。先做三层验证顺序不能乱。网络层ipconfig /all看 IP、网关、DNS 指向是否正确。如果服务器是静态 IP确认没有和 DHCP 池冲突。然后ping网关再ping一个外网地址如果允许出站确认路由通。硬件层Get-PhysicalDisk看磁盘健康状态Get-NetAdapter看网卡链路速度和双工模式。曾经遇到过网卡协商成半双工IIS 响应慢到以为是被攻击其实是物理层问题。系统层Get-WindowsFeature确认 IIS 相关功能都装上了Get-Service W3SVC确认 World Wide Web Publishing Service 是 Running 状态。如果 W3SVC 起不来多半是 80 端口被占或者依赖服务没起。# 检查 IIS 核心服务状态和 80 端口占用 Get-Service W3SVC, WAS netstat -ano | findstr :80Get-Service W3SVC, WAS会列出 IIS 的两个核心服务W3SVC 是网站发布服务WAS 是应用池管理服务。两个都必须是 Running。netstat -ano | findstr :80用来查 80 端口被谁占了最后一列是进程 PID拿去任务管理器里对常见的是被 Skype、SQL Server Reporting Services 或者某些远程管理工具占用。3. 挂载站点与端口配置把素材变成能访问的网站3.1 站点目录规划与素材拷贝IIS 默认站点目录在C:\inetpub\wwwroot生产环境不建议把业务站点放这里。我一般会在非系统盘建一个独立目录比如D:\WebSites\下面按站点名分子目录。这样做的好处是系统盘做镜像或者重置时站点数据不受影响。# 创建站点根目录和站点子目录 New-Item -Path D:\WebSites\Portal -ItemType Directory -Force # 把本地准备好的网站素材拷进去假设素材在 E:\Source\Portal Copy-Item -Path E:\Source\Portal\* -Destination D:\WebSites\Portal\ -Recurse -ForceNew-Item的-Force表示目录已存在也不报错。Copy-Item的-Recurse用于拷贝子目录-Force覆盖同名文件。拷完后检查一下目录权限IIS 应用池默认用IIS AppPool\DefaultAppPool这个虚拟账户去读文件如果素材是从别的机器拷来的NTFS 权限可能没继承需要手动加读取权限。# 给 IIS 应用池账户授予站点目录读取权限 icacls D:\WebSites\Portal /grant IIS AppPool\DefaultAppPool:(OI)(CI)(RX)icacls是 Windows 的权限管理命令。/grant后面跟账户和权限(OI)表示对象继承(CI)表示容器继承(RX)表示读取和执行。这条命令执行后应用池账户才能读到站点文件否则访问会报 401.3 或者 500.19。3.2 在 IIS 里新建站点并绑定端口打开 IIS 管理器左侧展开服务器节点右键“网站” → “添加网站”。站点名称填一个能认出来的物理路径指向刚才建的D:\WebSites\Portal。绑定类型选 httpIP 地址如果服务器有多块网卡选对外提供服务的那块端口默认 80但如果 80 已经被默认站点占了这里必须换。端口不能重复使用这是硬规则。同一台服务器上两个站点不能绑同一个 IP 加同一个端口。如果确实需要多个站点共用 80得用主机头Host Header来区分那是另一种配置方式后面 DNS 那章会提到。用 PowerShell 建站点更可控# 新建 IIS 站点绑定到 8080 端口 New-WebSite -Name Portal -PhysicalPath D:\WebSites\Portal -Port 8080 -Force-Name是站点在 IIS 里的显示名-PhysicalPath是站点根目录-Port 8080指定监听端口-Force表示如果同名站点已存在就覆盖。执行完后用Get-WebSite确认状态是 Started。3.3 端口冲突排查与防火墙放行换端口之后访问地址要带上端口号比如http://192.168.1.10:8080。如果访问不通先在本机curl一下# 本机测试站点响应 Invoke-WebRequest -Uri http://localhost:8080 -UseBasicParsing如果本机通、外部不通基本是防火墙没放行。Windows Server 2022 默认启用 Windows Defender 防火墙入站规则里 80 和 443 有预置规则但 8080 这种自定义端口没有。# 放行 8080 端口的入站 TCP 流量 New-NetFirewallRule -DisplayName IIS Portal 8080 -Direction Inbound -Protocol TCP -LocalPort 8080 -Action Allow-Direction Inbound表示入站-Protocol TCP指定协议-LocalPort 8080是本地监听端口-Action Allow表示允许。这条规则建完后立即生效不需要重启防火墙服务。如果本机都不通检查应用池是否启动、站点是否 Started、物理路径权限是否够。IIS 的 500 错误一般会在C:\inetpub\logs\LogFiles下有详细记录或者开失败请求跟踪Failed Request Tracing来看具体卡在哪一步。4. DNS 服务器安装与域名解析让 IP 变成好记的地址4.1 安装 DNS 服务器角色网站能用 IP 加端口访问之后下一步是让它能用域名访问。Windows Server 2022 自带的 DNS 服务器角色就能做这件事不需要额外买软件。# 安装 DNS 服务器角色 Install-WindowsFeature -Name DNS -IncludeManagementTools-Name DNS是 DNS 角色的标识-IncludeManagementTools会把 DNS 管理器一起装上。装完后在服务器管理器里能看到 DNS 节点或者直接运行dnsmgmt.msc打开。安装完成后DNS 服务默认是自动启动的。用Get-Service DNS确认状态是 Running。如果服务器本身是域控DNS 可能已经装好了这一步可以跳过。4.2 创建正向解析区域和 A 记录DNS 管理器里右键“正向查找区域” → “新建区域”。区域类型选“主要区域”如果这是独立服务器就选“在此服务器上存储区域”。区域名称填你的域名比如contoso.local。允许动态更新选“不允许”测试环境手动建记录更可控。建完区域后右键区域 → “新建主机 (A 或 AAAA 记录)”。名称填portalIP 地址填服务器的 IP比如192.168.1.10。这样portal.contoso.local就解析到192.168.1.10了。用 PowerShell 做同样的事# 创建正向查找区域 Add-DnsServerPrimaryZone -Name contoso.local -ZoneFile contoso.local.dns # 在区域内添加 A 记录 Add-DnsServerResourceRecordA -Name portal -ZoneName contoso.local -IPv4Address 192.168.1.10Add-DnsServerPrimaryZone的-ZoneFile指定区域文件存放的文件名默认在C:\Windows\System32\dns\下。Add-DnsServerResourceRecordA的-Name是主机名-ZoneName是所属区域-IPv4Address是解析目标 IP。建完后用nslookup portal.contoso.local验证。4.3 客户端 DNS 指向与解析测试服务器自己解析自己需要在网卡设置里把 DNS 指向127.0.0.1或者本机 IP。如果是给内网其他机器提供解析那些机器的 DNS 要指向这台服务器的 IP。# 把本机 DNS 指向自己 Set-DnsClientServerAddress -InterfaceAlias Ethernet -ServerAddresses 127.0.0.1-InterfaceAlias是网卡名称用Get-NetAdapter可以查到。-ServerAddresses可以跟多个地址主 DNS 写自己备用可以写上游 DNS。测试解析# 验证域名解析是否生效 Resolve-DnsName -Name portal.contoso.local -Server 127.0.0.1Resolve-DnsName的-Server参数指定用哪台 DNS 来查这里指定本机。如果返回的 IP 是192.168.1.10说明解析链路通了。然后在浏览器里访问http://portal.contoso.local:8080应该能看到站点内容。如果解析不通检查 DNS 服务是否 Running、区域是否已加载、A 记录是否拼写正确。常见的一个坑是区域名和实际域名不一致比如区域建的是contoso.local但查询的是portal.contoso.com那肯定解析不到。5. 避坑与排查搭建过程中最容易翻车的五个点5.1 现象访问站点返回 500.19错误码 0x80070005原因IIS 应用池账户对站点目录没有读取权限或者web.config文件本身权限不对。从别的机器拷过来的素材NTFS 权限往往只保留了原机器的账户IIS 虚拟账户不在里面。解决用icacls给IIS AppPool\DefaultAppPool加读取和执行权限命令在 3.1 节里已经给过。如果站点用的是自定义应用池账户名要换成IIS AppPool\你的应用池名。5.2 现象本机能访问局域网其他机器访问超时原因Windows Defender 防火墙没放行对应端口。80 和 443 有预置规则但 8080 或者自定义端口没有。解决用New-NetFirewallRule加入站规则命令在 3.3 节。加完后用Get-NetFirewallRule -DisplayName IIS Portal 8080确认规则已启用。5.3 现象DNS 记录建了但nslookup返回“找不到”原因客户端 DNS 没指向这台 DNS 服务器或者 DNS 服务器上的区域没有正确加载。还有一种情况是区域名和查询名不匹配比如区域是contoso.local查询的是portal.contoso.local但区域里建的是portal.contoso.com。解决先ipconfig /all确认客户端 DNS 指向再在 DNS 服务器上Get-DnsServerZone确认区域状态是 Active最后核对 A 记录的名称和区域名拼接起来是否等于查询的完整域名。5.4 现象IIS 站点启动后自动停止原因端口被其他进程占用或者应用池崩溃。常见占用 80 端口的进程有 Skype、SQL Server Reporting Services、以及某些远程管理工具。解决netstat -ano | findstr :80找到 PID任务管理器里结束对应进程或者给 IIS 换端口。如果是应用池崩溃看事件查看器 → Windows 日志 → 应用程序找来源为WAS或W3SVC的错误。5.5 现象域名解析偶尔通、偶尔不通原因DNS 服务器上配了转发器但转发器不可达导致查询超时后回退到本地区域。或者客户端配了多个 DNS主 DNS 不通时切到备用备用上没有这条记录。解决在 DNS 管理器里检查转发器配置测试环境可以先把转发器清空只保留本地区域解析。客户端 DNS 只配一个地址避免多 DNS 切换带来的不一致。6. 进阶技巧用主机头在一台服务器上跑多个站点一台 Windows Server 2022 只跑一个站点资源利用率太低。IIS 支持用主机头Host Header在同一 IP 同一端口上区分多个站点配合 DNS 的多条 A 记录就能实现portal.contoso.local和blog.contoso.local都指向同一台服务器但访问不同站点。配置方法在 IIS 里新建第二个站点绑定的时候 IP 选同一个端口都填 80但在“主机名”那一栏填blog.contoso.local。第一个站点的主机名填portal.contoso.local。这样 IIS 收到请求后根据 HTTP 请求头里的 Host 字段来决定交给哪个站点处理。DNS 那边加两条 A 记录都指向同一个 IP# 为两个子域名分别建 A 记录指向同一台服务器 Add-DnsServerResourceRecordA -Name portal -ZoneName contoso.local -IPv4Address 192.168.1.10 Add-DnsServerResourceRecordA -Name blog -ZoneName contoso.local -IPv4Address 192.168.1.10两条记录建完后portal.contoso.local和blog.contoso.local都解析到192.168.1.10。IIS 根据主机头把请求分发到不同站点。这个方案的好处是不用额外 IP也不用改端口客户端访问时不需要带端口号。有一个细节要注意如果服务器上还有默认站点Default Web Site绑着 80 端口且没有主机头它会截获所有没有匹配到主机头的请求。所以要么把默认站点停掉要么给它也配一个主机头。我一般直接把默认站点停掉避免干扰。验证的时候用curl带 Host 头来测# 模拟带主机头的请求验证 IIS 是否正确分发 Invoke-WebRequest -Uri http://192.168.1.10 -Headers {Hostblog.contoso.local} -UseBasicParsing-Headers {Hostblog.contoso.local}手动指定 Host 头IIS 收到后会按主机头规则匹配到 blog 站点。如果返回的是 blog 站点的内容说明主机头绑定生效。从那以后我每次配多站点都会先把默认站点停掉再逐条验证主机头最后才去动 DNS。这个顺序能避免大部分“明明配了却访问到错误站点”的玄学问题。希望帮到你。本文还有配套的精品资源点击获取
返回列表