

>本文详细记录在 Windows Server 上使用 IIS 发布 ASP.NET 网站的完整过程,包括应用程序池配置、网站绑定、权限设置等关键步骤。
环境信息
-
**操作系统**:Windows Server / Windows 10+
-
**Web 服务器**:IIS (Internet Information Services)
-
**网站类型**:ASP.NET (.NET Framework v4.0)
-
**网站路径**:D:\网站发布\后台
前置条件
1. 确认 IIS 已安装并运行
```powershell
检查 IIS 服务状态
Get-Service W3SVC | Select-Object Name, Status
```
预期输出:
```
Name Status
W3SVC Running
```
2. 查看现有应用程序池
```cmd
%windir%\system32\inetsrv\appcmd.exe list apppool
```
操作步骤
步骤一:创建专用应用程序池
为网站创建独立的应用程序池,便于管理和隔离:
```cmd
%windir%\system32\inetsrv\appcmd.exe add apppool /name:"后台网站池" /managedRuntimeVersion:v4.0 /managedPipelineMode:Integrated
```
**参数说明:**
-
`/name:` 应用程序池名称
-
`/managedRuntimeVersion:v4.0` 使用.NET Framework 4.0
-
`/managedPipelineMode:Integrated` 集成模式(推荐)
步骤二:创建网站
使用 PowerShell 创建网站(此方法可避免绑定格式问题):
```powershell
$sm = Get-IISServerManager
site = sm.Sites.Add('后台网站', 'http', '*:8082:', 'D:\网站发布\后台')
$site.ApplicationDefaults.ApplicationPoolName = '后台网站池'
$sm.CommitChanges()
```
**参数说明:**
-
`'后台网站'` - 网站名称
-
`'http'` - 协议类型
-
`'*:8082:'` - 绑定信息(IP:端口:主机名)
-
`'D:\网站发布\后台'` - 网站物理路径
步骤三:配置目录权限
为确保 IIS 能够正常访问网站文件,需要添加以下权限:
```powershell
添加 IIS_IUSRS 读取权限
$acl = Get-Acl 'D:\网站发布\后台'
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule('IIS_IUSRS', 'ReadAndExecute', 'Allow')
acl.AddAccessRule(rule)
Set-Acl 'D:\网站发布\后台' $acl
添加应用程序池修改权限(用于上传等功能)
$acl = Get-Acl 'D:\网站发布\后台'
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule('IIS AppPool\后台网站池', 'Modify', 'Allow')
acl.AddAccessRule(rule)
Set-Acl 'D:\网站发布\后台' $acl
```
步骤四:验证网站状态
```cmd
查看网站列表
%windir%\system32\inetsrv\appcmd.exe list site
查看应用程序池状态
%windir%\system32\inetsrv\appcmd.exe list apppool
```
预期输出:
```
SITE "后台网站" (id:1,bindings:http/*:8082:,state:Started)
```
步骤五:测试访问
```powershell
测试网站是否可访问
$response = Invoke-WebRequest -Uri 'http://localhost:8082/' -TimeoutSec 10 -UseBasicParsing
Write-Host "状态码:" $response.StatusCode
```
常见问题排查
问题 1:网站创建后处于停止状态
**原因:** 绑定格式不正确或端口被占用
**解决方案:**
```cmd
删除问题网站
%windir%\system32\inetsrv\appcmd.exe delete site "网站名称"
使用 PowerShell 重新创建(更可靠)
$sm = Get-IISServerManager
site = sm.Sites.Add('网站名', 'http', '*:端口:', '物理路径')
$sm.CommitChanges()
```
问题 2:访问超时或 503 错误
**原因:** 应用程序池未启动或权限不足
**解决方案:**
-
检查应用程序池状态
-
添加 IIS_IUSRS 读取权限
-
添加应用程序池身份修改权限
问题 3:ASP.NET 页面无法解析
**原因:** 应用程序池 .NET 版本不匹配
**解决方案:**
```cmd
修改应用程序池 .NET 版本
%windir%\system32\inetsrv\appcmd.exe set apppool "应用程序池名" /managedRuntimeVersion:v4.0
```
完整脚本(一键部署)
将以下内容保存为 `deploy.ps1`:
```powershell
IIS 发布 ASP.NET 网站一键脚本
$siteName = "后台网站"
$poolName = "后台网站池"
$port = "8082"
$physicalPath = "D:\网站发布\后台"
创建应用程序池
Write-Host "正在创建应用程序池..."
$sm = Get-IISServerManager
pool = sm.ApplicationPools.Add($poolName)
$pool.ManagedRuntimeVersion = "v4.0"
$pool.ManagedPipelineMode = 0 # Integrated
$sm.CommitChanges()
创建网站
Write-Host "正在创建网站..."
site = sm.Sites.Add(siteName, 'http', "\*:port:", $physicalPath)
site.ApplicationDefaults.ApplicationPoolName = poolName
$sm.CommitChanges()
配置目录权限
Write-Host "正在配置权限..."
acl = Get-Acl physicalPath
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule('IIS_IUSRS', 'ReadAndExecute', 'Allow')
acl.AddAccessRule(rule)
Set-Acl physicalPath acl
rule = New-Object System.Security.AccessControl.FileSystemAccessRule("IIS AppPool\\poolName", 'Modify', 'Allow')
acl.AddAccessRule(rule)
Set-Acl physicalPath acl
Write-Host "部署完成!访问地址:http://localhost:$port/"
```
执行:
```powershell
powershell -ExecutionPolicy Bypass -File deploy.ps1
```
总结
本文介绍了在 Windows IIS 上发布 ASP.NET 网站的完整流程,关键要点:
-
**应用程序池隔离**:为每个网站创建独立的应用程序池
-
**端口绑定**:使用 PowerShell API 可避免绑定格式问题
-
**权限配置**:IIS_IUSRS 读取 + 应用程序池身份修改权限
-
**验证测试**:使用 Invoke-WebRequest 快速验证
按照以上步骤,可确保 ASP.NET 网站在 IIS 上稳定运行。
**参考资料:**
-
Microsoft Docs - IIS 应用程序池\](https://docs.microsoft.com/zh-cn/iis/get-started/introduction-to-iis/iis-application-pools)