☰
VMware中Windows Server搭建Web与DNS内网测试沙箱
2026/9/30 6:30:38 网站建设 项目流程

拿 VMware 装一台 Windows 服务器,再让它同时扛着 Web 站点和 DNS 解析,这套环境我前后搭过十几次。最早一次是为了复现客户内网里才出现的页面报错——本地怎么调都没事,一连上他们的网络就崩,最后只能自己从零攒一个"服务器 + Web + DNS 解析"的沙箱出来。后来这套东西就留下来了,前端联调用它挂测试域名、做内网系统对接前先拿它验一遍、教新人理解域名是怎么一步步变成页面的,都靠它。

这篇内容适合几类人:刚入行想把服务端环境摸一遍的运维新手,需要在本地造一套带自定义域名的 Web 环境的开发同学,还有准备做内网系统部署验证的人。整套流程我会从虚拟机的资源规划讲到 DNS 区域记录,再讲到 Web 站点绑定和最后一步的排错,中间所有容易卡住的地方我都会标出来。照着走一遍,正常情况下两个小时以内能跑通。

1. 先把实验目标拆清楚:Web和DNS为什么要挤在同一台虚拟机里

1.1 三个角色各自的职责边界

先把这件事想明白,后面配置才不会乱。这套环境里其实有三个独立的角色:VMware 负责提供硬件抽象和网络出口,Windows 服务器负责承载服务,Web 和 DNS 是两个互不认识的独立服务。

DNS 的活是"翻译"。浏览器地址栏里敲一个域名,操作系统会先问 DNS 服务器:"这个名字对应哪个 IP?"DNS 回答一个 IP 地址,浏览器才拿着这个 IP 去发起连接。DNS 全程不参与任何数据传输,它只在前面指路,指完就退场。

Web 的活是"接客"。它监听某个端口(HTTP 默认 80),收到请求后根据请求头里的 Host 字段决定用哪个站点、哪个目录的文件来响应。

把两者放在同一台机器上,好处是省资源、快照好管理、IP 只有一个不容易乱;代价是排错时如果只有一个症状,你很难判断是 DNS 没指对还是 Web 没起来。所以后面我在第 5 节专门留了一整节讲排查顺序,就是为了把这两层剥离开。

1.2 网络模式这一步选错,后面一半的坑都在这儿

VMware Workstation 新建虚拟机时会让你选网络类型,NAT、桥接、仅主机三种。这个选择的影响远比大多数人以为的大。

NAT 模式:虚拟机会进入VMnet8这个虚拟网络,网段通常是192.168.x.0/24。虚拟机通过宿主机做地址转换访问外网,宿主机也能直接访问虚拟机。**关键点:这个网段里宿主机的虚拟网卡地址一般是192.168.x.1,而网关是192.168.x.2。**我在这一步见过太多人把网关写成.1,结果虚拟机完全上不了网,转发器也失效,还以为是 DNS 装错了。

桥接模式:虚拟机直接出现在宿主机所在的那张物理网络里,会拿到和宿主机同网段的 IP。好处是同一局域网内其他设备也能访问你的站点;坏处是 IP 容易和别人撞,而且公司网络里给虚拟机申请地址有时候会触发一些管理策略,不太方便。

仅主机模式:只有宿主机能访问,适合完全隔离的测试场景。

做这套 Web + DNS 的沙箱,我的建议是NAT。理由是宿主机能访问、虚拟机也能上网(配转发器需要),网段固定不会乱,同时不会污染真实局域网。

1.3 版本与资源配置的取舍

操作系统版本上,Windows Server 2019 和 2022 都可以,两者在这套场景下几乎没有区别。如果你只是想练手,Server 2019 的社区资料多一些,遇到问题好搜。

配置上我的常用值是:

项目建议值说明
处理器2 核少于 2 核图形界面会明显卡顿
内存4 GB跑图形界面 + IIS + DNS 的舒适下限
磁盘60 GB,拆分多个文件拆分便于复制迁移
虚拟化引擎勾选 Intel VT-x/EPT不勾某些场景会非常慢
网络NAT见上一小节

