NSX Advanced Load Balancer 缓存 HTTP 内容,从而为客户端提供更快的页面加载速度,并减少服务器和 NSX Advanced Load Balancer 的工作负载。

在服务器发送响应(例如 logo.png)时,NSX Advanced Load Balancer 将对象添加到其 HTTP 缓存中,并向请求同一对象的后续客户端提供缓存的对象。因此,缓存减少了发送到服务器的连接和请求数量。



通过启用缓存和压缩,NSX Advanced Load Balancer 可以压缩基于文本的对象,并将压缩版本和未压缩的原始版本存储在缓存中。将从缓存中为来自支持压缩的客户端的后续请求提供对象。NSX Advanced Load Balancer 不需要每次都压缩每个对象,从而大大减少了压缩工作负载。

符合缓存条件的响应

如果启用了缓存,则 NSX Advanced Load Balancer 为以下类型的响应缓存 HTTP 对象:

  • HTTP/HTTPS

  • GET、HEAD 方法

  • 200 状态代码

NSX Advanced Load Balancer 还支持缓存来自 HTTPS 池中的服务器的对象。

注:
  • 缓存来自服务器的 HTTP/2 响应。

  • NSX Advanced Load Balancer 上的池组不支持 HTTP 缓存功能。

未缓存的响应

NSX Advanced Load Balancer 不缓存以下类型的响应的 HTTP 对象:

  • Put/Post/Delete 方法

  • 请求标头:

    • Cache-Control: no-store

    • 授权

  • 响应标头:

    • Cache-Control: no-cache

    • Expires 标头的日期已过期

    • Warning、Set-Cookie、Vary: *

    • Cache-Control: private, no-store

    • etag 和 Last-Modified 标头都不存在,并且:

    • GET/HEAD 方法包含查询

    • 不存在 expires/max-age 标头

  • 非 200 状态代码

注:

缓存可能无法与虚拟服务上存在的策略或 DataScript 一起使用。如果需要将策略和 DataScript 应用于虚拟服务,请考虑在应用程序配置文件中禁用缓存。

验证从缓存中提供的对象

要验证是否成功从缓存中提供对象,请导航到虚拟服务的日志页面。应用筛选器 - cache_hit= ”true”。这会筛选从缓存中成功提供的所有请求。在使用日志时,请确保启用非重要日志以显示非错误流量,并确保日志记录引擎在测试时捕获非重要日志。有关更多信息,请参见《VMware NSX Advanced Load Balancer 监控和可操作性指南》中的虚拟服务应用程序日志

缓存大小



缓存大小是根据处理启用了缓存的虚拟服务的服务引擎的内存分配间接确定的。这是通过连接内存滑块在 SE 组属性中确定的。分配给缓冲区的内存用于 TCP 缓冲(从而进行加速)、HTTP 请求和响应缓冲以及 HTTP 缓存。

缓存配置选项

HTTP 缓存是在 HTTP 类型的应用程序配置文件中启用的。

导航到模板 > 配置文件 > 应用程序 > 创建。选择 HTTP 以作为类型

在 HTTP 配置文件中,导航到缓存选项卡,然后选中启用缓存复选框以启用缓存。

配置以下可选参数:

  • X-Cache - 对于发送到客户端并且是从缓存中提供的任何响应,NSX Advanced Load Balancer 添加一个标记为 X-Cache 的 HTTP 标头。该标头本质上是信息性的,指示对象是从中间缓存中提供的。

  • 期限标头 - NSX Advanced Load Balancer 在从缓存提供的内容中添加一个标头,以向客户端指示对象已位于中间缓存中的秒数。例如,如果源服务器声明对象必须在 10 分钟后过期,并且对象已位于 NSX Advanced Load Balancer 缓存中 5 分钟,则客户端知道只能在本地再将对象缓存 5 分钟。

  • 日期标头 - 如果服务器未添加日期标头,则 NSX Advanced Load Balancer 将一个日期标头添加到从其 HTTP 缓存提供的对象中。该标头向客户端指示,服务器最初将对象发送到 NSX Advanced Load Balancer 中的 HTTP 缓存的时间。

  • 可缓存的对象大小 - 要缓存的对象的最小和最大大小(以字节为单位)。大多数小于 100 字节的对象是 Web 信标,尽管它们是图像对象,也不能进行缓存。可以缓存较大的对象(例如流视频),但这可能是不合适的,并且可能会很快使缓存大小饱和。

  • 缓存过期时间 - 中间缓存必须能够保证,它提供的内容没有失效。如果服务器发送的标头(例如缓存控制)指示可以将内容缓存多长时间,NSX Advanced Load Balancer 将使用这些值。如果服务器没有发送过期超时,并且 NSX Advanced Load Balancer 无法对是否过期做出可靠的判断,则它存储对象的时间不超过缓存过期时间指定的持续时间。

  • 启发式过期 - 如果来自服务器的响应对象不包括 Cache-Control 标头,但包括 If-Modified-Since 标头,则 NSX Advanced Load Balancer 使用该时间计算缓存控制过期时间,这会取代该对象的缓存过期时间设置。

  • 缓存具有查询参数的 URI - 该选项允许缓存 URI 包含查询参数的对象。停用该选项将禁止缓存这些对象。如果已启用,请求必须与 URI 查询匹配才能被视为命中。以下是两个包含查询的 URI 示例。

    • www.search.com/search.asp?search=caching

    • www.foo.com/index.html?loginID=User

    第一个示例可能是缓存通用搜索的合法用例,而第二个示例可能是在缓存中产生安全风险的唯一请求。

  • 可缓存的 MIME 类型 - 静态地定义可缓存的对象类型列表。这可能是一个字符串组(例如 System-Cacheable-Resource-Types),也可能是 NSX Advanced Load Balancer 必须缓存的 MIME 类型的自定义逗号分隔列表。如果在该字段中未列出 MIME 类型,则 NSX Advanced Load Balancer 默认假设任何对象都符合缓存条件。

  • 不可缓存的 MIME 类型 - 静态地定义不可缓存的对象类型列表。这会创建一个与可缓存列表相反的排除列表。不会缓存两个列表中列出的对象。