Citrix ADC

配置选择器和基本内容组

您可以配置选择器并将其应用于内容组。向一个或多个内容组添加选择器时,您可以指定选择器是用于标识缓存请求,还是用于标识要使缓存对象失效(过期)。选择器是可选的。或者,您也可以配置要使用的内容组打击参数和失效参数。但是,Citrix建议您配置选择器。

在配置选择器或决定使用参数之后,就可以设置基本内容组了。创建基本内容组之后,您需要决定如何从缓存中过期对象,并配置缓存过期。您可以进一步修改缓存,如提高缓存性能而且配置cookie、报头和轮询,但您可能首先要配置缓存策略。

请注意

内容组参数和选择器仅在请求时使用,并且通常将它们与使用MAY_CACHE或MAY_NOCACHE操作的策略相关联。

选择器的优点

选择器是在内容组中定位特定对象的筛选器。如果没有配置选择器,Citrix®ADC设备将在内容组中查找精确匹配。这可能导致同一对象的多个副本驻留在内容组中。例如,一个没有选择器的内容组可能需要存储host1.domain.com\mypage.htm、host2.domain.com\mypage.htm和host3.domain.com\mypage.htm的url。相反,选择器可以只匹配URL (mypage.html,使用表达式http.req.url)和域(。com,使用表达式http.req.hostname.domain),允许请求由相同的URL满足。

选择器表达式可以执行简单的参数匹配(例如,查找与一些查询字符串参数及其值匹配的对象)。选择器表达式可以使用布尔逻辑、算术运算和属性组合来标识对象(例如,URL干段、查询字符串、POST请求体中的字符串、HTTP报头中的字符串、cookie)。选择器还可以执行编程功能来分析请求中的信息。例如,选择器可以提取POST正文中的文本,将文本转换为列表,并从列表中提取特定的项。

有关表达式的详细信息以及可以在表达式中指定的内容,请参见策略和表达式

使用参数代替选择器

尽管Citrix建议在内容组中使用选择器,但您也可以进行配置打击参数和失效参数。例如,假设您配置了三个打击bug报告内容组中的参数:BugID、Issuer和Assignee。如果请求包含BugID=456、Issuer=RohitV和Assignee=Robert,则Citrix ADC设备可以提供与这些参数-值对匹配的响应。

内容组中的失效参数使缓存项过期。例如,假设BugID是一个失效参数,用户发出POST请求来更新错误报告。无效策略将请求定向到此内容组,该内容组的无效参数将使所有匹配BugID值的缓存响应过期。(下一次用户对该报告发出GET请求时,缓存策略可以使Citrix ADC设备从源服务器刷新该报告的缓存条目。)

注意,相同的参数可以用作a打击参数或无效参数。

内容组按照以下顺序提取请求参数:

  • URL查询
  • 后的身体
  • 饼干头

在参数第一次出现之后,无论它出现在请求中的哪个位置,它的所有后续出现都将被忽略。例如,如果一个参数同时存在于URL查询和POST正文中,则只考虑URL查询中的参数。

如果决定对内容组使用命中参数和失效参数,请在配置内容组时配置这些参数。

注意:Citrix建议使用选择器而不是参数化的内容组,因为选择器更灵活,可以适应更多类型的数据。

配置选择器

内容组可以使用命中选择器检索缓存命中,也可以使用失效选择器检索过期的缓存对象并从源服务器获取新对象。

选择器包含名称和逻辑表达式,称为先进的表达式

有关高级表达式的详细信息,请参见策略和表达式

要配置选择器,您可以为它分配一个名称并输入一个或多个表达式。作为最佳实践,选择器表达式应该包括URL干和主机,除非有充分的理由省略它们。

使用命令行配置选择器

在命令提示符下,输入:

添加缓存选择器\ (\…)

有关配置表达式的信息,请参见使用命令行接口配置选择器表达式

添加缓存选择器product_selector "http.req.url.query.value(\"ProductId\")"“http.req.url.query.value(\“BatchNum \”)”“http.req.url.query.value(\“depotLocation \”)”>添加缓存选择器batch_selector "http.req.url.query.value(\"ProductId\")"“http.req.url.query.value(\“BatchId \”)”“http.req.url.query.value(\“depotLocation \”)”>添加缓存选择器product_id_selector "http.req.url.query.value(\"ProductId\")"添加缓存选择器batchnum_selector "http.req.url.query.value(\"BatchNum\")"“http.req.url.query.value(\“depotLocation \”)”>添加缓存选择器batchid_selector "http.req.url.query.value(\"depotLocation\")" "http.req.url.query.value(\"BatchId\")" 

