跳转到内容

IIS 站点、应用、虚拟目录与应用池:四层模型

核验于 2 分钟阅读

分清 site/application/virtual directory/app pool,在 8080 建实验站点,并有意识地选择隔离边界。

测试环境Standard / Datacenter · 版本号 26100.33650 · x64
E1
版本号
26100.33650
版本
Standard / Datacenter
架构
x64
支持
文档(E1)
证据
E1官方文档
核验日期
2026-10-29
测试机
IIS Manager UI 参考:VM 361 Windows 11 26H2;Lab 站点 :8080;Server 2025 cmdlet 为 E1
页面类型
概念
IIS 管理器的站点视图:Default Web Site 在 80 端口,Lab 站点在 8080 端口。
VM 361 的 IIS 站点:Default Web Site (:80) 与 Lab (:8080)。Windows 11 UI 参考;Server 2025 角色步骤为 E1。点击查看原图。

四个不同的东西:

对象 是什么 自己的绑定? 自己的应用池?
站点(Site) 一个 Web 端点:绑定 + 根目录 + 应用池 有 有
应用(Application) 站点内的路径段(如 /shop) 无(继承站点绑定) 有
虚拟目录 映射到 URL 路径的文件夹 无 无
应用池 工作进程边界 无 —

不同主机名/端口用站点;同一主机下独立应用用应用;纯静态内容且不需要独立进程才用虚拟目录。

VM 361 的 IIS 管理器显示:

  • Default Web Site,id 1,http/*:80:
  • Lab,id 2,http/*:8080:,根 C:\inetpub\lab,应用池 labpool
IIS 管理器中选中 Lab 站点,显示 8080 绑定和右侧操作。
选中 Lab 站点:8080 绑定、路径 C:\inetpub\lab、已分配应用池。截图来自 Windows 11 26H2。

用 PowerShell(WebAdministration 模块)创建:

终端窗口
Import-Module WebAdministration
New-Item -ItemType Directory -Force C:\inetpub\lab | Out-Null
New-WebAppPool -Name 'labpool'
New-WebSite -Name 'Lab' -PhysicalPath 'C:\inetpub\lab' -Port 8080 -ApplicationPool 'labpool'

或用 appcmd:

终端窗口
appcmd add apppool /name:labpool /managedRuntimeVersion:""
appcmd add site /name:Lab /physicalPath:C:\inetpub\lab /bindings:"http/*:8080:"
appcmd set app "Lab/" /applicationPool:labpool

managedRuntimeVersion:"" 是 No Managed Code,对静态站或反代 Node/Python 是正确的。应用需要 .NET Framework 才用 v4.0。

终端窗口
New-WebApplication -Site 'Lab' -Name 'shop' -PhysicalPath 'C:\apps\shop' -ApplicationPool 'shoppool'

得到 http://host:8080/shop,有自己的应用池。父站点的 web.config 仍会继承,除非子应用覆盖。这个继承有用,也是“根路径正常、/shop 不正常”的常见来源。

终端窗口
New-WebVirtualDirectory -Site 'Lab' -Name 'docs' -PhysicalPath 'D:\StaticDocs'

/docs 映射文件夹,但用父应用的应用池。它不是隔离边界。

终端窗口
Get-Website | Select-Object Name, State, PhysicalPath, ApplicationPool
Get-WebApplication -Site 'Lab'
Get-WebVirtualDirectory -Site 'Lab'
Invoke-WebRequest http://localhost:8080/ -UseBasicParsing | Select-Object StatusCode

再从允许网段的另一台机器测;只测 localhost 不能证明防火墙/绑定正确。

  • 绑定冲突: 两个站点同一 IP:端口,没有主机头/SNI。IIS 启动一个,另一个失败。
  • 应用池错: 静态站放 DefaultAppPool 还加载 .NET,增加无谓攻击面。
  • 虚拟目录权限: 应用池身份需要对目标文件夹有 NTFS 读权限,不是 IIS“连接为”就够。
  • 嵌套配置: 父 web.config 可能挡住子应用;读 500.19,不要直接删配置。
  • 默认站点还开着: 未绑定主机名的请求可能落到它。

UI 来自 Windows 11 26H2。cmdlet 和对象模型与 Server 2025 同族,但 Server 角色安装仍是 E1;Server 2025 VM 复现后再升级证据等级。

来源