排查思路总览

请按照以下步骤逐一检查,这能帮你解决 90% 以上的此类问题。

iis 网站无法显示该页面
(图片来源网络,侵删)
  1. 第一步:确认问题范围(“是所有网站都错,还是只有一个?”)
  2. 第二步:检查客户端和基础网络(“是不是我的网络或浏览器问题?”)
  3. 第三步:检查 IIS 核心配置(“网站本身是否正确配置?”)
  4. 第四步:检查应用程序和代码(“网站程序本身是否有问题?”)
  5. 第五步:检查高级功能和权限(“是否是权限或模块冲突?”)
  6. 第六步:查看错误详情(“如何找到真正的错误原因?”)

第一步:确认问题范围

这是最重要的一步,它决定了你的排查方向。

  • A. 只有这一个网站报错?
    • 如果其他网站都正常访问,那么问题很可能出在这个特定网站的配置上。
  • B. 所有网站都报错,甚至 IIS 主页也无法访问?
    • 这说明问题出在 IIS 的全局配置服务状态系统层面

第二步:检查客户端和基础网络

在动服务器之前,先排除客户端问题。

  1. 刷新浏览器和清空缓存:按 Ctrl + F5 强制刷新,清除浏览器缓存。
  2. 尝试不同浏览器:用 Chrome, Edge, Firefox 等不同浏览器访问,排除浏览器插件或兼容性问题。
  3. 检查 DNS:在服务器命令提示符(CMD)中运行 nslookup 你的域名,看是否能正确解析到服务器的 IP 地址。
  4. 检查网络连通性
    • 在客户端电脑上 ping 服务器 IP,看是否能通。
    • 在客户端电脑上 telnet 服务器的 80 端口(HTTP)或 443 端口(HTTPS)。
      • Windows:打开 CMD,输入 telnet 服务器IP 80,如果窗口黑一下然后关闭,说明端口是通的,如果提示“无法打开到主机的连接”,说明网络不通或防火墙拦截了。
    • 注意:Windows 默认没有安装 Telnet 客户端,需要通过“启用或关闭 Windows 功能”来安装。

第三步:检查 IIS 核心配置

这是最常见的问题区域,请仔细检查。

情况 A:只有这个网站报错

  1. 检查网站状态

    iis 网站无法显示该页面
    (图片来源网络,侵删)
    • 打开 IIS 管理器
    • 在左侧“连接”面板中,找到你的网站。
    • 在中间的“操作”面板中,确保网站状态是 “已启动”,如果不是,右键点击网站 -> “管理网站” -> “启动”。
  2. 检查绑定

    • 右键点击你的网站 -> “管理网站” -> “绑定...”。
    • 检查 类型(HTTP/HTTPS)、IP 地址(通常是 "All Unassigned")、端口(HTTP 默认 80,HTTPS 默认 443)和 主机名(你的域名,留空则表示通过 IP 访问)是否正确。
    • 常见问题
      • 端口被其他程序占用。
      • 域名输入错误。
      • IP 地址绑定错误(如果服务器有多个网卡)。
  3. 检查物理路径

    • 右键点击你的网站 -> “管理网站” -> “高级设置...”。
    • 检查 “物理路径” 是否指向了你网站文件所在的正确文件夹。
    • 检查这个文件夹的权限是否正确(见第五步)。
  4. 检查应用程序池

    • 在 IIS 管理器左侧,点击“应用程序池”。
    • 找到你的网站正在使用的应用程序池(可以在网站“基本设置”里查看)。
    • 确保该应用程序池的状态是 “启动”
    • 双击打开应用程序池的“高级设置”:
      • .NET CLR 版本:确保选择你的项目所需的 .NET 版本(如 无托管代码v4.0 等)。
      • 托管管道模式:对于 ASP.NET 网站,必须是 “集成” 模式,对于旧版 ASP,可能是“经典”模式。

情况 B:所有网站都报错

  1. 检查 IIS 服务状态

    iis 网站无法显示该页面
    (图片来源网络,侵删)
    • Win + R,输入 services.msc 并回车。
    • 找到 World Wide Web Publishing Service (W3SVC) 服务。
    • 确保其状态是 “正在运行”,启动类型”是“自动”,如果不是,右键点击 -> “启动”。
  2. 检查系统防火墙

    • 打开 “Windows Defender 防火墙”。
    • 点击左侧的 “允许应用或功能通过 Windows Defender 防火墙”。
    • 确保列表中 “World Wide Web 服务 (HTTP)” 是勾选状态,并且是“专用”和“公用”网络都允许。
    • 或者,为了快速测试,你可以临时关闭防火墙,看网站是否能访问,如果能,说明就是防火墙规则的问题。
  3. 检查端口占用

    • 在服务器上打开 CMD,运行 netstat -ano | findstr :80
    • 如果看到除了 svchost.exe 之外的其他进程占用了 80 端口,说明有冲突,你需要找到并停止那个进程,或者更改 IIS 的绑定端口。