使用GUI配置选择器

导航到优化>集成缓存>缓存选择器,并添加缓存选择器。

内容组织

内容组是可以在响应中提供的缓存对象的容器。当您首次启用集成缓存时,可缓存对象存储在名为Default的内容组中。您可以创建具有唯一属性的内容组。例如,您可以为图像数据、错误报告和股票报价定义单独的内容组,并且可以将股票报价内容组配置为比其他组更频繁地刷新。

您可以配置整个内容组的过期时间,也可以配置内容组中选定条目的过期时间。

内容组中的数据可以是静态的,也可以是动态的,具体如下:

  • 静态内容组.在请求的URL干和主机名与响应的URL干和主机名之间找到精确匹配。
  • 动态内容组.查找包含特定参数-值对、任意字符串或字符串模式的对象。动态内容组在缓存频繁更新的数据(例如,错误报告或股票报价)时非常有用。

服务一个来自内容组的请求

  1. 用户输入项目的搜索条件,例如错误报告,然后单击HTML表单中的Find按钮。
  2. 浏览器发出一个或多个HTTP GET请求。这些请求包含参数(例如,bug所有者、bug ID,等等)。
  3. 当Citrix ADC设备接收到请求时,它会搜索匹配策略,如果发现与这些请求匹配的缓存策略,它会将请求定向到内容组。
  4. 内容组根据您在选择器中配置的条件在内容组中查找适当的对象。

例如,内容组可以检索匹配的响应NameField=用户名,BugID=ID

  1. 如果找到匹配的对象,Citrix ADC设备就可以将它们提供给用户的浏览器,并将它们组装成一个完整的响应(例如,一个错误报告)。

使内容组中的对象无效

  1. 用户修改数据(例如,用户修改bug报告并单击Submit按钮)。
  2. 浏览器以一个或多个HTTP请求的形式发送此数据。例如,它可以以多个HTTP POST请求的形式发送错误报告,其中包含关于错误所有者和错误ID的信息。
  3. Citrix ADC设备根据失效策略匹配请求。通常,这些策略被配置为检测HTTP POST方法。
  4. 如果请求与无效策略匹配,Citrix ADC设备将搜索与此策略关联的内容组,并使与配置的无效条件匹配的响应过期。

例如,无效选择器可以找到匹配的响应NameField=用户名,BugID=ID

  1. 当Citrix ADC设备下一次接收到这些响应的GET请求时,它将从源服务器获取刷新的版本,缓存刷新的响应,并将这些响应提供给用户的浏览器,在浏览器中将它们组装成完整的错误报告。

建立一个基本内容组

默认情况下,所有缓存的数据都存储在默认内容组中。您可以配置多个内容组,并在一个或多个策略中指定这些内容组。

可以为静态内容配置内容组,必须为动态内容配置内容组。您可以修改任何内容组的配置,包括默认组。

使用命令行界面设置基本内容组

在命令提示符下,输入:

add cache contentgroup (-hitSelector -invalSelector | -hitParams -invalParams) -type [-relExpiry | - relexpirymilisec ] [-heurExpiryParam ]

添加缓存内容组Products_Details -hitSelector

添加缓存内容组bugrep -hitParams IssuePage RecordID Template TableId -invalParams RecordID -relExpiry 864000

使用GUI设置基本内容组

导航到优化>集成缓存>内容组,并创建内容组。

过期或刷新缓存对象

如果响应没有Expires报头或带有过期时间(Max-Age或Smax-Age)的Cache-Control报头,则必须使用以下方法之一使内容组中的对象过期:

  • 配置内容组过期设置,以确定是否保留对象以及保留多长时间。
  • 为内容组配置无效策略和操作。有关更多信息,请参见配置缓存和失效策略
  • 手动过期内容组或其中的对象。

缓存的响应过期后,Citrix ADC设备将在下一次客户端发出响应请求时刷新该响应。默认情况下,当缓存已满时,Citrix ADC设备首先替换最近最少使用的响应。

下面的列表描述了使用内容组的设置使缓存响应过期的方法。通常,这些方法被指定为百分比或秒:

  • 手册.手动使内容组中的所有响应或缓存中的所有响应失效。
  • 响应.积极和消极反应的特定过期间隔。只有在响应中缺少Last-Modified报头时才考虑基于响应的过期。
  • 启发式到期.对于具有Last-Modified报头的响应,启发式到期指定从修改响应时开始的时间装入(计算方法为当前时间减去Last-Modified时间,乘以启发式到期值)。例如,如果Last-Modified报头指示响应在2小时前更新,启发式过期设置为10%,则缓存对象将在0.2小时后过期。此方法假定频繁更新的响应必须更频繁地过期。
  • 绝对的还是相对的.指定每天响应过期的确切时间(绝对时间),格式为HH:MM、本地时间或GMT。当地时间可能不适用于所有时区。

