在 CDN 中部署应用程序请求路由

作者:Won Yoo

此文档部分适用于用于 IIS 7 及更高版本的 Microsoft 应用程序请求路由版本 2

目标

在内容分发网络/边缘缓存网络 (CDN/ECN) 环境中的 2 层缓存层次结构部署中成功配置子/边缘缓存节点和父缓存节点。 本演练重点介绍子/边缘缓存节点和父缓存节点上的 URL 重写规则。 最终,本演练将通过分步说明来设置以下配置:

Diagram showing an overview of the connection between the origin server, parent nodes, child nodes, and S A N.

此配置的一些亮点包括:

  • 源查找由子/边缘缓存节点完成。

    • 使用 URL 重写中的重写映射显式管理客户列表(即可接受的源服务器列表)。
    • 重写映射中找不到的主机名将被阻止。
  • 父缓存节点在大多数情况下被配置为正向代理。

  • SAN 配置为由子/边缘缓存节点共享。

    • 实际上,缓存分为 3 层:

      1. 子/边缘缓存节点。
      2. SAN。
      3. 父缓存节点。

先决条件

本演练假定你已熟悉 ARR 版本 2 中的磁盘缓存和缓存层次结构管理配置。 如果尚未这样做,强烈建议在继续操作之前查看以下演练:

