- IIS 是什么? - 基础概念介绍
- 准备工作 - 部署前需要什么?
- 详细部署步骤 - 手动部署一个网站
- 常见问题与解决方案 - 遇到问题怎么办?
- 高级主题 - 部署、发布与性能优化
IIS 是什么?
IIS (Internet Information Services) 是由微软公司推出的一个Web服务器,你可以把它想象成一个网站的“管家”或“前台”。

(图片来源网络,侵删)
- 核心功能:它负责接收来自互联网用户(通过浏览器)的请求,然后将请求交给你的ASP.NET 应用程序去处理,处理完毕后,IIS 再将应用程序生成的响应(通常是 HTML 页面)返回给用户的浏览器。
- 作用:没有 IIS,你的 ASP.NET 程序代码只是一堆文件,无法被外界访问,IIS 是连接你的程序和互联网的桥梁。
- 支持的技术:IIS 不仅支持 ASP.NET,还支持 ASP、PHP、Node.js 等多种 Web 技术,以及静态内容(如 HTML, CSS, JavaScript, 图片等)。
准备工作
在开始部署之前,请确保你的服务器环境已经准备就绪。
1 服务器端要求
-
操作系统:
- Windows Server 系列 (如 2012, 2025, 2025, 2025) 是最常见的服务器环境。
- Windows 10/11 专业版/企业版 也可以安装 IIS,适合开发和测试。
-
安装 IIS:
- 进入 "控制面板" -> "程序" -> "启用或关闭 Windows 功能"。
- 勾选以下项目:
- Internet Information Services:主程序。
- World Wide Web Services -> 应用程序开发功能:
- ASP.NET:这是运行 ASP.NET 网站的核心。
- .NET Extensibility:用于支持 .NET 模块。
- ISAPI Extensions 和 ISAPI Filters:传统 Web 技术,通常需要。
- 万维网服务 -> 常见 HTTP 功能:
- HTTP 错误:用于显示自定义错误页面。
- 默认文档:允许设置网站的首页(如
index.html,default.aspx)。 - 目录浏览:如果开启,用户可以看到文件夹列表(生产环境务必关闭)。
- 点击“确定”进行安装。
-
安装 .NET 运行时:
(图片来源网络,侵删)- 你的 ASP.NET 应用程序需要 .NET 运行时来执行代码。
- 如果你的项目是 ASP.NET Core,你需要安装 .NET Runtime(对应项目使用的版本,如 .NET 6, 7, 8)。
- 如果你的项目是 ASP.NET (Framework 4.x),它通常依赖于 Windows 自带的 .NET Framework,但有时也需要安装最新的 Service Pack。
2 项目端要求
- 发布你的网站:
- 在 Visual Studio 中,右键点击你的项目 -> “发布”。
- 选择“文件夹”,然后指定一个本地文件夹作为“发布目标”。
- 点击“发布”,VS 会编译你的项目,并将所有必要的文件(包括
.dll,.config,.html,.js,.css等)复制到该文件夹中,这个文件夹就是你的部署包。
详细部署步骤
这里我们以最常见的手动部署为例,将上一步生成的发布包部署到 IIS。
步骤 1:创建网站目录
在服务器的硬盘上(C:\inetpub\wwwroot 下)为你的网站创建一个专属文件夹。
C:\inetpub\wwwroot\MyAwesomeWebApp
将你发布好的所有文件复制到这个文件夹中。
步骤 2:在 IIS 中添加网站
-
打开 IIS 管理器(可以在“服务器管理器”中找到,或直接搜索
inetmgr)。 -
在左侧的“连接”面板中,右键点击 “网站” -> “添加网站...”。
(图片来源网络,侵删) -
填写网站信息:
- 网站名称:一个易于识别的名称,
MyAwesomeWebApp。 - 物理路径:点击“浏览...”,选择你刚刚创建的文件夹(
C:\inetpub\wwwroot\MyAwesomeWebApp)。 - 类型:选择“应用程序”。
- 应用程序池:非常重要!
- ASP.NET Core:选择一个名称以
ASP.NET v开头的池,ASP.NET V4.0,或者你可以新建一个,并选择 .NET CLR 版本为No Managed Code,因为 ASP.NET Core 是自托管的。 - ASP.NET Framework (4.x):选择一个
ASP.NET v4.0的池,或者新建一个并选择对应的 .NET 版本。
- ASP.NET Core:选择一个名称以
- 端口:默认是 80 (HTTP) 或 443 (HTTPS),如果你的 80 端口已被占用,可以换一个,8080。
- 主机名:如果你想通过域名访问,在这里填写你的域名(
www.mydomain.com),如果只是本地测试或通过 IP 访问,可以留空。
- 网站名称:一个易于识别的名称,
-
点击“确定”,你的网站现在就出现在 IIS 列表中了。
步骤 3:配置应用程序池
- 在 IIS 管理器左侧,点击 “应用程序池”。
- 找到你刚才为网站创建或选择的应用程序池,右键点击它 -> “基本设置...”。
- .NET CLR 版本:
- ASP.NET Framework 4.x:必须选择一个具体的版本,如
v4.0.30319。 - ASP.NET Core:必须选择 “无托管代码” (No Managed Code)。
- ASP.NET Framework 4.x:必须选择一个具体的版本,如
- 托管管道模式:
- 集成:推荐使用,性能更好,能更好地与 IIS 集成。
- 经典:旧模式,用于兼容一些古老的 ASP 应用。
- .NET 信任级别:通常保持默认的
Full即可。
步骤 4:配置网站绑定
- 在 IIS 管理器左侧,选中你刚刚创建的网站。
- 在右侧的“操作”面板中,点击 “绑定...”。
- 点击“添加”:
- 类型:通常是
http或https。 - IP 地址:默认
全部未分配,意味着服务器上所有 IP 都能访问。 - 端口:和创建网站时设置的端口一致。
- 主机名:和创建网站时设置的主机名一致。
- 类型:通常是
- 如果需要 HTTPS,你需要先为该域名申请并安装 SSL 证书。
步骤 5:检查和访问
- 确保 Windows 防火墙 已经允许你设置的端口(如 80, 443, 8080)的入站规则。
- 在浏览器中访问你的网站:
- 如果设置了主机名:
http://www.mydomain.com - 如果只设置了端口:
http://你的服务器IP:8080
- 如果设置了主机名:
如果一切顺利,你应该能看到你的 ASP.NET 网站了!
常见问题与解决方案
问题 1:HTTP 错误 500.19 - Internal Server Error
- 现象:访问网站时提示“无法访问你所要求的页面,因为该页的相关配置数据无效。”
- 原因:通常是
web.config文件权限问题,或者 IIS 缺少某个模块。 - 解决方案:
- 权限问题:右键点击你的网站物理路径文件夹 -> “属性” -> “安全” -> “编辑” -> “添加”,输入
IIS_IUSRS或NETWORK SERVICE,给予“读取和执行”权限。 - 模块问题:在 IIS 管理器中,双击“模块”,检查是否有缺失的关键模块(如
AnonymousAuthenticationModule,UrlRoutingModule等),对于 ASP.NET Core,确保AspNetCoreModuleV2已安装并加载。
- 权限问题:右键点击你的网站物理路径文件夹 -> “属性” -> “安全” -> “编辑” -> “添加”,输入
问题 2:HTTP 错误 403.14 - Forbidden
- 现象:访问网站时提示“您无权查看此目录或页面。”
- 原因:IIS 没有为该网站设置默认文档,或者你没有权限访问。
- 解决方案:
- 双击 IIS 中的“默认文档”,确保你的首页(如
Default.aspx,index.html)在列表中,启用”状态。 - 检查网站的“身份验证”设置(在 IIS 管理器右侧),确保启用了“匿名身份验证”。
- 双击 IIS 中的“默认文档”,确保你的首页(如
问题 3:ASP.NET Core 应用启动失败 (HTTP 502.5 或 503)
- 现象:页面显示“HTTP 错误 502.5 - CGI 处理程序超时”或“服务不可用”。
- 原因:这几乎总是因为 ASP.NET Core 的进程启动失败,IIS 无法找到或正确启动你的
dotnet.exe或你的.dll文件。 - 解决方案:
- 检查路径:确保在“处理程序映射”中,
aspNetCore处理程序的路径指向了正确的dotnet.exe(通常在%ProgramFiles%\dotnet\下)。 - 检查
web.config:确保aspNetCore节点的processPath是dotnet,arguments是你的 DLL 路径(.\YourApp.dll)。 - 检查日志:这是最关键的一步!在
web.config中,找到aspNetCore节点,添加<stdoutLogEnabled>true</stdoutLogEnabled>和<stdoutLogFile>.\logs\stdout.log</stdoutLogFile>,然后访问网站,在网站根目录下找到logs文件夹,打开stdout.log文件,这里的日志会告诉你应用为什么启动失败(比如依赖库缺失、端口被占用、代码错误等)。
- 检查路径:确保在“处理程序映射”中,
问题 4:ASP.NET Framework 应用显示编译错误
- 现象:页面显示详细的编译错误信息。
- 原因:代码本身有 Bug,或者
web.config配置有问题。 - 解决方案:
- 在
web.config的<system.web>节点下,将<customErrors mode="RemoteOnly" />改为<customErrors mode="Off" />,这样可以看到详细的错误信息。 - 注意:生产环境务必设置回
RemoteOnly或On,以避免向用户暴露敏感的服务器信息。
- 在
高级主题
部署方法
除了手动复制文件,还有更高效的部署方式:
- Web Deploy:微软官方的自动化部署工具,可以与 Visual Studio、Team Services 等集成,实现一键发布、同步网站内容、甚至同步数据库。
- FTP/SFTP:传统的文件传输方式,简单直接,但功能有限。
- PowerShell:通过编写脚本,可以实现大规模、自动化的服务器管理和部署。
发布流程
现代化的开发流程通常是这样的:
- 开发人员将代码推送到 Git 仓库(如 GitHub, Azure DevOps)。
- 持续集成/持续部署 服务器(如 Jenkins, Azure DevOps Pipelines)检测到代码更新。
- CI/CD 服务器自动编译项目、运行测试。
- 如果测试通过,CI/CD 服务器自动调用 Web Deploy 或其他方式,将最新的发布包部署到 IIS 服务器上。
性能优化
- 压缩:在 IIS 中启用,可以大大减小 CSS、JS 文件的体积,加快加载速度。
- 应用程序池回收:合理设置回收策略,避免内存泄漏导致网站卡死。
- 输出缓存:对于不常变化的页面,可以启用输出缓存,将生成的 HTML 缓存起来,减少服务器计算压力。
- URL 重写:使用
URL Rewrite模块实现友好的 URL(伪静态),并做 301 重定向等。
在 IIS 上部署 ASP.NET 网站是 .NET 开发者必备的技能,核心流程可以概括为:
准备环境 -> 发布项目 -> 复制文件 -> 创建网站 -> 配置应用池 -> 绑定端口 -> 访问测试 -> 解决问题
随着经验的积累,你会越来越熟悉 IIS 的各种配置和排错技巧,并能利用 Web Deploy、CI/CD 等工具实现更高效、更可靠的自动化部署。