内存别给 2 GB。虽然 Server 2019 官方说 2 GB 能动,但装了图形界面之后再开 IIS 管理器,切个页面要等好几秒,调试体验很差。

1.4 动手前先定稿:IP、主机名、域名的规划表

很多人上来就装,装到一半发现域名取名不合适、IP 和现有网段打架。花五分钟先把这张表填了:

项目我这次的取值说明
虚拟机 IP192.168.10.10由 VMnet8 网段决定
子网掩码255.255.255.0对应 /24
默认网关192.168.10.2NAT 模式下是.2
首选 DNS127.0.0.1装完 DNS 后指向自己
计算机名LAB-DNSWEB01别用中文、别超 15 字符
内部域名lab.internal下面细说

域名这里单独说一下。**不要拿你真实注册过的公网域名去做内网解析。**比如你有个example.com的域名在跑线上业务,本地把它解析到一个内网 IP,哪天调试完忘了清理,客户端拿去用就会指向内网地址,问题非常隐蔽。用lab.internal、corp.lab这类明显是内部的命名,一眼就知道不是给公网用的。

有争议的是.local。这个后缀被 mDNS(Bonjour、部分打印机发现协议)占用,在多播环境里可能互相干扰。小规模练手问题不大,但既然能换,就换个干净的。

2. 在VMware里把Windows Server装成一台能用的机器

2.1 新建虚拟机时值得多看一眼的四个选项

点"新建虚拟机",选自定义(高级),不要用典型。典型模式会帮你做几个决定,后面想改反而麻烦。

第一个:安装来源选"稍后安装操作系统"。如果你直接选 ISO 文件,VMware 的简易安装会试图帮你自动填计算机名、自动设密码、自动登录,看起来省事,实际上它填的密码策略和一些无人值守配置在后续做 DNS、IIS 角色时会带来莫名其妙的干扰。手动装一遍,慢十分钟,换来的是一个完全可预期的环境。

第二个:客户机操作系统选"Microsoft Windows",版本选对应的 Server 版本。这个主要影响 VMware 给的推荐配置,选错了不会崩,但推荐的磁盘类型会不合适。

第三个:固件类型。选 BIOS 或者 UEFI 都行,Server 2019 两者都支持。如果选 UEFI,记得把"安全引导"的勾去掉,某些安装镜像在安全引导下会卡在启动界面。我一般直接选 BIOS,省心。

第四个:磁盘拆分。"将虚拟磁盘拆分成多个文件"这个选项建议勾上。好处是单个文件不会太大,往移动硬盘里拷的时候友好。缺点是理论性能略低于单文件,但对这套用途完全感知不到。

2.2 安装介质与版本选择:桌面体验是底线

挂载 ISO 之后开机,安装向导走到"选择要安装的操作系统"这一步,务必选带"(桌面体验)"字样那一项。

默认高亮的那一项通常是 "Windows Server 2019 Standard",不带桌面体验。装出来是 Server Core,全黑命令行,没有开始菜单没有图形化的服务器管理器。对刚上手的人来说,配 DNS 和 IIS 全靠命令行,学习曲线陡得离谱。选错了就得重装,没有别的办法。

安装过程里会让你设 Administrator 密码。Server 默认的密码复杂度要求是:长度够、含大小写、含数字、含符号中的至少三类。随便设个P@ssw0rd123这类的,你自己记着就行,因为后面登录要反复输。

2.3 装完系统后的三件收尾事

第一件:装 VMware Tools。菜单里点"虚拟机 > 安装 VMware Tools",然后进虚拟机打开光驱,运行里面的setup.exe,一路下一步重启。装完之后有两个直接收益:分辨率能自适应窗口(不装就是 800×600 固定死的,看得眼睛疼),宿主机和虚拟机之间能复制粘贴文本。后者在你后面往虚拟机里粘命令的时候能省大量时间。