相对过期指定从缓存丢失导致访问源服务器到响应过期之间的几秒或毫秒。如果指定以毫秒为单位的相对过期时间,请输入10的倍数。这种终止形式适用于所有积极的回应。响应中的Last-Modified、Expires和Cache-Control头将被忽略。

绝对过期和相对过期将覆盖响应本身中的任何过期信息。

  • 在下载.选项“在收到完整响应后过期”在下载响应时使响应过期。这对于频繁更新的响应非常有用,例如股票报价。缺省情况下,该选项是禁用的。

同时启用Flash缓存和接收完成响应后过期可以加速动态应用程序的性能。当启用这两个选项时,Citrix ADC设备仅为并发请求块获取一个响应。

  • 固定.默认情况下,当缓存已满时,Citrix ADC设备将首先替换最近最少使用的响应。Citrix ADC设备不会将此行为应用于标记为固定的内容组。

如果您没有为内容组配置过期设置,则以下是该组中过期对象的更多选项:

  • 配置一个策略,该策略具有应用于内容组的INVAL动作。
  • 在配置使用INVAL动作的策略时,请输入内容组的名称。

如何应用过期方法

对于积极反应和消极反应,过期的作用是不同的。表中描述了积极和消极的反应,积极和消极反应的过期下面所提到的。

以下是理解应用于内容组的过期方法的经验法则:

  • 您可以控制Citrix ADC设备在决定是否使对象过期时是否计算响应头。
  • 绝对过期和相对过期导致Citrix ADC设备忽略响应头(它们覆盖响应中的任何过期信息)。
  • 启发式过期设置和“弱正”和“弱负”到期(标记为默认的值)导致Citrix ADC设备检查响应头。这些设置一起工作如下:
    • Expires或Cache-Control头中的值将覆盖这些内容组设置。
    • 对于缺少Expires或Cache-Control报头但有Last-Modified报头的正向响应,Citrix ADC设备将启发式过期设置与报头值进行比较。
    • 对于缺少Expires、Cache-Control或Last-Modified报头的正向响应,Citrix ADC设备使用“弱正向”值。
    • 对于没有Expires或Cache-Control报头的负响应,Citrix ADC设备使用“弱负”值。

下表描述了如何应用这些方法。

响应类型 过期报头类型 内容组设置 对象在缓存中保留的周期
积极的 任何头 没有其他设置的过期内容(重新过期) 的值过期后内容设置。
积极的 任何头 没有其他设置的过期内容时间(absExpiry) 的值减去当前日期过期时间设置。
积极的 任何头 过期时间(relExpiry)和过期时间(absExpiry) 使用两个值中较小的值进行内容组设置。请参阅该表中的前几行。
积极的 Last-Modified(与任何其他头文件一起) 启发式(heurExpiry Param)与任何其他设置 从当前日期减去Last-Modified日期,将结果乘以启发式到期设置的值,然后除以100。
积极的 Last-Modified(与任何其他头文件一起) 默认值(正)(weakPosRel到期),没有其他设置 使用默认(正)过期设置的值。
积极的 Expires或Cache-Control: Max-Age报头 Last-Modified报头不存在,启发式(heurExpiry Param),默认(positive) (weakPosRel Expiry),或者两者都有 从过期日期或cache - control:信息日期。
积极的 没有缓存头文件 默认(正)(weakPosRel到期)和任何其他到期设置 使用默认(正)设置的值。
积极的 没有缓存头文件 有启发式(heurExpiry Param),没有默认(positive) (weakPosRel Expiry)设置。 如果Last-Modified报头不存在,则不缓存响应,或者以Already Expired状态缓存响应。如果存在Last-Modified报头,则使用启发式到期值。
到期或cache - control:信息 过期时间(resexpiry),过期时间(absExpiry),或同时设置 从Expires头的值中减去当前日期,或者使用Cache-Control:Max-Age头的值。
过期或缓存控制头不存在 过期时间(resexpiry),过期时间(absExpiry),或同时设置 响应未被缓存,或者以“已过期”状态缓存。
到期或cache - control:信息 任何设置 从过期或中减去当前日期cache - control:信息日期。
Expires和Cache-Control:Max-Age头不存在 Default (negative) (weakNegRel Expiry) 使用默认(负)设置的值。
Expires和Cache-Control:Max-Age头不存在 除了Default (negative)之外的任何设置(weakNegRel Expiry) 对象未缓存或缓存时处于“已过期”状态。

