Windows IIS 发布 ASP.NET 网站完整教程

>本文详细记录在 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 错误

**原因:** 应用程序池未启动或权限不足

**解决方案:**

  1. 检查应用程序池状态

  2. 添加 IIS_IUSRS 读取权限

  3. 添加应用程序池身份修改权限

问题 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 网站的完整流程,关键要点:

  1. **应用程序池隔离**:为每个网站创建独立的应用程序池

  2. **端口绑定**:使用 PowerShell API 可避免绑定格式问题

  3. **权限配置**:IIS_IUSRS 读取 + 应用程序池身份修改权限

  4. **验证测试**:使用 Invoke-WebRequest 快速验证

按照以上步骤,可确保 ASP.NET 网站在 IIS 上稳定运行。


**参考资料:**

  • Microsoft Docs - IIS 应用程序池\](https://docs.microsoft.com/zh-cn/iis/get-started/introduction-to-iis/iis-application-pools)

相关推荐
一叶星殇1 个月前
IIS 部署 .NET 6 WebApi 实战指南(附优缺点分析)
iis·.net
未来之窗软件服务2 个月前
服务器运维(二十六)终端安全证书管控与IIS 服务器—东方仙盟练气期
运维·服务器·安全·iis·仙盟创梦ide·东方仙盟
贾修行2 个月前
IIS 作为反向代理:为 ASP.NET Core Kestrel 应用保驾护航
后端·iis·asp.net·反向代理·arr·url 重写规则
木南W4 个月前
实践笔记:IIS + URL Rewrite + ARR 实现 ASP.NET Core 蓝绿部署
iis·url rewrite·arr·蓝绿部署
ManageEngine卓豪4 个月前
如何在IIS中配置HTTP重定向
http·iis·http重定向
准时准点睡觉6 个月前
HTTP 错误 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容——错误代码:0x00000000
运维·服务器·iis·asp.net
是萝卜干呀6 个月前
IIS 部署 asp.net core 项目时,出现500.19、500.31问题的解决方案
后端·iis·asp.net·hosting bundle
haonuy*8 个月前
文件解析漏洞 iis apache nginx中间件相关漏洞详解
nginx·iis·apache·文件解析漏洞
mytudousi9 个月前
.Net 9.0环境下WebApi发布到IIS
iis·.net web api