第二件:关掉服务器管理器自动启动。每次登录都弹一个大窗口,很烦。服务器管理器里点"管理 > 服务器管理器属性",勾上"在登录时不自动启动服务器管理器"。

第三件:改计算机名。打开"控制面板 > 系统和安全 > 系统 > 更改设置",把名字改成规划表里定好的那个。改完必须重启才生效。这一步别偷懒跳过,因为 DNS 记录、日志文件、站点标识里都可能用到主机名,后面再改会牵连一堆东西。

2.4 静态IP的两种配置方式和网关地址的陷阱

图形界面路径是:控制面板 > 网络和共享中心 > 更改适配器设置 > 右键网卡 > 属性 > Internet 协议版本 4 > 使用下面的 IP 地址。填完确定。

命令行我更推荐,快而且不会点错:

netsh interface ip set address name="Ethernet0" static 192.168.10.10 255.255.255.0 192.168.10.2 netsh interface ip set dns name="Ethernet0" static 127.0.0.1

网卡名称要先确认。Server 2019 在 VMware 里通常叫Ethernet0,用ipconfig /all或者Get-NetAdapter看一眼。

这里有个顺序问题要注意:**DNS 指向127.0.0.1这件事,应该等 DNS 服务角色装完、区域建好之后再设。**如果提前设了,DNS 服务还没起来,这台机器会连自己的名字都解析不了,Windows 的域发现、更新检查这类功能会变慢。所以严格来说这一步可以放到第 3 节做完之后。

配完之后立刻验证网络连通性:

ping 192.168.10.2 ping 114.114.114.114

第一条通说明虚拟网络正常,第二条通说明 NAT 出去的路由没问题。如果第二条不通,回去看 VMware 的"虚拟网络编辑器"里 VMnet8 的 NAT 设置是不是被关了。

3. DNS服务角色落地:从建区域到解析生效

3.1 添加DNS服务器角色的两种路径

图形化路径:服务器管理器 > 添加角色和功能 > 基于角色或基于功能的安装 > 从服务器池中选择服务器 > 在角色列表里勾选"DNS 服务器"。弹窗提示需要附加功能,点添加。一路下一步到安装。

命令行一条搞定:

Install-WindowsFeature -Name DNS -IncludeManagementTools

-IncludeManagementTools这个参数别省,不然后面没有图形化的 DNS 管理器,得靠dnscmd干活。

安装完成后,在"工具"菜单里能看到"DNS"。打开它,左边会展开出你的服务器名,下面挂着"正向查找区域"、"反向查找区域"、"条件转发器"这几项。刚装完的时候,正向区域里可能只有几个系统自动建的(比如TrustAnchors之类的特殊区域),别去动它。

3.2 正向查找区域:区域名怎么取才不埋雷

右键"正向查找区域 > 新建区域",向导里三件事:

区域类型选"主要区域"。"辅助区域"是从别的 DNS 服务器同步过来,"存根区域"是维护委派信息,这两个都用不上。

"在 Active Directory 中存储区域"这个勾去掉。这台机器没有加入域,勾了会报错,或者建出来的区域行为诡异。

区域名称填lab.internal。填完之后向导会提示"允许动态更新",选"不允许"。动态更新是说客户端能自己往区域里注册记录,域环境下有用,这里开着只会让区域文件慢慢变脏,出现一堆你不认识的记录。

建完之后,正向区域下面多出lab.internal这个节点,点开能看到里面已经自动有两条记录:SOA(起始授权机构)和 NS(名称服务器)。这两条是区域自己能工作的基础,不要删。

3.3 主机记录、别名与泛解析分别解决什么问题

A 记录(主机记录)是最基本的。右键区域 > 新建主机(A 或 AAAA),名称填www,IP 填192.168.10.10。如果之前建了反向区域,可以顺手勾上"创建相关的指针(PTR)记录",省一遍手工操作。

还想让lab.internal这个裸域名也能访问站点,就再建一条主机记录,名称留空(向导里显示为"(与父文件夹相同)"),IP 填同一个。