通过手动方法使内容组过期

您可以手动过期内容组中的所有条目。

使用命令行界面手动过期内容组中的所有响应

在命令提示符下,输入:

过期缓存内容组

使用GUI手动过期内容组中的所有响应

导航到优化>集成缓存>内容组,选中内容组,单击“失效”,使内容组中的所有响应失效。

使用GUI手动过期缓存中的所有响应

导航到优化>集成缓存>内容组,单击“Invalidate All”将使缓存中的所有响应过期。

配置内容组定时过期

您可以配置内容组,使其对其条目执行选择性过期或完全过期。过期间隔可以是固定的,也可以是相对的。

使用命令行接口配置内容组过期

在命令提示符下,输入:

设置缓存内容组\ (-relExpiry|-relExpiryMilliSec|-absExpiry|-absExpiryGMT| -heurExpiryParam|-weakPosRelExpiry|-weakNegRelExpiry| -expireAtLastBye) \ . >

通过GUI方式配置内容组过期

导航到优化>集成缓存>内容组织,选择内容组,并指定过期方式。

过期单个响应

响应过期将迫使Citrix ADC设备从源服务器获取刷新的副本。没有验证器的响应,例如,ETag或最后修改的报头,不能重新验证。因此,刷新这些响应与使它们过期具有相同的效果。

要使静态数据内容组中的缓存响应过期,可以指定必须与存储的URL匹配的URL。如果缓存的响应是参数化内容组的一部分,则必须指定组名和确切的URL干。主机名和端口号必须与缓存响应的主机HTTP请求头中的主机名和端口号保持一致。如果未指定端口,则假定端口为80。

使用命令行接口使内容组中的单个响应过期

在命令提示符下,输入:

过期缓存对象-url -host [-port ] [-groupName] [-httpMethod GET|POST]

使用CLI使内容组中的单个响应过期

在命令提示符下,输入以下命令:

过期缓存对象-locator

使用GUI使缓存的响应过期

导航到优化>集成缓存>缓存对象,选择缓存的响应,并过期。

使用GUI使响应过期

导航到优化>集成缓存>缓存对象,点击搜索并且,设置搜索条件以查找所需的缓存响应并过期。

刷新内容组中的响应

可以删除或刷新内容组中的所有响应、组中的部分响应或缓存中的所有响应。刷新缓存响应将为新的缓存响应释放内存。

注意:

若要一次刷新多个对象的响应,请使用配置实用工具方法。命令行界面不提供此选项。

使用命令行界面刷新来自内容组的响应

在命令提示符下,输入:

flush cache contentGroup [-query | [-selectorValue -host ]]

使用GUI刷新来自内容组的响应

  1. 导航到优化>集成缓存>内容组织
  2. 在详细信息窗格中,按如下方式刷新响应:
    • 若要刷新所有内容组中的所有响应,请单击“全部无效”,然后刷新所有响应。
    • 若要刷新特定内容组中的响应,请选择该内容组,单击无效,并刷新所有响应。

请注意:如果此内容组使用选择器,则可以通过在“选择器值”文本框中输入字符串、在“主机”文本框中输入主机名来有选择地刷新响应。然后单击Flush和OK.Selector值可以是一个最多2319个字符的查询字符串,用于参数化无效。

属性中的字符串,可以有选择地刷新响应查询字段。

如果内容组使用了无效参数,并且配置了“无效属于目标主机的对象”,则在查询和主机字段。

使用命令行接口刷新缓存的响应

在命令提示符下,输入:

flush缓存对象-locator | -url -host [-port ] [-groupName ] [-httpMethod GET|POST]

使用GUI刷新缓存的响应

导航到优化>集成缓存>缓存对象,选择缓存对象,并刷新。

删除内容组

如果在缓存中存储响应的任何策略都没有使用内容组,则可以删除它。如果内容组绑定到策略,则必须先删除策略。删除内容组将删除存储在该组中的所有响应。

不能删除“默认”、“BASEFILE”或“delta”组。默认组存储不属于任何其他内容组的缓存响应。

使用命令行界面删除内容组

在命令提示符下,输入:

Rm缓存内容组 .使用实例

使用GUI方式删除内容组

导航到优化>集成缓存>内容组织,选择该内容组,然后删除。

配置选择器和基本内容组