使用应用程序请求路由配置 3 层部署体系结构

作者:IIS 团队

概述

本主题引导你完成使用应用程序请求路由配置 3 层部署体系结构的步骤。 3 层部署体系结构由 Web 层、应用程序服务器层和数据层组成,如下所示:

三层体系结构部署及其彼此连接的关系图。

通常在此部署方案中,静态内容由第 1 层服务器提供,而动态内容由第 2 层服务器中的业务逻辑提供。

目标

使用应用程序请求路由配置 3 层部署体系结构。 本演练重点介绍如何将 ARR 服务器配置为直接从 ARR 服务器提供静态内容,同时将动态内容请求转发到应用程序服务器。

先决条件

本演练要求满足以下先决条件:

  • Windows 2008(任何 SKU)或更新系统上的 IIS 7.0 或更高版本
  • Microsoft 应用程序请求路由版本 1 和依赖模块
  • 至少有两个包含工作站点和应用程序的内容服务器
  • 应用程序请求路由服务器上可用的静态内容

按照文档中概述的步骤安装应用程序请求路由。

另一个先决条件是,你已使用定义和配置应用程序请求路由 (ARR) 服务器组中所述的步骤定义和配置了服务器场

步骤 1 - 更改 URL 重写规则以筛选静态请求。

在此步骤中,将更改 URL 重写规则,以便直接从应用程序请求路由服务器提供对某些扩展名或路径的请求。 可以通过查看文件扩展名(如 .jpg 或 .gif)来标识静态请求。 如果静态资源包含在某些文件夹中(如 /images/),则 URL 重写规则可以在 URL 中查找路径。

在本演练中,你将更改 URL 重写规则以查找 .jpg 和 .css 扩展以及 /images/ 文件夹。 如果请求的资源具有 .jpg 或 .css 扩展,则将直接从 ARR 服务器提供此请求。 同样,如果请求的 URL 包含 /images/,则会从 ARR 服务器提供此请求。 所有其他请求都将转发到 ARR 服务器后面的应用程序服务器。

在继续操作之前,请确保 ARR 服务器上可以提供静态内容。 可以在 ARR 服务器上本地提供内容,也可以使用共享内容。

若要使用 UI 更改 URL 重写规则,请执行以下操作:

  1. 启动 IIS Manager。
  2. 选择在定义和配置应用程序请求路由 (ARR) 服务器组中创建的服务器场 myServerFarm
  3. 将显示以下图标:
    “服务器场”对话框的屏幕截图。
  4. 双击“路由规则”。 在“不转发具有以下扩展名的请求”文本框中键入“*.jpg”和“*.css”。 多个扩展名以逗号 (,) 分隔。 若要匹配 URL 中的路径,请在“不转发具有以下模式的请求”文本框中键入“*/image/*”。 通配符 (*) 用于匹配路径 /image/ 之前和之后的任何字符。
    “路由规则”屏幕的“路由”部分的屏幕截图。
  5. 若要验证是否正在从 ARR 服务器提供静态映像,请检查日志。 默认情况下,日志位于 c:\inetpub\logs\LogFiles\。 在 ARR 服务器后面的应用程序服务器上,日志文件中不应有任何引用 *.jpg、*.css 或 */images/* 的请求。

若要使用命令行更改 URL 重写规则,请执行以下操作:

  1. 使用管理员特权打开命令提示符。

  2. 导航到 %windir%\system32\inetsrv

  3. 输入以下内容清除所有 URL 重写规则:

    appcmd.exe clear config -section:system.webServer/rewrite/globalRules
    

若要更改路由规则,以便对扩展名为 *.jpg 和 *.css 的资源以及与 */images/* 匹配的路径的请求不会转发到应用程序服务器,请输入:

  • appcmd.exe set config  -section:system.webServer/rewrite/globalRules 
    /+"[name='ARR_myServerFarm_loadbalance',patternSyntax='Wildcard',stopProcessing='True']"
     /commit:apphost
    
  • appcmd.exe set config  -section:system.webServer/rewrite/globalRules 
    /[name='ARR_myServerFarm_loadbalance',patternSyntax='Wildcard',stopProcessing='True'].match.url:"*"  
    /commit:apphost
    
  • appcmd.exe set config  -section:system.webServer/rewrite/globalRules 
    /+"[name='ARR_myServerFarm_loadbalance',patternSyntax='Wildcard',stopProcessing='True'].conditions.
    [input='EXT_{URL}',negate='True',pattern='*.jpg']" 
    /commit:apphost
    
  • appcmd.exe set config  -section:system.webServer/rewrite/globalRules 
    /+"[name='ARR_myServerFarm_loadbalance',patternSyntax='Wildcard',stopProcessing='True'].conditions.
    [input='EXT_{URL}',negate='True',pattern='*.css']" 
    /commit:apphost
    
  • appcmd.exe set config  -section:system.webServer/rewrite/globalRules 
    /+"[name='ARR_myServerFarm_loadbalance',patternSyntax='Wildcard',stopProcessing='True'].conditions.
    [input='{URL}',negate='True',pattern='*/images/*']" 
    /commit:apphost
    
  • appcmd.exe set config  -section:system.webServer/rewrite/globalRules 
    /[name='ARR_myServerFarm_loadbalance',patternSyntax='Wildcard',stopProcessing='True'].action.type:"Rewrite" 
    /[name='ARR_myServerFarm_loadbalance',patternSyntax='Wildcard',stopProcessing='True'].action.url:"http://myServerFarm1/{R:0}"  
    /commit:apphost
    

总结

现已使用应用程序请求路由 UI 成功更改 URL 重写规则,以启用 3 层部署体系结构方案。 有关其他应用程序请求路由属性和功能,请参阅使用应用程序请求路由 (ARR) 实现 HTTP 负载均衡演练。

当 ARR 用作反向代理时,如果与 URL 重写版本 2 一起使用,则可以进一步增强该方案,该版本具有重写响应标头和实体正文的功能。