CNAME(别名)解决的是"多个名字指向同一台机器"的问题。比如希望portal.lab.internal、web.lab.internal都指向www,就建两条 CNAME,别名分别填portal、web,目标填www.lab.internal.(注意末尾那个点,表示这是完整限定名,不加点的话系统会自动补上当前区域名,容易搞错)。

什么时候用 CNAME 而不是直接建 A 记录?当 IP 可能变化时。改了www的 A 记录,所有指向它的 CNAME 自动跟着变。如果全用 A 记录,就得一条条改。

泛解析是建一条主机名为*的 A 记录。它会匹配所有没有明确定义的子域名。测试阶段偶尔方便,但排错时是噩梦——你以为是拼错了域名,结果它照样能解析出一个 IP,会把你带偏。我的建议是除非有明确需求,别建。

3.4 反向查找区域和PTR记录的价值

反向区域解决的是"给一个 IP,反查它叫什么名字"的需求。日常上网用不到,但很多服务在日志里会做反查,没有反向记录的话日志里全是一串 IP,出问题的时候排查效率差很多。

创建方式:右键"反向查找区域 > 新建区域 > 主要区域",区域名称填192.168.10这一段的网络 ID,向导会帮你生成10.168.192.in-addr.arpa这样的区域名。

建好之后,可以在里面手工加 PTR 记录,也可以在新建 A 记录的时候勾选自动生成。验证方法是:

nslookup 192.168.10.10

能返回www.lab.internal之类的名字就对了。

3.5 转发器:让这台服务器自己也能解析外网域名

DNS 服务器默认带着一组"根提示",理论上能自己从根服务器一级级问下来。但实际环境里,很多网络会阻断直接访问根服务器的查询,导致外网域名解析超时。

配置转发器更实际:右键服务器名 > 属性 > 转发器 > 编辑 > 添加。填114.114.114.114和8.8.8.8这两个常用地址,或者填你当前网络实际使用的那个本地解析地址。

这里有个逻辑要说清楚:一旦你把本机的 DNS 指向127.0.0.1,这台服务器所有的域名解析请求都会先问到自己的 DNS 服务。" www.lab.internal" 由本地区域直接回答,"其他地方的名字" 本地区域不知道,就会转发给转发器。

所以设置顺序是:转发器配好 → 本机 DNS 指向127.0.0.1→ 测试外网解析。如果转发器没配、网络又不通根服务器,本机会变成"内网名字能解析、外网名字全失败"的状态,看起来像断网了。

3.6 用nslookup把整条解析链路走一遍

依次执行这几条:

nslookup www.lab.internal nslookup lab.internal nslookup www.lab.internal 127.0.0.1 nslookup www.qq.com

第一条返回192.168.10.10,说明本地区域生效。第二条如果返回了 IP,说明裸域名那条记录也建对了。第三条显式指定用本机 DNS 查询,排除了"Windows 用了别的接口的 DNS"这种干扰。第四条是验证转发器,能返回真实公网 IP 就说明转发链路通了。

如果第一次查返回的是"非权威应答",别慌,那多半是缓存。执行ipconfig /flushdns清一下再查。

还有一个细节:用nslookup时它会先打印"默认服务器"和"Address"两行,显示当前用的是哪个 DNS。如果你看到默认服务器指向的不是127.0.0.1,说明网卡的 DNS 配置没生效,或者存在多网卡优先级问题,需要回去检查。

4. IIS建站:把域名真正指到一个页面上去

4.1 安装IIS时要额外勾选的功能项

图形化路径:服务器管理器 > 添加角色和功能 > 勾选"Web 服务器(IIS)"。中间会有一步"选择功能",这一步的默认勾选是不完整的,我建议手动补几个:

分类建议勾选用途
常见 HTTP 功能默认文档、目录浏览、HTTP 错误、静态内容静态页面必备
运行状况和诊断HTTP 日志记录、请求监视出问题时看日志
性能静态内容压缩减小响应体积
安全性请求筛选挡掉异常请求
应用程序开发ASP.NET 4.x、ISAPI 扩展、ISAPI 筛选器后续跑动态页面
管理工具IIS 管理控制台必须有