如果尚未安装应用程序请求路由版本 2,可在以下位置下载:

  • 适用于 IIS 7 (x86) 的 Microsoft 应用程序请求路由版本 2 (https://download.microsoft.com/download/4/D/F/4DFDA851-515F-474E-BA7A-5802B3C95101/ARRv2_setup_x86.EXE)。
  • 适用于 IIS 7 (x64) 的 Microsoft 应用程序请求路由版本 2 (https://download.microsoft.com/download/3/4/1/3415F3F9-5698-44FE-A072-D4AF09728390/ARRv2_setup_x64.EXE)。

请按照安装应用程序请求路由版本 2 一文中所述的步骤安装 ARR 版本 2。

配置子/边缘缓存节点

步骤 1 - 配置磁盘缓存

按照安装应用程序请求路由版本 2 一文配置和启用磁盘缓存。 本文还讨论了如何配置 SAN 以用作辅助缓存驱动器位置。

步骤 2 - 为父缓存节点定义服务器场

按照使用应用程序请求路由管理缓存层次结构一文定义服务器场并添加父缓存节点。

步骤 3 - 为子/边缘缓存节点创建其他 URL 重写规则

此时,使用 myParentCacheNodes 作为服务器场的名称,以下 URL 重写规则已写入位于 %windir%\system32\inetsrv\config\ 的 applicationHost.config 文件中

<rewrite>
   <globalRules>
      <rule name="ARR_myParentCacheNodes_loadbalance" patternSyntax="Wildcard" stopProcessing="true">
         <match url="*" />
         <action type="Rewrite" url="http://myParentCacheNodes/{R:0}" />
      </rule>
   </globalRules>
</rewrite>

上述规则对于 CDN/ECN 部署来说是不够的,因为缓存节点是分层的,当父缓存层出现缓存失误时,下一层缓存节点(即父缓存节点)将不知道如何找到源服务器。

本演练通过在将请求路由到父缓存节点之前让子缓存节点映射源服务器来解决该问题。 根据子缓存节点接收的 URL 映射源服务器有两种最常见的方法:

  1. 将 CDN/ECN 的客户指定为子域。 在这种情况下,可以有多个主机名绑定到子缓存节点的同一 IP 地址。
    例如 http://customer1.mycnd.net/http://customer2.mycdn.net/ 等。
  2. 将 CDN/ECN 客户指定为 URL 中的第一个路径。
    例如 http://static.mycdn.net/customer1/http://static.mycdn.net/customer2/ 等。

在本演练中,使用第一个示例进行演示。 也可编写类似的规则来启用第二种方案。

  1. 定义可用于查找源服务器主机名的 URL 重写映射。 启动 IIS 管理器。

  2. 选择并展开服务器的根目录。 这是你的子(边缘)缓存节点。

    Screenshot showing the child cache node expanded.

  3. 双击“URL 重写”

  4. 在“操作”窗格中,单击“查看重写映射”

    Screenshot of the Actions pane showing the View Rewrite Maps option.

  5. 在“操作”窗格中,单击“添加重写映射”

    Screenshot of the Actions pane showing the Add Rewrite Map option.

  6. 在“添加重写映射”对话框中,将重写映射命名为“OriginServers”

    Screenshot of the Add rewrite map dialog showing OriginServers in the input box.

  7. 在重写映射中,你将显式标识子缓存节点接收的主机名与相应的源主机名之间的映射。 在“操作”窗格中,单击“添加映射条目…”

    Screenshot of the Actions menu showing the Add Mapping Entry option.

  8. 在“添加映射条目”对话框中,添加子缓存节点接收的主机名和源主机名。 在下面的示例中,ARR 子缓存节点接收 customer1.mycdn.net 作为主机名标头。 相应的源服务器是 images.customer1.com

    Screenshot of the Add Mapping Entry dialog with the example information entered.

  9. 根据需要多次重复步骤 8,以包含 CDN/ECN 为其提供服务的所有客户。 你可以通过此方式管理明确的客户列表,以确保仅向客户提供服务。

  10. 若要阻止不在重写映射列表中的客户,请将此重写映射的默认值设置为 #,根据 RFC,这是一个非法字符,不能在主机名标头中使用。 在“操作”窗格中,单击“编辑映射设置…”

    Screenshot of the Actions menu.

  11. 在“编辑重写映射”对话框中,输入 # 作为此重写映射的默认值

    Screenshot of the Edit Rewrite Map dialog. The character # is in the Default value to use when key is not found in the map input box. OK is selected.

  12. 使用 OriginServers 重写映射中配置的规则重写主机名标头。 如果出现缓存失误,并且请求路由到父缓存节点,则该请求将具有与源服务器匹配的主机名。 正因如此,在大多数情况下,父缓存节点被配置为正向代理。 当父缓存节点出现缓存失误时,请求将仅根据父缓存节点接收的主机名标头路由到源服务器。

  13. 在 URL 重写 UI 中,找到规则。 在本演练中,规则名称应为 ARR_myParentCacheNodes_loadbalance

    Screenshot showing the example rule settings.

  14. 选择该规则,然后在“操作”窗格中,单击“编辑”

  15. 单击“添加条件”以添加两个规则

  16. 第一个规则将使用在步骤 6 中创建的 OriginServers 重写映射。 以下规则将以主机头作为关键字,匹配 OriginServers 中的条目

    Screenshot of the Add Condition dialog showing origin server data with Pattern is set to *.

  17. 当主机头与 OriginServers 中的条目不匹配时,第二个规则会将默认值设置为 #。 如上所述,# 不是有效字符,不能用作主机名。 之后,将使用以下规则来确保 ARR 仅为 OriginServers 中的客户(由主机名表示)提供服务

    Screenshot of the Add Condition dialog with Pattern set to the default.

  18. 选择“跨条件跟踪捕获组”

  19. 若要设置 HTTP_HOST 值以匹配上述条件,请单击“服务器变量”

  20. 输入以下值以重置 HTTP_HOST:

    Screenshot of the Server Variables dialog.

  21. 单击“确定”以保存更改 。

  22. 在“操作”窗格中,单击“应用”以保存更改

  23. 若要验证是否编写了正确的规则,请使用记事本打开 applicationHost.config 文件。 配置文件位于 %windir%\system32\inetsrv\config\

  24. 找到服务器场的 URL 重写规则 myParentCacheNodes。 该消息应类似于:

    <rewrite>
       <globalRules>
          <rule name="ARR_myParentCacheNodes_loadbalance" patternSyntax="Wildcard" stopProcessing="true">
             <match url="*" />
             <conditions trackAllCaptures="true">
                <add input="{OrigServers:{HTTP_HOST}}" pattern="*" />
                <add input="{C:1}" negate="true"  pattern="#" />
             </conditions>
             <serverVariables>
                <set name="HTTP_HOST" value="{C:1}" replace="true" />
             </serverVariables>
             <action type="Rewrite" url="http://myParentCacheNodes/{R:0}" />
          </rule>
       </globalRules>
    </rewrite>
    
  25. 强烈建议。 如要阻止与上述重写映射中定义的主机名不匹配的请求,请创建一个默认 URL 重写规则,用于向此类请求发送 400 响应。

    启动 IIS 管理器。

  26. 选择并展开服务器的根目录。 这是你的子(边缘)缓存节点。

    Screenshot showing a server expanded.

  27. 双击“URL 重写”

  28. 在“操作”窗格中,单击“添加规则”

    Screenshot of the Actions menu showing the Add Rules option.

  29. 在“添加规则”对话框中,选择“空白规则”

    Screenshot of the Add rules dialog with Blank rule selected.

  30. 输入以下值,然后保存规则:
    名称:不是我的客户
    使用:通配符
    模式 *:
    操作类型:自定义响应
    状态代码:400
    子状态代码:0

    Screenshot showing the rules variable dialog.

  31. 规则的顺序非常重要。 URL 重写规则从上到下进行处理。 在此示例中,如果传入主机名与上述重写映射中指定的任一主机名匹配,则执行第一个规则:ARR_myParentCacheNodes_Loadbalance。 如果传入主机名与上述重写映射中定义的任何主机名都不匹配,则执行第二个规则:不是我的客户

    Screenshot showing 2 rules.

  32. 子/边缘缓存节点配置已完成。

为了简化其他子缓存节点的配置,可以使用共享配置,以便只通过一个位置管理子缓存节点的配置。 否则,必须在 CDN/ECN 环境中的所有子缓存节点上分别进行上述配置更改。 若要了解有关共享配置的详细信息,请参阅共享配置一文。

配置父缓存节点

可通过两种方法将 ARR 配置为父缓存节点:

  1. 将 ARR 设置为正向代理。
  2. 使用重写映射将 ARR 设置为“反向”代理。

即使使用上面的第二个选项,重写映射也只是使用相同的值重写传入的主机名,从而有效地使其成为正向代理。 重写映射用于显式配置父缓存将接受的主机名列表,类似于上述配置子缓存节点的方式。 在本演练的第二部分中,将使用第一个选项将父缓存节点配置为简单的正向代理。

步骤 1 - 配置磁盘缓存

按照在应用程序请求路由中配置和启用磁盘缓存一文配置和启用磁盘缓存。

步骤 2 - 将 ARR 配置为正向代理

  1. 启用 ARR 作为代理。 启动 IIS 管理器。

  2. 此配置不涉及任何服务器场。 所有设置均在服务器级别完成。

    Screenshot showing the server with expanded selections. The server name is highlighted.

  3. 双击“应用程序请求路由缓存”

    Screenshot showing the connections and main panes. The main pane shows the server function icons.

  4. 在“操作”窗格中,单击“服务器代理设置”

    Screenshot of the Actions pane showing the Server Proxy Settings option.

  5. 选中“启用代理”复选框,然后单击“应用”。 你在服务器级别启用了 ARR 作为代理。

  6. 若要将 ARR 转换为正向代理,请单击导航窗格中的服务器节点。

    Screenshot showing navigation options.

  7. 双击“URL 重写”

  8. 在“操作”窗格中,单击“添加规则…”

    Screenshot of the Actions pane showing the Add Rules option.

  9. 在“添加规则”对话框中,选择“空白规则”

    Screenshot showing the Add rules dialog. The Blank rule icon is highlighted.

  10. 输入以下值,然后保存规则:
    名称:正向代理
    使用:通配符
    模式 *:
    条件:
    输入:{HTTP_HOST}
    类型:匹配模式
    模式 *:
    操作类型:重写
    重写 URL:http://{C:1}/{R:0}

    Screenshot showing the dialog with the example values.

  11. 父缓存节点配置已完成。

    为了简化其他父缓存节点的配置,可以使用共享配置,以便只通过一个位置管理父缓存节点的配置。 否则,必须在 CDN/ECN 环境中的所有父缓存节点上分别进行上述配置更改。 若要了解有关共享配置的详细信息,请参阅以下文章

总结

现在,你已使用高级 URL 重写规则在 2 层缓存层次结构 CDN/ECN 环境中成功配置了子缓存节点和父缓存节点。 若要验证功能,可以按照在应用程序请求路由中配置和启用磁盘缓存一文中的步骤 4 和步骤 5 进行操作。 如果出现错误,请按照使用失败请求跟踪规则排查应用程序请求路由问题一文中的步骤启用失败请求跟踪规则。

有关 ARR 版本 2 的其他演练,请参阅应用程序请求路由版本 2 概述一文中的文档。