第四步:检查应用程序和代码

如果网站配置都正确,但依然报错,可能是程序本身的问题。

  1. 检查默认文档

    • 在 IIS 管理器中,双击你的网站。
    • 在中间窗口找到并双击“默认文档”。
    • 确保列表中有你的网站首页文件名,如 index.html, default.aspx, Default.htm 等,并且它没有被禁用。
  2. 检查网站根目录文件

    • 进入你设置的“物理路径”,检查里面是否有网站文件。
    • 网站文件可能被误删或移动。
  3. 检查代码错误

    • 如果这是一个动态网站(如 ASP.NET, PHP, JSP),代码中可能有语法错误或运行时错误。
    • 这时候,查看详细的错误日志(见第六步)是关键。

第五步:检查高级功能和权限

  1. 文件夹权限

    • 右键点击网站的“物理路径”文件夹 -> “属性” -> “安全” 选项卡。
    • 确保以下用户或组至少有 “读取”“列出文件夹内容” 权限:
      • IIS_IUSRS:IIS 服务的默认用户组。
      • SYSTEM:系统账户。
      • 如果你的网站需要写入文件(如上传图片),还需要 “修改” 权限。
    • 特别注意:不要轻易给 Users 组或 Everyone 组过高的权限。
  2. 应用程序池标识

    • 在 IIS 管理器中,双击你的“应用程序池”。
    • 在右侧“操作”面板中,点击“高级设置”。
    • 找到 “进程模型” -> “标识”
    • 默认是 ApplicationPoolIdentity(应用程序池标识),这意味着 IIS 会创建一个名为 IIS AppPool\你的应用程序池名 的虚拟账户,这个账户需要你手动在网站文件夹的“安全”选项卡中添加并授予权限。
    • 为了方便测试,你可以暂时将其更改为 LocalSystem(本地系统账户),它拥有最高权限,如果改后网站能访问,就说明是权限问题,你需要为 ApplicationPoolIdentity 账户正确设置权限。

第六步:查看错误详情(最关键的一步)

当页面只显示“无法显示该页面”时,服务器上其实记录了真正的错误原因,你需要学会如何查看它。

  1. 启用详细错误信息(仅用于排查,生产环境请关闭)

    • 在 IIS 管理器中,双击你的网站。
    • 在中间窗口找到并双击“错误页”。
    • 在右侧“操作”面板中,点击“设置...”。
    • 将“错误页”设置为 “详细错误”,这样,当发生错误时,浏览器可能会显示更详细的错误信息,HTTP 500.19(配置错误)。
  2. 查看 IIS 日志文件

    • IIS 默认会记录所有访问请求的日志。
    • 日志文件位置:C:\inetpub\logs\LogFiles\
    • 进入 W3SVC1(数字可能不同)文件夹,里面是按日期命名的 .log 文件。
    • 用记事本或 Excel 打开最新的日志文件。
    • 关注 sc-status
      • 200:成功。
      • 404:未找到文件(通常是路径或文件名错误)。
      • 403:禁止访问(通常是权限问题)。
      • 500:内部服务器错误(通常是代码或配置错误)。
    • 关注 sc-substatussc-win32-status,它们会提供更具体的错误代码,帮助你精确定位问题。19 错误表示配置文件权限不足。
  3. 查看 Windows 事件查看器

    • Win + R,输入 eventvwr.msc 并回车。
    • 展开 “Windows 日志” -> “应用程序”。
    • 在右侧的“筛选当前日志...”中,可以设置事件来源为 ASP.NETW3SVC
    • 这里会记录很多 IIS 和应用程序级别的详细错误信息,是排查疑难杂症的宝库。

总结与快速自查清单

如果觉得上面太复杂,可以按这个顺序快速过一遍:

  1. IIS 服务是否启动? (services.msc -> W3SVC)
  2. 网站状态是否启动? (IIS 管理器 -> 你的网站)
  3. 网站绑定是否正确? (IP, 端口, 域名)
  4. 物理路径是否存在? (路径是否正确)
  5. 文件夹权限够不够? (IIS_IUSRS, SYSTEM 至少有“读取”)
  6. 应用程序池是否启动?
  7. 系统防火墙是否放行了 80/443 端口?
  8. 浏览器清缓存,换个浏览器试试?
  9. 查看 IIS 日志和事件查看器,找到具体的错误代码!

通过以上步骤,你应该能够找到并解决 "IIS 网站无法显示该页面" 的问题,如果问题依然存在,请提供你排查到哪一步,以及具体的错误代码或日志信息,这样可以获得更精准的帮助。