"管理工具"里的"IIS 管理控制台"一定要勾,不然装完了没图形界面。

命令行版本:

Install-WindowsFeature -Name Web-Server -IncludeManagementTools Install-WindowsFeature -Name Web-Default-Doc,Web-Dir-Browsing,Web-Http-Errors,Web-Static-Content,Web-Http-Logging,Web-Stat-Compression,Web-Filtering,Web-Asp-Net45,Web-Mgmt-Console

装完后"工具"菜单里出现"IIS 管理器"。

4.2 默认站点到底该删还是该留

打开 IIS 管理器,展开"网站",会看到一个叫Default Web Site的站点,物理路径是C:\inetpub\wwwroot,绑定是http *:80:(注意主机名那一栏是空的)。

这个空主机名的绑定意味着:**凡是发到 80 端口、Host 头没被其他站点匹配的请求,全都落到它头上。**它的作用是兜底。

要不要删?取决于你的规划。如果你只打算建一个站点并且让它绑定具体主机名www.lab.internal,那默认站点留着不会有冲突——因为请求的 Host 是www.lab.internal时会被你的站点匹配,匹配不到的时候才落到默认站点。

但如果你之后想用http://192.168.10.10直接访问来测试,看到的会是 IIS 的欢迎页而不是你的页面,容易造成"站点没生效"的误判。所以我的习惯是:**先停掉默认站点(右键 > 管理网站 > 停止),不要删。**停掉之后不会有兜底,任何请求要么被正确站点接住,要么明确报错,排查时信号更干净。真需要恢复,右键启动就行。

4.3 新建站点的完整配置与权限处理

先建目录,注意别放在C:\inetpub下面,那个目录的默认权限是给默认站点准备的,混在一起以后理不清。

New-Item -ItemType Directory -Path "D:\sites\lab" -Force icacls "D:\sites\lab" /grant "IIS_IUSRS:(OI)(CI)(RX)" /T

icacls这行是给IIS_IUSRS组授予读取和执行权限,(OI)(CI)表示继承到子文件夹和文件。**这一步是 403 错误的头号来源。**如果你不自建目录而是直接放桌面或者 C 盘根目录,NTFS 权限里没有IIS_IUSRS,IIS 拿不到文件,直接返回 403.14 或 401.3。

然后在 IIS 管理器里右键"网站 > 添加网站":

  • 网站名称:LabWeb
  • 应用程序池:点旁边的"选择",新建一个叫LabWebPool的池,.NET CLR 版本选"无托管代码"(纯静态页面情况下这个最轻),托管管道模式选"集成"
  • 物理路径:D:\sites\lab
  • 绑定:类型http,IP 地址选192.168.10.10(或者"全部未分配"),端口80,主机名填www.lab.internal

点确定。站点会立刻启动。

4.4 主机头绑定的工作原理

这里解释一下为什么同一个 80 端口能挂多个站点。

HTTP 协议在请求头里有一个Host字段,浏览器会把你要访问的域名放进去。IIS 收到请求后,先看端口,再看Host值,拿它和所有站点绑定里的"主机名"比对,匹配上哪个就走哪个站点的配置。所以:

请求的 Host匹配到的站点
www.lab.internalLabWeb
portal.lab.internal如果建了绑定这个主机名的站点就匹配它,否则落到默认站点或报 404
192.168.10.10主机名不匹配,落到空主机头的站点

这也解释了一个常见现象:用 IP 直接访问一个绑定了主机名的站点,会看到 404 或者是别的站点内容。这不是故障,是路由规则本来就该这样。

如果你想省事,绑定里的主机名留空,那这个站点就变成兜底的,任何 Host 都接。单站点场景下这么配最快。

4.5 一个能立刻验证的最小页面

IIS 的默认文档列表里包含index.html,所以直接放这个文件就能被自动识别。用 PowerShell 生成:

