IIS 配置 .NET 网站完整指南

本指南将分为以下几个部分:

iis配置.net网站
(图片来源网络,侵删)
  1. 准备工作: 确保你的系统环境满足要求。
  2. 安装 IIS 和 .NET 运行时: 在 Windows Server 或 Windows 10/11 上安装必要的组件。
  3. 部署网站: 将你的 .NET 应用程序文件放到 IIS 可访问的位置。
  4. 在 IIS 中创建网站: 配置网站的基本信息,如绑定、端口等。
  5. 配置应用程序池: 为你的网站选择合适的 .NET 版本。
  6. 高级配置与安全设置: 包括 URL 重写、权限设置等。
  7. 常见问题与排错: 解决配置过程中可能遇到的典型错误。

准备工作

在开始之前,请确保你已经具备以下条件:

  • 一台 Windows 服务器或 Windows 10/11 操作系统
  • 一个已编译好的 .NET 网站项目,你可以通过 Visual Studio 发布项目,得到一个包含所有必要文件(如 .dll, .config, .html 等)的文件夹。
  • 管理员权限,因为安装 IIS 和进行配置都需要管理员身份。

安装 IIS 和 .NET 运行时

这是最关键的一步,你需要确保 IIS 和你的 .NET 应用程序所需的运行时都已安装。

在 Windows Server 上 (通过服务器管理器)

  1. 打开 服务器管理器
  2. 点击 “管理” -> “添加角色和功能”
  3. 在“开始之前”页面,点击 “下一步”
  4. 在“选择安装类型”页面,选择 “基于角色或功能的安装”,点击 “下一步”
  5. 在“选择目标服务器”页面,选择你的服务器,点击 “下一步”
  6. 在“选择服务器角色”页面,展开 “Web 服务器 (IIS)”
  7. 在弹出的对话框中点击 “添加功能”,然后点击 “下一步”
  8. 在“Web 服务器角色”页面,你可以根据需要勾选功能,对于基础的 .NET 网站,确保以下角色服务被勾选:
    • 应用程序开发:
      • ASP.NET (这是必须的,支持 .NET Framework)
      • .NET Extensibility (可选,用于支持 .NET 模块)
    • 健康诊断:
      • HTTP 日志记录 (强烈推荐,用于排查问题)
      • 请求监控 (可选)
  9. 点击 “下一步”,直到最后一步,然后点击 “安装”
  10. 安装完成后,系统会提示你安装成功。

在 Windows 10/11 上 (通过控制面板或 PowerShell)

通过控制面板 (推荐)

  1. 打开 “控制面板” -> “程序” -> “启用或关闭 Windows 功能”
  2. 在列表中,找到并勾选 “Internet Information Services (IIS)”
  3. 展开 IIS,然后展开 “万维网服务”
  4. 勾选 “应用程序开发功能” 下的 ASP.NET
  5. 勾选 “健康诊断” 下的 HTTP 日志记录
  6. 点击 “确定”,等待 Windows 完成安装。

通过 PowerShell (最快捷)

iis配置.net网站
(图片来源网络,侵删)

以管理员身份打开 PowerShell,然后运行以下命令:

# 安装 IIS 和 ASP.NET
Enable-WindowsOptionalFeature -Online -FeatureName IIS-WebServerRole, IIS-WebServer, IIS-CommonHttpFeatures, IIS-HttpErrors, IIS-HttpRedirect, IIS-ApplicationDevelopment, IIS-ASPNET, IIS-HealthAndDiagnostics, IIS-HttpLogging, IIS-Security, IIS-RequestFiltering, IIS-Performance -All

安装完成后,你可以在浏览器中访问 http://localhost,如果看到 IIS 欢迎页面,说明安装成功。


部署网站

你需要将你的 .NET 应用程序文件放到一个能让 IIS 访问的文件夹中。

  1. 选择一个位置: 我们会将网站文件放在 C:\inetpub\wwwroot 目录下,为了更好的管理,建议为每个网站创建一个子文件夹,为 "MyWebApp" 创建 C:\inetpub\wwwroot\MyWebApp
  2. 复制文件: 将 Visual Studio 发布后生成的所有文件(包括 .dll, .config, .html, .css, web.config 等)复制到这个文件夹中。

