SEO 百科

IIS

本页目录

IIS

IIS 是微软提供的一款网络服务器软件,随 Windows Server 一起分发,全称 Internet Information Services,文档里也把它叫 W3SVC[1]。它只能跑在 Windows 上,接收 HTTP 请求的是一个内核模式驱动,名叫 HTTP.sys[1]。第三方统计给出的数字是 3.0% 的网站使用 IIS[11],比例不高,但需要 .NET 或 ASP.NET 的站点大多绕不开它。站长要认识它,因为它与 Apache、Nginx 在配置写法与路径规则上差别最大,迁移时最容易踩坑。

组件与请求处理

IIS 从 7.0 版本起换了一套请求处理架构,包含协议监听器、WWW 服务和 Windows 进程激活服务(WAS)[1]。官方说明,IIS 与 ASP.NET 的请求管道已经合在一起[1],这也是 .NET 站点优先选它的原因。

监听 HTTP 请求的是 HTTP.sys,它是 Windows 网络子系统的一部分,以内核模式设备驱动的方式实现[1]。它带来两个直接好处:内核模式缓存让命中缓存的请求不必切换到用户模式,内核模式请求排队则把请求直接交给对应的工作进程,切换开销随之减少[1]。

IIS 是模块化的,功能按模块拆开,装哪些由站长决定。官方说明,去掉用不到的模块能缩小攻击面与内存占用[1]。

与抓取和收录相关的配置

抓取是收录的第一步,百度把收录概括为“从互联网抓取网页、建立索引数据库、将索引库中数据展现给用户”[8]。

伪静态要装 URL Rewrite 模块,官方描述它能按规则把请求网址映射成更容易记住、也更容易被搜索引擎找到的形式,还能做重定向或返回自定义状态码[3]。这个模块不随 IIS 一起安装,要单独下载[3]。规则写在站点目录的 web.config 里。

压缩由两个模块负责:静态压缩模块对静态内容做预压缩,动态压缩模块对响应做 gzip 压缩[1]。只开其中一个,另一类响应就不会被压缩。Google 抓取工具支持 gzip、deflate 与 Brotli 三种编码[6],文本类响应值得把压缩打开。

缓存有几个模块分工。文件缓存模块缓存文件与文件句柄,HTTP 缓存模块在 HTTP.sys 里做内核模式与用户模式缓存[1]。

协议方面,HTTP/2 从 IIS 10.0 开始支持,并且只在 TLS,也就是 HTTPS 上支持[2]。IIS 8.5 及更早的版本不支持 HTTP/2[2]。官方强调这一层对应用是透明的,代码基本不用改[2]。

<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="Article" stopProcessing="true">
          <match url="^article/([0-9]+)\.html$" />
          <action type="Rewrite" url="article.php?id={R:1}" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

响应时间才是抓取的直接变量。Google 说明,抓取容量上限随站点响应状况升降,响应快时上限升高,变慢或出现服务器错误时上限下降[7]。百度说明,Baiduspider 会根据服务器压力自动调整抓取频次[10]。

路径与大小写上的差异

Windows 文件系统默认不区分大小写,Linux 文件系统区分[5]。微软自己的文档提醒,写程序时不要把大小写敏感当成前提,OSCAR、Oscar 和 oscar 要当成同一个名字[4]。

项目 Windows(IIS) Linux(Nginx、Apache)
文件名大小写 不区分 区分
同一目录只差大小写 只存得下一个 可以并存
链接里大小写写错 照样命中 返回 404

后果要到迁移时才显现。站点从 Linux 搬到 IIS,页面里大小写写错的链接本来会 404,搬过去之后反而能打开;反过来从 IIS 搬到 Linux,同一批链接会集体失效。Google 说明,404 状态代码会明确告知它不要再抓取这个网址[7],这些失效地址就成了抓取里白花的部分。

Windows 也支持给单个目录打开大小写敏感标记,这项能力从 Windows 10 的 17107 版本开始提供,默认并不开启[5]。开了以后,原来依赖大小写不敏感才跑得通的程序反而会读不到文件[5]。

选购与托管环境的取舍

IIS 随 Windows Server 一起提供,不用单独安装一套服务器软件。挑主机的范围比 Linux 窄,提供 Windows 主机的厂商更少,价格通常也高一些。

选它的理由通常是技术栈,而不是性能。站点如果需要跑 ASP.NET,或者依赖 .NET 生态,用 IIS 改动最小,因为请求管道是打通的[1]。纯 PHP 或纯静态站点,用 Nginx 或 Apache 的余地更大。

版本要选对。HTTP/2 从 IIS 10.0 开始支持,系统版本也要 Windows Server 2016 以上[2]。

常见误用

一种误用是把 Apache 的 .htaccess 上传到站点目录,指望规则生效。IIS 不读这个文件,URL Rewrite 模块提供的是转换界面,能把 mod_rewrite 规则导入,改写进 web.config 文件[3]。

另一种误用是只开静态压缩或只开动态压缩,另一类响应照旧按原始体积传输[1]。

还有一种误用是站点没有配 HTTPS,就以为 HTTP/2 没生效是配置问题。IIS 只在 TLS 上提供 HTTP/2,纯 HTTP 站点开不了[2]。

最后一种是迁移时忽略大小写差异。从 Linux 迁到 IIS,页面看起来正常,反过来迁过去,会产生一批 404,白白消耗抓取额度[7]。

抓取失败时,先分清是哪一类错误。百度把服务器连接错误的原因写成服务器响应过慢或站点屏蔽了百度spider[9],这一类要回到服务器与防护设置上查。

附录

参见

参考资料

官方(境外)

  1. 《Introduction to IIS Architectures》,Microsoft Learn。
  2. 《HTTP/2 on IIS》,Microsoft Learn。
  3. 《Using the URL Rewrite Module》,Microsoft Learn,2020-12-03。
  4. 《Naming Files, Paths, and Namespaces》,Microsoft Learn。
  5. 《Adjust case sensitivity》,Microsoft Learn。
  6. 《Google 抓取工具和抓取器(用户代理)概览》,Google 搜索中心,2025-09-11 更新。
  7. 《面向大型网站所有者的抓取预算管理指南》,Google 搜索中心。

官方(国内)

  1. 《百度搜索的工作原理》,百度搜索资源平台,2023-12-21 更新。
  2. 《平台工具使用手册(抓取诊断)》,百度搜索资源平台,2020-08-14 更新。
  3. 《平台工具使用手册(抓取频次)》,百度搜索资源平台,2020-08-14 更新。

第三方

  1. 《Usage statistics of web servers》,W3Techs,2026-10-07。

外部链接

无。