代码之家  ›  专栏  ›  技术社区  ›  Hyddan

IIS ARR(边缘)缓存(反向代理)-上游连接超时问题

  •  3
  • Hyddan  · 技术社区  · 14 年前

    我希望使用IIS应用程序请求路由作为反向代理缓存。我看了几个不同的选择,得出的结论是它最适合我的需求。 然而,我遇到了一个死胡同,我真的可以从对ARR模块有更多经验的人那里得到一些输入。

    我有以下设置:

    • IIS ARR缓存对内部服务器场的代理请求(加权 使用最近的源服务器的循环负载平衡)。
    • 在IIS代理中禁用了保持活动。
    • 服务器场由nginx Web服务器组成。
    • IIS服务器具有RAM磁盘缓存。

    用例是这样的,边缘服务器将接收字节范围请求,当它将内容提供给最终用户时,它将对其进行缓存(首先在内存缓存中缓存60秒,然后将其写入RAM磁盘)。到目前为止,一切都正常工作,但当下一个最终用户开始请求相同的字节范围(现在在缓存中)时,我开始了,所以看到IIS边缘和nginx起源之间的一些奇怪行为: 根据第一个字节范围请求(由第二个最终用户),IIS服务器打开一个到nginx源的连接,但它不使用该连接,因为它在缓存中已经有了请求的段。由于连接没有被使用,它最终被nginx关闭,原因是超时(60秒)。与此同时,第二最终用户仍在请求高速缓存中的文件段。然后,这就是问题发生的地方,第二个最终用户到达文件中不在缓存中的一个点。我期望IIS在这里的行为(即禁用保持活动)是,它将打开与源的新连接,并开始获取文件中不在缓存中的部分。然而,我看到的行为是,IIS试图重用它在请求开始时打开的同一连接(而没有意识到它已经被源删除)。我也使用了“失败的请求跟踪”来验证这一点,结果是IIS没有从源获得预期的回复(因为连接不再存在),然后又向最终用户返回502.3。

    我已经验证了增加源端的连接超时将“解决”问题,但这并不是一个真正可行的解决方案,因为我基本上必须设置无限超时,这可能会在源端引发一系列新的问题。是否有任何方法可以控制IIS如何处理此上游连接(即,当它实际需要来自源的数据时,强制它打开一个新连接,或者让它意识到源关闭了连接)?

    1 回复  |  直到 14 年前
        1
  •  1
  •   Hyddan    13 年前

    对于任何可能遇到相同问题的人;经过与微软的反复讨论,这实际上是ARR模块中的一个错误,将在即将发布的版本中解决。