IIS 重写导致 60 秒响应延迟
IIS rewrites cause 60 seconds response delay
我们有大约 50 个网站共享相同的代码(通过符号链接)。请求由 IIS 7.5 -> Tomcat 7 -> ColdFusion 10 处理。我们使用 IIS 重写模块 (web.config)。 OS 是 Windows 服务器 2008 R2。
当请求 /stylesheets/merge.css
、/scripts/merge.js
或 /api/service.json
之类的 URL 被重写为 .cfm
文件 (ColdFusion) 时,returns 相应 MIME 类型中的动态内容,请求需要 exactly 60 秒才能收到响应。当重写指向由 IIS 处理的静态文件时,不会发生此延迟。非重写也不会发生这种情况。
现在奇怪的部分来了:这个问题只发生在 Internet Explorer 和 Microsoft Edge 上,而且只发生在 50 个网站中的 1 个。
- TTFB 在预期范围内(低于 100 毫秒),内容下载 (10-100 KB) 延迟 正好 60 秒。
- 我们在 3 个不同的 machines/networks 上使用 IE 11 和 Edge 进行了测试。所有这些结果都相同。
- 我在 IIS 中重新创建了受影响的站点,没有任何变化。
重写规则示例:
<rule name="stylesheet" stopProcessing="true">
<match url="^stylesheets/merged/([^/]+)\.css$" ignoreCase="true" />
<action type="Rewrite" url="/symlink/design/stylesheets/merge.cfm?mode={R:1}" appendQueryString="true" />
</rule>
这可能是什么原因?我该如何进一步调查?
我们想通了。这是我们主机方面的错误配置。使用的负载平衡器 (HAProxy) 关闭了所有不允许分块传输编码的 HTTP 连接。 IE/Edge 是唯一明显不回退的浏览器。
我们有大约 50 个网站共享相同的代码(通过符号链接)。请求由 IIS 7.5 -> Tomcat 7 -> ColdFusion 10 处理。我们使用 IIS 重写模块 (web.config)。 OS 是 Windows 服务器 2008 R2。
当请求 /stylesheets/merge.css
、/scripts/merge.js
或 /api/service.json
之类的 URL 被重写为 .cfm
文件 (ColdFusion) 时,returns 相应 MIME 类型中的动态内容,请求需要 exactly 60 秒才能收到响应。当重写指向由 IIS 处理的静态文件时,不会发生此延迟。非重写也不会发生这种情况。
现在奇怪的部分来了:这个问题只发生在 Internet Explorer 和 Microsoft Edge 上,而且只发生在 50 个网站中的 1 个。
- TTFB 在预期范围内(低于 100 毫秒),内容下载 (10-100 KB) 延迟 正好 60 秒。
- 我们在 3 个不同的 machines/networks 上使用 IE 11 和 Edge 进行了测试。所有这些结果都相同。
- 我在 IIS 中重新创建了受影响的站点,没有任何变化。
重写规则示例:
<rule name="stylesheet" stopProcessing="true">
<match url="^stylesheets/merged/([^/]+)\.css$" ignoreCase="true" />
<action type="Rewrite" url="/symlink/design/stylesheets/merge.cfm?mode={R:1}" appendQueryString="true" />
</rule>
这可能是什么原因?我该如何进一步调查?
我们想通了。这是我们主机方面的错误配置。使用的负载平衡器 (HAProxy) 关闭了所有不允许分块传输编码的 HTTP 连接。 IE/Edge 是唯一明显不回退的浏览器。