$html = @" <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8"> <title>Lab Web 站点</title> </head> <body> <h1>lab.internal 站点已运行</h1> <p>主机名:$env:COMPUTERNAME</p> <p>当前时间:$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')</p> </body> </html> "@ Set-Content -Path "D:\sites\lab\index.html" -Value $html -Encoding UTF8

-Encoding UTF8在 PowerShell 5.1 里会写入带 BOM 的文件。带 BOM 的 UTF-8 在 HTML 页面里浏览器通常能正确识别,加上<meta charset="utf-8">双保险,中文不会乱码。

然后在虚拟机的浏览器里访问http://www.lab.internal。**第一次用 IE 访问可能会被增强安全配置拦住,弹一堆警告。**关掉它的位置是:服务器管理器 > 本地服务器 > IE 增强的安全配置 > 把 Administrator 那一项设为"关闭"。关完重启 IE。

页面出来了,说明 DNS 和 Web 两层都通了。接下来要把这套东西从"虚拟机自己能访问"变成"宿主机也能访问",这时候才会冒出真正的问题。

5. 排错链路实录:解析通但网页打不开的四种典型症状

这部分是我踩坑最多的地方,按照遇到问题的顺序写,每一条都是实际发生过的。

5.1 症状一:nslookup正常,浏览器超时

nslookup www.lab.internal返回192.168.10.10,说明 DNS 没问题。浏览器转圈或者报连接超时,说明 TCP 层没通。

先确认端口通不通,不要靠猜:

Test-NetConnection www.lab.internal -Port 80

TcpTestSucceeded是False,那就是防火墙。Windows Server 默认开启防火墙,IIS 在新建站点时通常会自动加一条 HTTP 入站规则,但如果你改过端口、或者手工删过规则,就没了。手工加:

New-NetFirewallRule -DisplayName "LabWeb-HTTP-80" -Direction Inbound -Protocol TCP -LocalPort 80 -Action Allow

如果TcpTestSucceeded是True但页面还是不对,那问题在应用层。最典型的是主机头不匹配:你用http://192.168.10.10访问,但站点的绑定里主机名填了www.lab.internal,Host 字段对不上,IIS 会返回 404,或者返回 "Bad Request - Invalid Hostname"。这种时候改用域名访问就正常了。

还有一种情况是站点被停掉了。IIS 管理器里站点名称前面如果是灰色方块加停止标记,右键启动就行。

5.2 症状二:服务器本机能开,宿主机打不开

这种情况基本都是网络层的问题,跟 DNS 和 IIS 没关系。

第一步,从宿主机ping 192.168.10.10。不通的话,先看 VMware 的虚拟网络编辑器里 VMnet8 是不是启用的,再看虚拟机防火墙有没有放行 ICMP 回显请求。Windows 防火墙默认拦 ping,需要单独开:

New-NetFirewallRule -DisplayName "Allow-ICMP-In" -Protocol ICMPv4 -IcmpType 8 -Direction Inbound -Action Allow

第二步,ping 通了但网页打不开,就是 80 端口的事,回到 5.1 的排查。

第三步,网页也开了,但宿主机上敲域名解析不了。这是宿主机自己的 DNS 配置问题,跟虚拟机无关。宿主机要解析www.lab.internal,得让它知道去问谁。做法是给宿主机的 VMnet8 虚拟网卡配上 DNS 为192.168.10.10。

这里要提醒一句:宿主机是多网卡环境,Windows 的域名解析会涉及多接口的优先级策略,有时候配了也不一定按你预期走。最稳妥的做法是在宿主机的 hosts 文件里加一行192.168.10.10 www.lab.internal,位置在C:\Windows\System32\drivers\etc\hosts。改完执行ipconfig /flushdns。测完记得删掉,不然过几个月你会忘了这回事。

5.3 症状三:DNS改了,解析结果还是旧的

这条我单独列出来,因为它坑过我不止一次。

**第一层是系统缓存。**桌面系统的 DNS 客户端会缓存解析结果。改完记录执行ipconfig /flushdns。命令行的nslookup是直接发查询的,不走客户端缓存,所以经常出现"nslookup 是新的,浏览器还是旧的"这种矛盾现象,原因就在这里。

