1. IIS 是什么? - 基础概念介绍
  2. 准备工作 - 部署前需要什么?
  3. 详细部署步骤 - 手动部署一个网站
  4. 常见问题与解决方案 - 遇到问题怎么办?
  5. 高级主题 - 部署、发布与性能优化

IIS 是什么?

IIS (Internet Information Services) 是由微软公司推出的一个Web服务器,你可以把它想象成一个网站的“管家”或“前台”。

asp.net 网站 iis
(图片来源网络,侵删)
  • 核心功能:它负责接收来自互联网用户(通过浏览器)的请求,然后将请求交给你的ASP.NET 应用程序去处理,处理完毕后,IIS 再将应用程序生成的响应(通常是 HTML 页面)返回给用户的浏览器。
  • 作用:没有 IIS,你的 ASP.NET 程序代码只是一堆文件,无法被外界访问,IIS 是连接你的程序和互联网的桥梁。
  • 支持的技术:IIS 不仅支持 ASP.NET,还支持 ASP、PHP、Node.js 等多种 Web 技术,以及静态内容(如 HTML, CSS, JavaScript, 图片等)。

准备工作

在开始部署之前,请确保你的服务器环境已经准备就绪。

1 服务器端要求

  1. 操作系统

    • Windows Server 系列 (如 2012, 2025, 2025, 2025) 是最常见的服务器环境。
    • Windows 10/11 专业版/企业版 也可以安装 IIS,适合开发和测试。
  2. 安装 IIS

    • 进入 "控制面板" -> "程序" -> "启用或关闭 Windows 功能"。
    • 勾选以下项目:
      • Internet Information Services:主程序。
      • World Wide Web Services -> 应用程序开发功能
        • ASP.NET:这是运行 ASP.NET 网站的核心。
        • .NET Extensibility:用于支持 .NET 模块。
        • ISAPI ExtensionsISAPI Filters:传统 Web 技术,通常需要。
      • 万维网服务 -> 常见 HTTP 功能
        • HTTP 错误:用于显示自定义错误页面。
        • 默认文档:允许设置网站的首页(如 index.html, default.aspx)。
        • 目录浏览:如果开启,用户可以看到文件夹列表(生产环境务必关闭)。
    • 点击“确定”进行安装。
  3. 安装 .NET 运行时

    asp.net 网站 iis
    (图片来源网络,侵删)
    • 你的 ASP.NET 应用程序需要 .NET 运行时来执行代码。
    • 如果你的项目是 ASP.NET Core,你需要安装 .NET Runtime(对应项目使用的版本,如 .NET 6, 7, 8)。
    • 如果你的项目是 ASP.NET (Framework 4.x),它通常依赖于 Windows 自带的 .NET Framework,但有时也需要安装最新的 Service Pack。

2 项目端要求

  1. 发布你的网站
    • 在 Visual Studio 中,右键点击你的项目 -> “发布”。
    • 选择“文件夹”,然后指定一个本地文件夹作为“发布目标”。
    • 点击“发布”,VS 会编译你的项目,并将所有必要的文件(包括 .dll, .config, .html, .js, .css 等)复制到该文件夹中,这个文件夹就是你的部署包

详细部署步骤

这里我们以最常见的手动部署为例,将上一步生成的发布包部署到 IIS。

步骤 1:创建网站目录

在服务器的硬盘上(C:\inetpub\wwwroot 下)为你的网站创建一个专属文件夹。 C:\inetpub\wwwroot\MyAwesomeWebApp 将你发布好的所有文件复制到这个文件夹中。

步骤 2:在 IIS 中添加网站

  1. 打开 IIS 管理器(可以在“服务器管理器”中找到,或直接搜索 inetmgr)。

  2. 在左侧的“连接”面板中,右键点击 “网站” -> “添加网站...”

    asp.net 网站 iis
    (图片来源网络,侵删)
  3. 填写网站信息:

    • 网站名称:一个易于识别的名称,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 版本。
    • 端口:默认是 80 (HTTP) 或 443 (HTTPS),如果你的 80 端口已被占用,可以换一个,8080。
    • 主机名:如果你想通过域名访问,在这里填写你的域名(www.mydomain.com),如果只是本地测试或通过 IP 访问,可以留空。
  4. 点击“确定”,你的网站现在就出现在 IIS 列表中了。

步骤 3:配置应用程序池

  1. 在 IIS 管理器左侧,点击 “应用程序池”
  2. 找到你刚才为网站创建或选择的应用程序池,右键点击它 -> “基本设置...”
  3. .NET CLR 版本
    • ASP.NET Framework 4.x:必须选择一个具体的版本,如 v4.0.30319
    • ASP.NET Core:必须选择 “无托管代码” (No Managed Code)。
  4. 托管管道模式
    • 集成:推荐使用,性能更好,能更好地与 IIS 集成。
    • 经典:旧模式,用于兼容一些古老的 ASP 应用。
  5. .NET 信任级别:通常保持默认的 Full 即可。

步骤 4:配置网站绑定

  1. 在 IIS 管理器左侧,选中你刚刚创建的网站。
  2. 在右侧的“操作”面板中,点击 “绑定...”
  3. 点击“添加”:
    • 类型:通常是 httphttps
    • IP 地址:默认 全部未分配,意味着服务器上所有 IP 都能访问。
    • 端口:和创建网站时设置的端口一致。
    • 主机名:和创建网站时设置的主机名一致。
  4. 如果需要 HTTPS,你需要先为该域名申请并安装 SSL 证书。