提示: web.config 文件是 IIS 和 .NET 应用程序的核心配置文件,在发布时,Visual Studio 通常会根据你的发布配置(如 Debug/Release, IIS/文件夹)自动生成一个合适的 web.config

iis配置.net网站
(图片来源网络,侵删)

在 IIS 中创建网站

我们将 IIS 指向我们刚刚部署的网站文件夹。

  1. 打开 IIS 管理器,你可以在开始菜单中搜索“IIS管理器”来找到它。
  2. 在左侧的“连接”面板中,右键点击 “站点”,选择 “添加网站...”
  3. 填写网站信息:
    • 网站名称: 给你的网站起一个名字,"MyWebApp",这个名字仅在 IIS 管理器中使用。
    • 物理路径: 点击右侧的浏览按钮,选择你刚才存放网站文件的文件夹,C:\inetpub\wwwroot\MyWebApp
    • 类型: 选择 “http”
    • IP 地址: 默认是 “全部未分配”,这意味着网站将监听服务器上所有的 IP 地址,如果你有多个 IP,可以指定一个。
    • 端口: 默认是 80,80 端口已被占用(IIS 默认页),你需要修改一个未被占用的端口(如 8080)。
    • 主机名: 留空,如果你想通过域名访问(如 www.mydomain.com),在这里填写域名,之后你需要在 DNS 中将域名解析到服务器的 IP 地址。
  4. 点击 “确定”

你的网站已经创建成功了,你可以在 IIS 管理器的“站点”列表中看到它。


配置应用程序池

应用程序池是隔离网站运行环境的容器,决定了你的网站使用哪个 .NET 版本运行。

  1. 在 IIS 管理器左侧,点击 “应用程序池”
  2. 在右侧列表中,找到与你网站名称相同的应用程序池("MyWebApp"),右键点击它,选择 “基本设置...”
  3. .NET CLR 版本: 这是关键选项。
    • 无托管代码: 如果你只托管静态网站(HTML, CSS, JS)。
    • .NET CLR v4.0.30319: 这是 .NET Framework 的版本,如果你的项目是 .NET Framework (如 .NET 4.x, 3.5, 2.0),请选择此项。
    • 无托管代码: 如果你使用的是 .NET Core / .NET 5+注意:对于 .NET Core / .NET 5+,必须选择“无托管代码”,因为这些版本是自托管的,不依赖 IIS 的 CLR。
  4. 托管管道模式:
    • 集成: 这是现代推荐的模式,性能更好,功能更全。
    • 经典: 为了兼容旧版 ASP 应用程序而保留,对于新项目,尽量使用“集成”模式。
  5. 点击 “确定”

对于 .NET Core / .NET 5+ 的重要提示:

  • 确保 web.config 文件中包含了正确的处理程序映射,通常在发布时 Visual Studio 会自动生成,它会将所有请求转发到 aspnetcorev2_inprocess.dll (进程内模式) 或通过反向代理到 Kestrel 服务器 (进程外模式)。
  • 你还需要安装 .NET Hosting Bundle,以便 IIS 能够加载托管模块,可以从 Microsoft 官网下载:.NET 下载

高级配置与安全设置

设置默认文档

  1. 在 IIS 管理器中,选择你的网站。
  2. 双击 “默认文档” 功能。
  3. 在右侧,点击 “添加...”,输入你的首页文件名,Default.aspx (对于 .NET Framework) 或 index.html,点击“确定”。
  4. 使用“上移”和“下移”按钮,将你添加的文档移到列表最上方。

配置 URL 重写