**第二层是浏览器的安全 DNS。**现在的 Edge 和 Chrome 默认可能开着"安全 DNS"(也叫 DNS over HTTPS),它会绕过操作系统的 DNS 直接去问公共的加密解析服务。

注意:这个功能一旦开着,你在本地 DNS 里加的任何记录它都看不到,因为它压根不问你的服务器。

关掉的位置在 Edge 的"设置 > 隐私、搜索和服务 > 安全性 > 使用安全 DNS",把它关掉。或者把lab.internal加到"不安全的 DNS 例外"里。这个问题表现得很隐蔽——ping 域名是通的(ping 走系统 DNS),浏览器就是打不开,因为浏览器自己走了另一条路。

**第三层是记录本身没生效。**检查是不是在错误的区域里建了记录,比如本来该建在lab.internal,结果建在了TrustAnchors或者别的区域里。

5.4 症状四:IIS抛出一堆HTTP错误码

IIS 的错误码是很明确的信号,看懂能省很多时间。

错误码含义常见原因
403.14禁止列出目录内容没配默认文档,且目录浏览未启用
401.3未授权NTFS 权限里缺IIS_IUSRS
404.0找不到文件路径错、文件名错、主机头不匹配
500.19配置数据无效web.config里有被锁定的配置节
503服务不可用应用程序池崩溃或被停

403.14 最典型的场景是:你放了default.htm之外的默认文档名,或者只放了index.php却没装 PHP。IIS 找不到默认文档时,会尝试列目录,列目录功能默认关闭,就返回 403.14。解决方式是确认文件名在默认文档列表里,或者在 IIS 的"默认文档"里手工加一条。

500.19 在处理web.config时很常见。默认情况下 IIS 锁定了一部分配置节,需要在"配置编辑器"里解锁特定节,或者用命令:

%windir%\system32\inetsrv\appcmd.exe unlock config -section:system.webServer/handlers

503 的话先看应用程序池的状态,右键回收一下。如果一回收就好、过一会又挂,就是代码层面的问题,去看 Windows 事件查看器里的应用程序日志。

5.5 一份可以照着走的排查顺序表

遇到"打不开"这个问题,按这个顺序走,不要跳步:

  1. nslookup 域名—— 确认 DNS 解析出的 IP 是不是你期望的那个
  2. Test-NetConnection 域名 -Port 80—— 确认 TCP 端口通不通
  3. 在服务器本机用http://127.0.0.1访问 —— 绕开 DNS,确认 IIS 服务本身活着
  4. 在服务器本机用http://域名访问 —— 确认本机 DNS 解析链路没问题
  5. 检查 IIS 绑定里的主机名和端口 —— 确认请求能被正确站点接住
  6. 查C:\inetpub\logs\LogFiles\W3SVC1下当天的日志 —— 看 IIS 实际收到了什么、返回了什么状态码
  7. 查 Windows 事件查看器"应用程序"日志 —— 看有没有服务层面的异常

第 6 步的日志很多人不知道在哪。文件名形如u_ex250101.log,用记事本打开就是一堆空格分隔的字段,重点看cs-uri-stem(请求路径)、cs(Host)(请求的主机头)、sc-status(返回状态码)这几列。IIS 到底收到了什么请求,这里面写得清清楚楚,比任何猜测都可靠。

6. 让这套沙箱更接近真实环境:几个后续值得做的调整

6.1 hosts与DNS的取舍:什么时候别折腾DNS

看完上面的配置,你可能会觉得为了几个测试域名搞一台 DNS 服务器是不是太重了。确实,如果只有一台客户端要解析,改 hosts 文件十秒钟就完事。

两者的差别在于:hosts 是"每台客户端各自维护一份",DNS 是"集中一份所有客户端共用"。一台机器用 hosts;三台以上、而且以后可能加更多,就值得搞 DNS。另外,如果你要验证的正是"解析流程"本身(比如测一批客户端的域名切换、测 TTL 生效时间),那必须用真的 DNS,hosts 绕过了整个解析链路,验证不出任何东西。