步骤 5:检查和访问

  1. 确保 Windows 防火墙 已经允许你设置的端口(如 80, 443, 8080)的入站规则。
  2. 在浏览器中访问你的网站:
    • 如果设置了主机名:http://www.mydomain.com
    • 如果只设置了端口:http://你的服务器IP:8080

如果一切顺利,你应该能看到你的 ASP.NET 网站了!


常见问题与解决方案

问题 1:HTTP 错误 500.19 - Internal Server Error

  • 现象:访问网站时提示“无法访问你所要求的页面,因为该页的相关配置数据无效。”
  • 原因:通常是 web.config 文件权限问题,或者 IIS 缺少某个模块。
  • 解决方案
    1. 权限问题:右键点击你的网站物理路径文件夹 -> “属性” -> “安全” -> “编辑” -> “添加”,输入 IIS_IUSRSNETWORK SERVICE,给予“读取和执行”权限。
    2. 模块问题:在 IIS 管理器中,双击“模块”,检查是否有缺失的关键模块(如 AnonymousAuthenticationModule, UrlRoutingModule 等),对于 ASP.NET Core,确保 AspNetCoreModuleV2 已安装并加载。

问题 2:HTTP 错误 403.14 - Forbidden

  • 现象:访问网站时提示“您无权查看此目录或页面。”
  • 原因:IIS 没有为该网站设置默认文档,或者你没有权限访问。
  • 解决方案
    1. 双击 IIS 中的“默认文档”,确保你的首页(如 Default.aspx, index.html)在列表中,启用”状态。
    2. 检查网站的“身份验证”设置(在 IIS 管理器右侧),确保启用了“匿名身份验证”。

问题 3:ASP.NET Core 应用启动失败 (HTTP 502.5 或 503)

  • 现象:页面显示“HTTP 错误 502.5 - CGI 处理程序超时”或“服务不可用”。
  • 原因:这几乎总是因为 ASP.NET Core 的进程启动失败,IIS 无法找到或正确启动你的 dotnet.exe 或你的 .dll 文件。
  • 解决方案
    1. 检查路径:确保在“处理程序映射”中,aspNetCore 处理程序的路径指向了正确的 dotnet.exe(通常在 %ProgramFiles%\dotnet\ 下)。
    2. 检查 web.config:确保 aspNetCore 节点的 processPathdotnetarguments 是你的 DLL 路径(.\YourApp.dll)。
    3. 检查日志:这是最关键的一步!在 web.config 中,找到 aspNetCore 节点,添加 <stdoutLogEnabled>true</stdoutLogEnabled><stdoutLogFile>.\logs\stdout.log</stdoutLogFile>,然后访问网站,在网站根目录下找到 logs 文件夹,打开 stdout.log 文件,这里的日志会告诉你应用为什么启动失败(比如依赖库缺失、端口被占用、代码错误等)。

问题 4:ASP.NET Framework 应用显示编译错误

  • 现象:页面显示详细的编译错误信息。
  • 原因:代码本身有 Bug,或者 web.config 配置有问题。
  • 解决方案
    1. web.config<system.web> 节点下,将 <customErrors mode="RemoteOnly" /> 改为 <customErrors mode="Off" />,这样可以看到详细的错误信息。
    2. 注意生产环境务必设置回 RemoteOnlyOn,以避免向用户暴露敏感的服务器信息。

高级主题

部署方法

除了手动复制文件,还有更高效的部署方式:

  • Web Deploy:微软官方的自动化部署工具,可以与 Visual Studio、Team Services 等集成,实现一键发布、同步网站内容、甚至同步数据库。
  • FTP/SFTP:传统的文件传输方式,简单直接,但功能有限。
  • PowerShell:通过编写脚本,可以实现大规模、自动化的服务器管理和部署。

发布流程

现代化的开发流程通常是这样的:

  1. 开发人员将代码推送到 Git 仓库(如 GitHub, Azure DevOps)。
  2. 持续集成/持续部署 服务器(如 Jenkins, Azure DevOps Pipelines)检测到代码更新。
  3. CI/CD 服务器自动编译项目、运行测试。
  4. 如果测试通过,CI/CD 服务器自动调用 Web Deploy 或其他方式,将最新的发布包部署到 IIS 服务器上。

性能优化

  • 压缩:在 IIS 中启用,可以大大减小 CSS、JS 文件的体积,加快加载速度。
  • 应用程序池回收:合理设置回收策略,避免内存泄漏导致网站卡死。
  • 输出缓存:对于不常变化的页面,可以启用输出缓存,将生成的 HTML 缓存起来,减少服务器计算压力。
  • URL 重写:使用 URL Rewrite 模块实现友好的 URL(伪静态),并做 301 重定向等。

在 IIS 上部署 ASP.NET 网站是 .NET 开发者必备的技能,核心流程可以概括为:

准备环境 -> 发布项目 -> 复制文件 -> 创建网站 -> 配置应用池 -> 绑定端口 -> 访问测试 -> 解决问题

随着经验的积累,你会越来越熟悉 IIS 的各种配置和排错技巧,并能利用 Web Deploy、CI/CD 等工具实现更高效、更可靠的自动化部署。