对于 .NET Core / .NET 5+ 的 MVC 应用,通常需要 URL 重写来移除 URL 中的 index.aspxindex.html 后缀。

  1. 下载并安装 URL Rewrite 模块IIS URL Rewrite Module
  2. 在 IIS 管理器中,选择你的网站。
  3. 双击 “URL 重写”
  4. 在右侧操作栏,点击 “添加入站规则...”
  5. 选择 “空规则”,然后点击“确定”。
  6. 配置规则:
    • 名称: Remove trailing slash
    • 匹配的 URL:
      • 模式:
      • 使用: 正则表达式
      • 忽略大小写: 勾选
    • 条件:
      • 输入 {REQUEST_FILENAME}
      • 类型: 文件
      • 检查如果为文件或目录: 取消勾选
    • 操作:
      • 操作类型: 重定向
      • 重定向 URL: {R:1}
      • 重定向类型: 永久移动 (301)
  7. 点击“应用”。

设置目录权限

确保 IIS 的用户(通常是 IIS_IUSRSNETWORK SERVICE)对你的网站文件夹有读取和执行权限。

  1. 右键点击你的网站文件夹,选择 “属性”
  2. 切换到 “安全” 选项卡。
  3. 点击 “编辑...”“添加...”
  4. 输入 IIS_IUSRS,点击“检查名称”,确定”。
  5. IIS_IUSRS 用户赋予 “读取和执行”“列出文件夹内容”“读取” 权限。
  6. 点击“确定”。

常见问题与排错

问题 1: HTTP 错误 500.19 - 内部服务器错误

  • 现象: 访问网站时提示此错误,并指出 web.config 文件有配置问题。
  • 原因: 通常是 web.config 文件中的 <system.webServer> 节点下的配置有误,或者 IIS 没有安装对应的模块。
  • 解决方法:
    1. 检查 web.config 语法是否正确。
    2. 确保你在安装 IIS 时勾选了 ASP.NET 角色。
    3. 对于 .NET Core / .NET 5+,确保安装了 .NET Hosting Bundle

问题 2: HTTP 错误 403.14 - Forbidden

  • 现象: 访问网站时提示“您无权查看此目录或页面”。
  • 原因:
    1. 默认文档未配置: IIS 不知道该显示哪个文件。
    2. 目录权限问题: IIS 用户无法读取网站文件夹。
    3. 应用程序池身份验证问题
  • 解决方法:
    1. 检查 “默认文档” 是否已正确添加并排序。
    2. 检查网站文件夹的 安全权限,确保 IIS_IUSRS 有读取权限。
    3. 尝试在应用程序池的“高级设置”中,将 “标识”ApplicationPoolIdentity 更改为 LocalSystem(仅用于测试,不推荐生产环境使用),看问题是否解决。

问题 3: 502.5 - Process Failure

  • 现象: 此错误专门发生在 .NET Core / .NET 5+ 应用上。
  • 原因: Kestrel 服务器进程启动失败。
  • 解决方法:
    1. 检查日志: 这是最好的排错方法,日志通常位于 C:\inetpub\logs\LogFiles\W3SVC1\ 目录下,查看最新的日志文件,找到具体的错误信息。
    2. 缺少依赖项: 确保服务器上安装了与你的应用程序相同的 .NET SDK 或 Runtime。
    3. 端口冲突: 检查 web.config 中 Kestrel 使用的端口是否被其他程序占用。
    4. 权限问题: 确保应用程序池用户有权限访问你的网站文件夹和 .NET 运行时。

问题 4: 无法访问,显示“服务不可用”

  • 原因: 应用程序池没有启动。
  • 解决方法: 在 IIS 管理器中,点击“应用程序池”,找到你的网站对应的应用程序池,确保其状态为 “启动”,如果已停止,右键点击并选择“启动”。

配置 IIS 运行 .NET 网站主要分为以下几步:

  1. 安装: 安装 IIS 和必要的组件(ASP.NET, URL Rewrite 等)。
  2. 部署: 将网站文件放到 inetpub\wwwroot 下。
  3. 创建: 在 IIS 中创建网站,指定物理路径和绑定信息。
  4. 配置: 设置应用程序池的 .NET 版本(.NET Framework 选 CLR 版本,.NET Core/5+ 选“无托管代码”)。
  5. 安全: 设置正确的目录权限和默认文档。
  6. 排错: 学会查看 IIS 日志和事件查看器,是解决问题的关键。

遵循以上步骤,你应该能够成功配置并运行你的 .NET 网站,如果在某个环节遇到问题,请仔细检查对应的排错部分。