我的习惯是:临时调试用 hosts,固定环境用 DNS。

6.2 一个IP挂多个站点与后续上HTTPS的预留

现在只有一台机器一个 IP,但 80 端口可以挂无数个站点,靠主机头区分。比如再建一个portal.lab.internal的站点,物理路径换一个,绑定里主机名填portal.lab.internal,其他照旧。DNS 那边加一条 A 记录或 CNAME 指向同一个 IP。一套流程复制一遍,就是一片站点群。

如果以后要上 HTTPS,有个点要提前知道:**443 端口上的多个站点,如果共用同一个 IP 和端口,必须启用 SNI(服务器名称指示)。**IIS 8 之后支持,在建 HTTPS 绑定时勾选"需要服务器名称指示"就行。不启用 SNI 的话,一个 IP 上一个端口只能绑一张证书,第二个站点就加不进去了。

至于证书从哪来,本地测试场景用自签名证书就够了。IIS 管理器里有"创建自签名证书"的入口,生成后绑定上去,浏览器会报证书不受信任,点继续访问即可,不影响功能验证。

6.3 快照节奏与虚拟机磁盘的维护习惯

VMware 的快照是这套环境里最值钱的功能。我的建议是在三个节点各打一个:

  • 节点一:操作系统装完、VMware Tools 装完、静态 IP 配完
  • 节点二:DNS 角色装完、区域和记录建完、解析验证通过
  • 节点三:IIS 装完、站点跑通、宿主机能访问

有了这三个快照,后面无论怎么折腾,出问题五分钟就能回到一个已知正常的状态。

但快照别堆太多。每多一个快照,虚拟机磁盘的写放大就越严重,时间长了整个虚拟机卡得没法用。同一个节点上有新的快照时,把旧的合并掉("快照管理器 > 删除",注意"删除"是把改动合并回磁盘,不是回滚)。

6.4 时间同步、日志与区域文件备份

**时间同步。**虚拟机的时间默认跟着宿主机走(VMware Tools 提供的同步),一般没问题。但如果你后面把这台机器拉进域环境,Kerberos 认证对时间偏差的容忍度是 5 分钟,超了就登不进域。可以手工指定时间源:

w32tm /config /manualpeerlist:"ntp.aliyun.com" /syncfromflags:manual /update w32tm /resync

**日志位置。**IIS 日志在C:\inetpub\logs\LogFiles\W3SVC<站点ID>,站点 ID 在 IIS 管理器的站点列表里能看到。默认按天生成新文件。DNS 的查询日志默认是关的,需要排错时可以在 DNS 管理器的服务器属性 > 调试日志里临时开启,它会把每一个查询都记下来,量非常大,用完记得关。

**区域文件备份。**DNS 区域其实就是一个文本文件,放在C:\Windows\System32\dns\下面,文件名就是区域名,比如lab.internal.dns。想导出成可读格式:

dnscmd /zoneexport lab.internal lab.internal.backup.txt

导出后会出现在同一个目录下。改配置改崩了,把这个文件拷回去重启 DNS 服务就能恢复。区域记录不多的时候,直接把这个文件复制一份留档,比什么备份方案都简单。

这套环境我从最开始只是"想试试 DNS 怎么配",到后来变成日常一直在用的沙箱,中间反复装过很多次。真正让配置变快的原因不是记住命令,而是每次都把 IP、主机名、域名先在纸上定死——配置过程里 90% 的返工,都是因为中间改了一次名字或者改了一次网段,然后所有关联的地方都要跟着改一遍。另外,把快照当成"撤销键"来用,比事后修配置的效率高得多,尤其是在试一些不确定的参数时。

最后补一个小习惯:站点跑通之后,我会顺手在那台虚拟机桌面写个readme.txt,记录 IP、域名、站点目录、快照点的用途。过一个月再打开这套环境,看一眼就知道当初是怎么搭的,省掉重新摸一遍的时间。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询