应用程序配置文件根据应用程序类型确定虚拟服务的行为。

在以下几节中介绍了应用程序配置文件类型及其选项。

依赖于 TCP/UDP 配置文件

与虚拟服务关联的应用程序配置文件可能依赖于底层 TCP/UDP 配置文件。例如,只有在虚拟服务使用的 TCP/UDP 配置文件类型设置为“TCP 代理”类型时,才能使用 HTTP 应用程序配置文件。与虚拟服务关联的应用程序配置文件指示服务引擎 (Service Engine, SE) 为该服务的应用程序协议(例如 HTTP)提供代理,并执行适合该协议的功能。

NSX Advanced Load Balancer 中的应用程序配置文件

要在 NSX Advanced Load Balancer 中查看应用程序配置文件,请导航到模板 > 配置文件 > 应用程序

NSX Advanced Load Balancer 显示创建的所有应用程序配置文件及其类型,如下所示。



在该屏幕中,您可以执行以下功能。
  • 单击搜索图标,然后开始键入应用程序配置文件名称以查找该配置文件。

  • 创建新的应用程序配置文件。

  • 单击应用程序配置文件的编辑图标以修改配置。

  • 删除现有的应用程序配置文件(如果未分配给虚拟服务)。

注:

如果配置文件仍与任何虚拟服务相关联,则无法移除该配置文件。在这种情况下,将显示一条错误消息,以列出仍引用该应用程序配置文件的虚拟服务。也无法删除任一系统标准配置文件(如下图所示)。

创建/编辑应用程序配置文件

单击创建,根据要处理的流量,从下拉菜单中选择应用程序配置文件类型。

DNS

默认用于处理 DNS 流量。

HTTP

默认用于处理第 7 层 HTTP 流量。

L4

适用于不使用应用程序特定的配置文件的任何虚拟服务。

L4 SSL/TLS

适用于进行 SSL 加密并且不使用应用程序特定的配置文件的任何虚拟服务。

SIP

默认用于处理 SIP 流量。

Syslog

默认用于处理 Syslog 流量。

新建应用程序配置文件屏幕中配置应用程序配置文件。

新建应用程序配置文件编辑应用程序配置文件屏幕具有相同的界面,而与选择的应用程序配置文件无关。

HTTP 配置文件

HTTP 应用程序配置文件允许将 NSX Advanced Load Balancer 作为任何 HTTP 流量的代理。可以将 HTTP 特定的功能(例如重定向、内容切换或重写服务器对客户端请求的响应)应用于虚拟服务。这些设置适用于与 HTTP 配置文件关联的所有 HTTP 服务。也可以将 HTTP 特定的策略或 DataScript 直接附加到虚拟服务。

最大标头计数

max_header_count 控制项定义 HTTP 请求和响应中的总标头数。max_header_count 默认值为 64,值范围是 0-4096。如果标头数超过指定的值,则 NSX Advanced Load Balancer 拒绝 HTTP 请求,并显示重要应用程序日志,如下所示:



登录到 NSX Advanced Load Balancer Controller,然后在“配置应用程序配置文件”模式下使用 System-HTTP 应用程序配置文件设置最大标头计数值,如下所示。
[admin:ctrl]: > configure applicationprofile System-HTTP
[admin:ctrl]: applicationprofile> http_profile
[admin:ctrl]: applicationprofile:http_profile> max_header_count
[admin:ctrl]: applicationprofile:http_profile> max_header_count 256
Overwriting the previously entered value for max_header_count
[admin:ctrl]: applicationprofile:http_profile> save
[admin:ctrl]: applicationprofile> save

要从 NSX Advanced Load Balancer UI 中启用最大标头计数选项,请导航到应用程序配置文件 > HTTP > DDoS,然后输入客户端最大标头计数的值。



传递 X-ACCEL 标头。

NSX Advanced Load Balancer 支持将 X-Accel 标头传递给发送到客户端的 HTTP 响应。这些标头包括:

  • X-Accel-Expires

  • X-Accel-Redirect

  • X-Accel-Limit-Rate

  • X-Accel-Buffering

  • X-Accel-Charset

HTTP 应用程序配置文件支持新的配置控制项 pass_through_x_accel_headers。默认情况下,该字段设置为 False,这意味着 NSX Advanced Load Balancer 不会在发送到客户端的 HTTP 响应中传递 X-Accel 标头。如果该字段设置为 True,则 NSX Advanced Load Balancer 在发送到客户端的 HTTP 响应中传递 X-Accel 标头。

注:

如果缓存了具有 X-Accel-Buffering 的对象,并且用户修改了配置,则用户需要清除缓存才能生效。

要启用传递 X-Accel 标头,请执行下面提到的配置步骤:

[admin:ctrl]: > configure applicationprofile System-HTTP
[admin:ctrl]: applicationprofile> http_profile
[admin:ctrl]: applicationprofile:http_profile> pass_through_x_accel_headers
Overwriting the previously entered value for pass_through_x_accel_headers
[admin:ctrl]: applicationprofile:http_profile> save
[admin:ctrl]: applicationprofile> save

常规配置

常规选项卡中,配置 HTTP 基本设置。

连接多路复用

该选项控制 HTTP 1.0 和 1.1 请求切换和服务器 TCP 连接重用行为。这允许 NSX Advanced Load Balancer 减少服务器维护的打开连接数量,并更好地在空闲服务器之间分配请求,从而减少服务器过载并提高最终用户的性能。到服务器的连接的确切减少数量取决于客户端连接的持续时间、HTTP 版本以及请求/响应使用连接的频率。请务必了解“连接”是指 TCP 连接,而“请求”是指 HTTP 请求和后续响应。HTTP 1.0 和 1.1 每次仅允许通过打开的 TCP 连接传输一个请求/响应。很多浏览器尝试打开大约 6 个到目标网站的并发 TCP 连接以缓解该瓶颈。

WebSockets 代理

如果启用了 WebSocket,则虚拟服务可以接受客户端的升级标头请求。如果服务器侦听 WebSockets,将升级客户端和服务器之间的连接。WebSocket 是全双工 TCP 协议。连接最初是通过 HTTP 启动的,但在成功升级后,NSX Advanced Load Balancer 进行的所有 HTTP 解析将停止,并将连接视为正常 TCP 连接。

注:

NSX Advanced Load Balancer 支持 HTTP/2 WebSocket。除了支持具有相同 HTTP 版本的 WebSocket 客户端和服务器以外,从 22.1.3 版本开始,NSX Advanced Load Balancer 还支持 HTTPv2 版本的 WebSocket 客户端和 HTTPv1 版本的服务器的组合。

X-Forwarded-For

对于该选项,在将请求传送到服务器时,NSX Advanced Load Balancer 将 X-Forwarded-For (XFF) 标头插入到 HTTP 请求标头中。XFF 标头值包含原始客户端源 IP 地址。Web 服务器可以使用该标头以记录客户端交互,而不是使用第 3 层 IP 地址,这将错误地反映服务引擎的源 NAT 地址。在启用该选项时,将显示 XFF 备用名称字段,它允许 XFF 标头插入使用自定义 HTTP 标头名称。如果提供的 XFF 标头或自定义名称在客户端请求中已存在,将先移除该标头的所有实例。要添加标头而不移除已有的标头实例,请使用 HTTP 请求策略。

要保留请求附带的一个或多个 X-Forwarded-For 标头,从 NSX Advanced Load Balancer 22.1.3 开始,在启用 X-Forwarded-For 时,可以使用 XFF 标头处理选项。

  • 选择替换 XFF 标头,以将所有入站 X-Forward-For 标头替换为 NSX Advanced Load Balancer 中创建的标头,如以下示例中所示:



  • 选择附加 XFF 标头,以将所有入站 XFF 标头和客户端 IP 地址附加在一起,如以下示例中所示:



  • 选择添加新的 XFF 标头以添加具有客户端 IP 地址的新 XFF 标头,如以下示例中所示:



  • 应用程序配置文件屏幕如下所示:



保留客户端 IP 地址

如果单击该选项,则导致 NSX Advanced Load Balancer SE 将客户端 IP 作为从 SE 到后端应用程序服务器的负载均衡连接的源 IP,而不是使用它自己的 IP。在 SE 组中启用 IP 路由是启用该选项的必备条件。“保留客户端 IP 地址”与虚拟服务 SNAT 互斥。来自 HTTP(s) 应用程序配置文件的连接多路复用不能与“保留客户端 IP”一起使用。

保存

从顶部菜单中选择另一个选项卡以继续进行编辑,或者选择“保存”以返回到应用程序配置文件选项卡。

多路复用加持久性

该表显示多路复用行为根据持久性发生的变化。

多路复用

持久性

行为

已启用

已停用

客户端连接及其请求与服务引擎的服务器端分离。

将使用到池中的服务器的新连接或已有的连接,在这些服务器之间对请求进行负载均衡。

来自任何客户端的请求可以共享到这些服务器的连接。

已启用

已启用

客户端连接及其请求将发送到单个服务器。

这些请求可以与始终使用同一服务器的其他客户端共享连接。

不会对 HTTP 请求进行负载均衡。

已停用

已启用

对于从客户端收到的每个连接,NSX Advanced Load Balancer 打开一个到服务器的新 TCP 连接。

不会与其他客户端共享连接。

通过来自同一客户端的所有连接收到的所有请求将发送到一个服务器。

HTTP 客户端浏览器可能会打开很多并发连接,客户端连接数将与服务器连接数相同。

已停用

已停用

客户端和服务器之间的连接是一对一连接。

请求始终保持它们开始时使用的同一连接。

可以在可用的服务器之间分配来自同一客户端的多个连接。

安全配置

HTTP 应用程序配置文件的安全性选项卡控制与该配置文件关联的 HTTP 应用程序的安全设置。

安全信息

HTTP 安全设置影响虚拟服务处理 HTTPS 的所需方式。如果仅为虚拟服务配置了 HTTP,本节中讨论的 HTTPS 设置将不适用。只有在为虚拟服务配置了 HTTPS 或配置了 HTTP 和 HTTPS 时,这些设置才会生效。



也可以使用策略或 DataScript 配置更精细的设置。

字段

描述

在所有位置使用 SSL

该选项启用所有以下选项,这些选项共同为 HTTPS 流量提供建议的安全功能。

HTTP 到 HTTPS 重定向

对于一个同时配置了 HTTP 服务端口(禁用了 SSL)和 HTTPS 服务端口(启用了 SSL)的虚拟服务,该功能自动将客户端从不安全端口重定向到安全端口。例如,在浏览器中键入 www.avinetworks.com 的客户端将自动重定向到 https://www.avinetworks.com。如果虚拟服务未同时配置 HTTP 和 HTTPS 服务端口,则不会激活此功能。对于两个虚拟服务(一个服务使用 HTTP,另一个服务在同一 IP 地址上侦听 HTTPS),必须创建 HTTP 请求策略以手动重定向协议和端口。

安全 Cookie

在将 NSX Advanced Load Balancer 作为虚拟服务池中的后端服务器的 SSL 代理时,NSX Advanced Load Balancer 通过 SSL 与客户端进行通信。不过,如果 NSX Advanced Load Balancer 通过 HTTP(而不是通过 SSL)与后端服务器通信,这些服务器将错误地以 HTTP 形式返回响应。因此,不会按预期方式标记必须标记为安全的 Cookie。如果启用安全 Cookie,将使用安全标记对任何服务器 Cookie 进行标记,这会告诉客户端仅将该 Cookie 通过 HTTPS 发送到虚拟服务。只有在应用于启用了 SSL/TLS 终止的虚拟服务时,才会激活该功能。

HTTP 严格传输安全 (HSTS)

严格传输安全使用标头通知客户端浏览器,只能通过 SSL/TLS 访问该站点。将在所有 HTTP 响应中发送 HSTS 标头,包括错误响应。该功能缓解中间人攻击,这种攻击可能会强制客户端的安全 SSL/TLS 会话通过不安全的 HTTP 进行连接。HSTS 具有持续时间设置,用于向客户端通知 SSL/TLS 首选项必须在指定的天数内保持有效。

如果需要,请在 HTTP Strict-Transport-Security 标头中插入 include Subdomains 指令。这样做将通知用户代理,HSTS 策略适用于该 HSTS 主机以及该主机的域名的任何子域。将仅在配置为终止 SSL/TLS 的虚拟服务上激活该设置。

注:

如果临时将虚拟服务设置为支持 SSL/TLS 并且设置了 HSTS,则无法将其正常降回到 HTTP。客户端浏览器将拒绝通过 HTTP 接受该站点。当 HSTS 生效时,客户端将不接受自签名证书。

仅 HTTP Cookie

NSX Advanced Load Balancer 支持为控制器生成的 Cookie 设置 HTTP-Only 标记。如果浏览器支持,设置该属性将禁止第三方脚本访问该 Cookie。该功能激活任何 HTTP 虚拟服务或终止的 HTTPS 虚拟服务。

在 Cookie 具有 HTTP-Only 标记时,它向浏览器通知只能由服务器访问该特殊 Cookie。严格禁止尝试从客户端脚本中访问该 Cookie 的任何操作。

要检查用于启用 HTTP-Only 属性的 CLI 命令,请参见用于启用 HTTP-Only 标记的 CLI 命令

将服务器重定向重写为 HTTPS

如果虚拟服务终止客户端 SSL/TLS,然后将请求作为 HTTP 传送到服务器,则很多服务器假设到客户端的连接是 HTTP。因此,服务器生成的绝对重定向可能包含该协议,例如 http://www.avinetworks.com。如果服务器返回重定向并在位置标头中具有 HTTP,则该功能将其重写到 HTTPS。此外,如果服务器为其 IP 地址返回重定向,则会将其重写到客户端请求的主机名。如果服务器为客户端请求的主机名以外的主机名返回重定向,则不会更改这些重定向。

注:

如果在重写重定向时需要更大的粒度,请考虑创建 HTTP 响应策略。仅当虚拟服务同时具有 HTTP 和 HTTPS 服务端口时,此功能才会激活

X-Forwarded-Proto

如果启用该选项,将导致 NSX Advanced Load Balancer 在发送到服务器的 HTTP 请求中插入 X-Forwarded-Proto 标头,这会向该服务器通知客户端通过 HTTP 还是 HTTPS 连接到 NSX Advanced Load Balancer。此功能可为任何 HTTP 或 HTTPS 虚拟服务激活。

用于启用 HTTP-Only 标记的 CLI 命令

[admin:admin-controller2]: > configure applicationpersistenceprofile System-Persistence-Http-Cookie[admin:admin-controller2]: applicationpersistenceprofile> http_cookie_persistence_profile [admin:admin-controller2]: applicationpersistenceprofile:http_cookie_persistence_profile> http_only [admin:admin-controller2]: applicationpersistenceprofile:http_cookie_persistence_profile> save [admin:admin-controller2]: applicationpersistenceprofile> save
+-------------------------------|---------------------------------------+
|Field                          |Description                            |
+-------------------------------+---------------------------------------+
|uuid                           |applicationpersistenceprofile-04ca34e1 |
|name                           |System-Persistence-Http-Cookie         |
|persistence_type               |PERSISTENCE_TYPE_HTTP_COOKIE           |
|server_hm_down_recovery        |HM_DOWN_PICK_NEW_SERVER                |
|http_cookie_persistence_profile|                                       |
|  cookie_name                  |VAJOSFML                               |
|  key[1]                       |                                       |
|    name                       |40015eba-ee51-40c6-8f8d-06e2ec0516e9   |
|    aes_key                    |b'WX9pow2nYKYTfENMZSdwODZQu8e37Zdraoovt|
| always_send_cookie            |False                                  |
| http_only                     |True                                   |
| is_federated                  |False                                  |
| tenant_ref                    |admin                                  | 
+-------------------------------+---------------------------------------+       

将 HTTP 重定向到 HTTPS

为了安全起见,行业最佳做法是确保所有 HTTP 流量像 HTTPS 一样进行 SSL 加密。由于典型的最终用户在输入请求的 URL 时不指定 HTTPS 协议,因此,初始请求是通过 HTTP 传输的。NSX Advanced Load Balancer 可以提供 SSL 终止服务,它还必须处理 HTTP 用户到 HTTPS 的重定向。您可以通过任何以下方法启用 HTTP 到 HTTPS 重定向:

  • 应用程序配置文件中的安全性配置下面

    • 应用程序配置文件中配置 HTTP 到 HTTPS 重定向

    • 在“应用程序配置文件”中配置将服务器重定向重写为 HTTPS

  • 使用 HTTP 请求策略

在“应用程序配置文件”中配置 HTTP 到 HTTPS 重定向

如果虚拟服务配置为 HTTP(通常为端口 80)和 HTTPS(通常为端口 443 上的 SSL),请使用附加的 HTTP 应用程序配置文件启用 HTTP 到 HTTPS 重定向。

  1. 导航到应用程序 > 虚拟服务,选择所需的虚拟服务,然后单击右侧的编辑图标。

  2. 设置下面,转到配置文件部分。

  3. 选择 System-HTTP 配置文件,然后单击编辑图标。

  4. 安全性下面,选择 HTTP 到 HTTPS 重定向

  5. 单击保存

System-Secure-HTTP 配置文件与 System-HTTP 配置文件类似,不同之处在于,默认启用在所有位置使用 SSL 下面的 HTTP 到 HTTPS 重定向选项。

在“应用程序配置文件”中配置将服务器重定向重写为 HTTPS

将服务器重定向重写为 HTTPS 选项是在应用程序配置文件安全性选项卡中提供的。该选项将重定向的位置标头从 HTTP 更改为 HTTPS,并且还会移除任何硬编码的端口。

注:
  • 不会更改相对重定向,而仅更改绝对重定向。因此,建议同时启用这两个选项。

  • 对于未配置 HTTPS 的虚拟服务,该配置文件设置没有任何影响。

以下示例显示从服务器发送的位置标头:

http://www.test.com:5000/index.htm

NSX Advanced Load Balancer 重写位置标头,以将以下内容发送到客户端:

https://www.test.com/index.htm

使用 HTTP 请求策略

要获得更高的粒度,请使用 HTTP 请求策略。

  1. 导航到应用程序 > > > 虚拟服务,选择所需的虚拟服务,然后单击右侧的编辑图标。

  2. 策略选项卡下面,选择 HTTP 请求

  3. 单击创建 (+) 图标。

  4. 匹配规则的下拉列表中选择服务端口,选择“是”,然后在端口字段中输入 80

  5. 保存规则。(可选)可以添加所需的条件以确定何时执行重定向。

  6. 操作部分中,从下拉菜单中选择重定向。然后,将协议设置为 HTTPS。这会将重定向端口设置为 443,并将重定向响应代码设置为 302(临时重定向)。

可以轻松快捷地设置 HTTP 请求策略,这些策略每次仅影响一个虚拟服务。

添加查询

可以使用 add_string 在 HTTP 请求策略中添加重定向操作。

如果启用,则 keep_query 字段将入站请求的查询参数用于最终重定向 URI。

add_string 字段将查询字符串附加到重定向 URI 中。

要了解 keep_queryadd_string 的工作方式,请将示例 http://test.example.com/images?name=animals 视为入站请求,并且该请求将重定向到 http://google.com

keep_query

add_string

重定向链接

已启用

未配置

http://google.com/images?name=animals

已禁用

未配置

http://google.com/images?name=animals

已启用

设置为“type=cats&color=black

http://google.com/images?name=animals&type=cats&color=black

已禁用

设置为“type=cats&color=blac

http://google.com/images?name=animals&type=cats&color=black

CLI 配置如下所示:

[admin:abc-controller]: > configure httppolicyset vs1-Default-Cloud-HTTP-Policy-Set-0
[admin:abc-controller]: httppolicyset> http_request_policy
[admin:abc-controller]: httppolicyset:http_request_policy>
[admin:abc-controller]: httppolicyset:http_request_policy> rules index 1
[admin:abc-controller]: httppolicyset:http_request_policy:rules>[admin:abc-controller]: httppolicyset:http_request_policy:rules> redirect_action
[admin:abc-controller]: httppolicyset:http_request_policy:rules:redirect_action>
[admin:abc-controller]: httppolicyset:http_request_policy:rules:redirect_action> add_string images=cat keep_query
[admin:abc-controller]: httppolicyset:http_request_policy:rules:redirect_action> status_code http_redirect_status_code_302
[admin:abc-controller]: httppolicyset:http_request_policy:rules:redirect_action> port 80
[admin:abc-controller]: httppolicyset:http_request_policy:rules:redirect_action> host
[admin:abc-controller]: httppolicyset:http_request_policy:rules:redirect_action:host> type uri_param_type_tokenized
[admin:abc-controller]: httppolicyset:http_request_policy:rules:redirect_action:host> tokens
[admin:abc-controller]: httppolicyset:http_request_policy:rules:redirect_action:host:tokens> type uri_token_type_string str_value www.google.com
[admin:abc-controller]: httppolicyset:http_request_policy:rules:redirect_action:host> save
[admin:abc-controller]: httppolicyset:http_request_policy:rules:redirect_action> save
[admin:abc-controller]: httppolicyset:http_request_policy:rules> save
[admin:abc-controller]: httppolicyset:http_request_policy> save
[admin:abc-controller]: httppolicyset> save
+------------------------+----------------------------------------------+
| Field                  | Value                                        |
+------------------------+----------------------------------------------+
| uuid                   | httppolicyset-2ee5<truncated>                |                                       |                        |                                              |
| name                   | vs1-Default-Cloud-HTTP-Policy-Set-0          |
| http_request_policy    |                                              |
|   rules[1]             |                                              |
|     name               | Rule 1                                       |
|     index              | 1                                            |
|     enable             | True                                         |
|     match              |                                              |
|       method           |                                              |
|         match_criteria | IS_IN                                        |
|         methods[1]     | HTTP_METHOD_GET                              |
|     redirect_action    |                                              |
|       protocol         | HTTP                                         |
|       host             |                                              |
|         type           | URI_PARAM_TYPE_TOKENIZED                     |
|         tokens[1]      |                                              |
|           type         | URI_TOKEN_TYPE_STRING                        |
|           str_value    | www.vmware.com                               |
|         tokens[2]      |                                              |
|           type         | URI_TOKEN_TYPE_STRING                        |
|           str_value    | www.google.com                               |
|       port             | 80                                           |
|       keep_query       | True                                         |
|       status_code      | HTTP_REDIRECT_STATUS_CODE_302                |
|       add_string       | images=cat                                   |
| is_internal_policy     | False                                        |
| tenant_ref             | admin                                        |
+------------------------+----------------------------------------------+

使用 DataScript 重定向

为了获得最高的粒度和可重用性,请使用 DataScript 配置重定向行为。

要添加 DataScript,请执行以下操作:

  1. 导航到应用程序 > > > 虚拟服务,选择所需的虚拟服务,然后单击编辑选项。

  2. 导航到策略 > > > DataScript

  3. 单击添加 DataScript

  4. 单击要执行的脚本

  5. 单击创建 DataScript

  6. 新建 DataScript 集屏幕中的事件下面,单击添加

  7. 添加下拉菜单中,选择 HTTP 请求

  8. HTTP 请求事件脚本文本框中输入以下脚本并保存。

if avi.vs.port() ~= "443" then avi.http.redirect("https://" .. avi.http.hostname() .. avi.http.get_uri()) end

客户端 SSL 证书验证

NSX Advanced Load Balancer 可以根据受信任的证书颁发机构 (CA) 和配置的证书吊销列表 (CRL) 验证客户端提供的 SSL 证书。其他选项允许通过 HTTP 标头将证书信息传递到服务器。

字段

描述

验证类型

根据 SSL 证书启用客户端验证。选择以下选项之一:

  • - 禁用客户端证书验证。

  • 请求 - 该设置要求客户端提供客户端证书。如果客户端不提供证书,或者如果证书未能通过 CRL 检查,则仍会将客户端连接和请求转发到目标服务器。这允许 NSX Advanced Load Balancer 在 HTTP 标头中将客户端的证书转发到服务器,以便服务器可以做出允许或拒绝客户端的最终决定。

  • 必需 - NSX Advanced Load Balancer 要求客户端提供证书,并且证书必须通过 CRL 检查。仍然可以通过 HTTP 标头将客户端证书或相关字段传送到服务器。

PKI 配置文件

公钥基础架构 (Public Key Infrastructure, PKI) 配置文件包含配置的证书颁发机构 (Certificate Authority, CA) 和 CRL。如果将验证设置为请求,则不需要使用 PKI 配置文件,但如果将验证设置为必需,则需要使用该配置文件。

HTTP 标头名称

NSX Advanced Load Balancer 可以选择在发送到服务器的新 HTTP 标头中插入客户端的证书或其中的一部分。要插入标头,将使用此字段确定标头的名称。

HTTP 标头值

HTTP 标头值字段与 HTTP 标头名称字段一起使用,用于确定在发送到服务器的 HTTP 标头中插入的客户端证书部分。通过使用加号图标,可以插入更多标头。该操作可以作为 HTTP 策略或 DataScript 执行的任何操作的补充,也可以用于在发送到目标服务器的请求中插入标头。

压缩

压缩采用 HTTP 1.1 标准,以通过 Gzip 算法减少基于文本的数据的大小。HTML、JavaScript、CSS 和类似文本内容类型的典型压缩率大约为 75%,这意味着 20 KB 文件在通过 Internet 发送之前可以压缩为 5 KB,从而以类似的百分比减少传输时间。

“压缩”为从 NSX Advanced Load Balancer 到客户端的响应启用 HTTP Gzip 压缩。

可以使用压缩选项卡查看或编辑应用程序配置文件的 HTTP 压缩设置。



可以使用虚拟服务的客户端日志选项卡查看达到的压缩百分比。这可能要求在虚拟服务的分析选项卡上启用完整客户端日志,以记录部分或全部客户端请求。这些日志将包括一个字段,以显示每个 HTTP 响应的压缩百分比。

注:

强烈建议将压缩与缓存一起启用,它们可以显著降低压缩内容的 CPU 成本。如果同时启用了压缩和缓存,像 index.html 文件之类的对象只需要压缩一次。在压缩对象后,将从缓存中为后续请求提供压缩的对象。NSX Advanced Load Balancer 不会为每个客户端请求不必要地重新压缩对象。对于不支持压缩的客户端,NSX Advanced Load Balancer 也会缓存对象的未压缩版本。

按照表中所述,配置压缩设置。

字段

描述

启用压缩

选择该选项以启用压缩。如果启用该选项,则会显示其他压缩设置。

压缩模式

压缩模式为不同的客户端启用不同的压缩级别。例如,可以创建筛选器,以便为缓慢移动客户端提供激进压缩级别,而为来自本地内联网的快速客户端停用压缩。建议使用自动,以根据客户端和可用的服务引擎 CPU 资源动态调整这些设置。

  • 自动模式允许 NSX Advanced Load Balancer 确定最佳的设置。

    注:

    默认情况下,压缩模式自动。内容压缩取决于客户端的 RTT,如下所述:

    • 如果 RTT 少于 10 毫秒,则不需要进行压缩。

    • 如果 RTT 为 10-20 毫秒,则需要进行正常压缩。

    • 如果 RTT 超过 200 毫秒,则需要进行激进压缩。

  • 自定义模式允许创建自定义筛选器,以更精细地控制客户端必须接受哪种压缩级别。

可压缩的内容类型

该字段确定哪些 HTTP 内容类型符合压缩条件。从下拉菜单中选择一个包含可压缩类型列表的字符串组。

移除接受编码标头

该字段移除 Accept-Encoding 标头,该标头是由 HTTP 1.1 客户端发送的,用于指示它们可以接受压缩的内容。如果在将请求发送到服务器之前从请求中移除该标头,则 NSX Advanced Load Balancer 可以确保服务器不会压缩响应。仅 NSX Advanced Load Balancer 执行压缩。

缓冲区数

指定用于压缩输出的缓冲区数。

缓冲区大小

指定用于压缩输出的每个缓冲区的大小,理想情况下,它必须是页面大小的倍数。

正常级别

指定为选择正常压缩的内容应用的压缩级别。

激进级别

指定为选择激进压缩的内容应用的压缩级别。

窗口大小

指定压缩使用的窗口大小,舍入到 2 的最后一个幂。

哈希大小

指定压缩使用的哈希大小,舍入到 2 的最后一个幂。

响应内容长度

指定用于启用压缩的最小响应内容长度。

低 RTT 上限

如果客户端 RTT 高于该阈值,则在响应上启用正常压缩。

高 RTT 下限

如果客户端 RTT 高于该阈值,则在响应上启用激进压缩。

移动浏览器标识符

选择标识移动浏览器的值以启用激进压缩。

自定义压缩

要创建自定义压缩筛选器,请执行以下操作:

  1. 单击 + 压缩筛选器以创建自定义筛选器。

  2. 添加压缩筛选器部分中,配置以下内容。

    字段

    描述

    筛选器名称

    为筛选器提供唯一的名称(可选)。

    匹配规则

    确定客户端是否符合使用关联的操作进行压缩的条件(通过客户端 IP 或用户代理字符串)。如果同时填充了客户端 IP 和用户代理规则,两个规则必须为 true,压缩操作才会生效。

    • 客户端 IP 地址允许您使用 IP 组指定符合条件的客户端 IP 地址。例如,名为 Intranet 的 IP 组包含由所有内部 IP 地址范围组成的列表。如果清除“位于”按钮,则会颠倒该逻辑,这意味着不是来自内部 IP 网络的任何客户端将与筛选器匹配。

    • 用户代理将客户端的 User-Agent 字符串与字符串组中包含的符合条件列表进行匹配。User-Agent 是客户端提供的标头,用于指示它们可以使用的浏览器或设备类型。System-Devices-Mobile 组包含用于常见移动浏览器的 HTTP User-Agent 字符串列表。

  3. 操作部分确定满足匹配条件的客户端或请求将会发生什么情况,具体来说,是指将使用的 HTTP 压缩级别。

    字段

    描述

    激进压缩

    它使用 Gzip 级别 6,这会将文本内容压缩大约 80%,同时需要使用来自 NSX Advanced Load Balancer 和客户端的更多 CPU 资源。

    正常压缩

    它使用 Gzip 级别 1,这会将文本内容压缩大约 75%,这在压缩率以及 NSX Advanced Load Balancer 和客户端消耗的 CPU 资源之间达到很好的平衡。

    无压缩

    它禁用压缩。对于来自非常快、高带宽和低延迟连接的客户端(例如,在同一数据中心),压缩实际上可能会减慢传输速度,并消耗不必要的 CPU 资源。

HTTP 缓存

NSX Advanced Load Balancer 可以缓存 HTTP 内容,从而为客户端提供更快的页面加载速度,并减少服务器和 NSX Advanced Load Balancer 的工作负载。在服务器发送响应(例如 logo.jpg)时,NSX Advanced Load Balancer 可以将对象添加到其缓存中,并向请求同一对象的后续客户端提供该对象。这可以减少发送到服务器的连接数和请求数。

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

注:

无论配置了何种缓存策略,只有在对象符合缓存条件时,才能缓存该对象。某些对象可能不符合缓存条件。

默认情况下,将停用缓存。可以单击启用缓存以配置缓存特定的选项。



根据需要,配置缓存属性。

字段

描述

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 缓存的时间。

可缓存的对象大小

可以存储在 NSX Advanced Load Balancer HTTP 缓存中的对象(图像、脚本等)的最小和最大大小,以字节为单位。大多数小于 100 字节的对象是 Web 信标,尽管它们是图像对象,也不能进行缓存。

缓存过期时间

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

启发式过期

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

缓存具有查询参数的 URL

该选项允许缓存 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 类型

静态地定义不可缓存的对象列表。这会创建一个与可缓存列表相反的拒绝列表。

HTTP DDoS

分布式拒绝服务 (Distributed Denial of Service, DDoS) 部分允许为 HTTP 和底层 TCP 协议配置缓解控制。默认情况下,NSX Advanced Load Balancer 配置为保护自身以免受到多种类型的攻击。例如,如果一个虚拟服务是 SYN 泛洪攻击的目标,NSX Advanced Load Balancer 将在打开连接之前激活 SYN Cookie 以验证客户端。下面列出的很多选项并不是显而易见的,因为数据突发对于应用程序来说可能是正常的。NSX Advanced Load Balancer 提供了一些控制项以修改默认行为,从而确保提供最佳的保护。

除了下面所述的 DDoS 设置以外,NSX Advanced Load Balancer 还可以实施到虚拟服务和池的连接限制,这是通过高级属性页面配置的。也可以在“网络安全策略”部分中为虚拟服务配置连接速率限制和突发限制。由于这些设置适用于单个虚拟服务和池,因此不会在配置文件中进行配置。



HTTP 限制

缓解基于 HTTP 的拒绝服务攻击的第一步是,设置参数以传输来自客户端的标头和请求。其中的很多设置可以防范 HTTP SlowLoris 和 SlowPOST 攻击的变体,在这些攻击中,客户端打开一个有效的连接,然后非常缓慢地流式传输请求标头或发布 (POST) 文件。这种类型的攻击旨在占用缓冲区和连接以耗尽服务器(此处为 SE)资源。

超过下面定义的限制的客户端将重置该 TCP 连接并生成日志。这不会禁止客户端启动新连接,并且不会中断同一客户端可能打开的其他连接。

字段

描述

客户端标头超时

设置允许客户端成功传输请求的完整标头的最长时间。默认为 10 秒。

HTTP 保持活动状态超时

设置 HTTP 1.0 或 1.1 连接可以处于空闲状态的最大时间长度。这仅影响客户端到 NSX Advanced Load Balancer 的交互。NSX Advanced Load Balancer 到服务器的保持活动状态是通过连接多路复用功能控制的。

客户端正文超时

设置客户端发送消息正文的最大时间长度。这通常仅影响正在发布(上载)对象的客户端。默认值 0 禁用该超时。

POST 接受超时

在完成 TCP 三向握手后,客户端将在该时间内发送请求标头的第一个字节。在收到第一个字节后,将满足该定时器要求,并启动客户端标头超时(如上所述)。

发送保持活动状态标头

选择该选项以将 HTTP keep-alive 标头发送到客户端。

使用应用程序保持活动状态超时

在选中上述参数以将 keep-alive 标头发送到客户端时,需要在此处指定超时值。如果未选中该框,NSX Advanced Load Balancer 将使用在“HTTP 保持活动状态超时”字段中指定的值。如果选中该框,则采用应用程序发送的超时。

客户端 POST 正文大小

设置客户端请求正文的最大大小。这通常会限制客户端 POST 的大小。如果将该值设置为 0,将禁用该大小限制。

客户端请求大小

设置客户端请求中的所有标头的最大组合大小。

客户端标头大小

设置客户端请求中的单个标头的最大大小。

速率限制

该部分控制客户端可以与站点交互的速率。每个启用的速率限制具有三个设置:

字段

描述

阈值

在指定的时间段内发生定义的连接、数据包或 HTTP 请求阈值时,客户端超过速率限制。

时间段

在指定的时间段内发生定义的连接、数据包或 HTTP 请求阈值时,客户端超过速率限制。

操作

选择在客户端超过速率限制时执行的操作。这些选项将取决于限制是 TCP 限制还是 HTTP 限制。

  • 仅报告 - 在虚拟服务器日志页面上生成日志。默认情况下,不执行任何操作。不过,可以将该选项与警示一起使用以生成警示操作,以便向远程目标发送通知或通过 ControlScript 执行操作。

  • 丢弃 SYN 数据包 - 对于基于 TCP 的限制,以静默方式丢弃来自客户端的 TCP SYN。NSX Advanced Load Balancer 还会生成日志。不过,在出现大量 DoS 流量期间,可能会跳过重复的日志。

  • 发送 TCP RST - 重置客户端 TCP 连接尝试。虽然发送 TCP 重置比“丢弃 SYN 数据包”选项更正常一些,但会为重置生成额外的数据包,而“丢弃 SYN 数据包”选项不发送客户端响应。NSX Advanced Load Balancer 还会生成日志。不过,在出现大量 DoS 流量期间,可能会跳过重复的日志。

  • 关闭 TCP 连接 - 在超过 HTTP 速率限制时,重置客户端 TCP 连接。

  • 发送 HTTP 本地响应 - 服务引擎将 HTTP 响应直接发送到客户端,而不会将请求转发到服务器。选择响应的 HTTP 状态代码以及响应页面(可选)。

  • 发送 HTTP 重定向 - 将客户端重定向到另一个位置。

可以配置以下速率限制。

限制来自客户端的连接速率

限制在任何单个客户端 IP 地址和虚拟服务之间建立的所有连接的速率。

限制从客户端到所有 URL 的请求速率

限制从任何单个客户端 IP 地址到虚拟服务的所有 URL 的所有 HTTP 请求的速率。

限制从所有客户端到某个 URL 的请求速率

限制从所有客户端 IP 地址发送到任何单个 URL 的所有 HTTP 请求的速率。

限制从客户端到某个 URL 的请求速率

限制从任何单个客户端 IP 地址发送到任何单个 URL 的所有 HTTP 请求的速率。

限制从客户端到所有 URL 的失败请求速率

在指定的时间段内,在来自客户端的失败请求数超过该时间段的阈值后,限制来自该客户端的所有请求的速率。将根据客户端的 IP 地址对客户端进行跟踪。根据客户端或服务器端错误状态代码将请求视为失败,这与 NSX Advanced Load Balancer 记录日志和衡量指标子系统标记失败请求的方式一致。

限制从所有客户端到某个 URL 的失败请求速率

在指定的时间段内,到 URI 的失败请求数超过该时间段的阈值后,限制到该 URI 的所有请求的速率。根据客户端或服务器端错误状态代码将请求视为失败,这与 NSX Advanced Load Balancer 记录日志和衡量指标子系统标记失败请求的方式一致。

限制从客户端到某个 URL 的失败请求速率

在指定的时间段内,从客户端发送到 URI 的失败请求数超过该时间段的阈值后,限制从该客户端发送到 URI 的所有请求的速率。根据客户端或服务器端错误状态代码将请求视为失败,这与 NSX Advanced Load Balancer 记录日志和衡量指标子系统标记失败请求的方式一致。

限制从客户端到所有 URL 的扫描速率

自动跟踪客户端,并将其划分为 3 个组 - 良好、错误、未知。将根据客户端的 IP 地址对客户端进行跟踪。在 NSX Advanced Load Balancer 扫描检测系统为来自客户端并成功完成的请求生成历史记录时,这些客户端将添加到良好组中。在客户端没有足够的历史记录时,这些客户端将添加到未知组中。具有失败请求历史记录的客户端将添加到错误组中,并使用比未知客户端组更严格的阈值限制其请求速率。NSX Advanced Load Balancer 扫描检测系统自动调整自身,以便在通过 NSX Advanced Load Balancer 更改流量模式时动态更改良好、错误和未知客户端 IP 组成员。换句话说,如果对网站的更改导致大多数客户同时发生故障(例如 404 错误),NSX Advanced Load Balancer 将进行调整,而不是将所有客户端都标记为尝试扫描该网站。

限制从所有客户端到所有 URL 的扫描速率

与之前的限制类似,但将来自所有客户端的扫描作为单个实体进行限制,而不是单独进行限制。在所有客户端加在一起达到限制后,将重置发送下一个失败请求的任何客户端。

注:

您可以上载任何类型的文件以作为本地响应。建议使用 UI 配置一个本地文件。要使用 API 更新该本地文件,请以带外方式对 Base64 文件进行编码,并在 API 中使用编码的格式。

DNS 配置文件

DNS 应用程序配置文件指定一些设置,以规定 NSX Advanced Load Balancer 如何处理请求-响应。

默认情况下,该配置文件将虚拟服务的端口号设置为 53,将网络协议设置为 UDP 并对每个数据包进行解析。

字段

描述

DNS 服务器返回的 IP 数

该选项指定 DNS 服务返回的 IP 地址数。默认值为 1。可以输入 0 以返回所有 IP 地址。否则,有效范围是 1-20。

TTL

DNS 服务请求者将提供的 DNS 响应视为有效的时间,以秒为单位(默认值 = 30)。有效范围是 1-86400 秒。

子网前缀长度

该长度与 DNS 客户端子网 (DNS Client Subnet, ECS) 选项一起使用。如果入站请求没有任何 ECS 并指定了前缀长度,则 NSX Advanced Load Balancer 在发送到上游服务器的请求中插入 ECS 选项。有效长度范围是 1-32。

处理 EDNS 扩展

该选项使 DNS 服务能够识别 DNS 的扩展机制 (EDNS)。将解析 EDNS 扩展并将其显示在日志中。对于 GSLB 服务,可以使用 EDNS 子网选项影响负载均衡。支持 EDNS。

否定响应 TTL

该选项指定 DNS 虚拟服务提供的 SOA(起始授权机构)(对应于该 DNS 虚拟服务拥有的权威域)记录的最小 TTL 的 TTL 值,以秒为单位。否定响应 TTL 是 0-86400 范围内的值。

(选项) 无效的 DNS 查询处理

指定在客户端请求处理导致错误时 DNS 服务是必须丢弃还是响应客户端。默认情况下,将丢弃此类请求而不提供任何响应,或者将其传送到直通池 (如果已配置)。如果设置为响应,将向客户端发送相应的响应,例如,为不存在的记录发送 NXDOMAIN 响应,为不支持的查询发送空 NOERROR 响应,等等。

使用空内容以响应 AAAA 查询

可以启用该选项,以便在只有 IPv4 记录时,让 DNS 服务使用空内容以响应 AAAA 查询。

限制来自客户端的连接速率

限制在任何单个客户端 IP 地址和该配置文件适用的 DNS 虚拟服务之间建立的连接。默认值 (=0) 相当于没有速率限制。

阈值

指定在“时间段”字段中指定的时间值内处理的最大连接、请求或数据包数(合法的值范围是 10-2500)。较高的数字将导致限制速率。如果指定大于 0 的数字,将导致时间段字段成为必填字段。

时间段

NSX Advanced Load Balancer 监控是否超过阈值的时间范围(以秒为单位)。允许的范围是 1-300。NSX Advanced Load Balancer 进行计算,并在超过入站请求速率时执行指定的操作。该速率是最大数量与时间范围的比率。

操作

从下拉列表中选择在需要限制速率时执行的三个操作之一:仅报告丢弃 SYN 数据包发送 TCP RST

保留客户端 IP 地址

启用该选项以将客户端 IP 地址传送到后端。确保您了解后端 DNS 服务器所需的内容,以及在提供了客户端 IP 地址时它们执行的操作。此选项与连接多路复用不兼容。

有效的子域

以逗号分隔的子域名允许列表。指定与该配置文件关联的 DNS 虚拟服务处理的子域;将不会处理所有其他子域。最好在 GSLB 上下文中使用该选项,其中 GSLB DNS 的唯一用途是返回与处理的全局应用程序对应的 IP 地址。有效的子域是使用“结尾为”语义配置的。

权威域名

一组以逗号分隔的域名,GSLB DNS 的 SE 可以为其提供 FQDN 到 IP 地址的权威转换。将丢弃作为这些域的子域并且在 NSX Advanced Load Balancer 中没有任何 DNS 记录的 FQDN 的查询,或者发送 NXDOMAIN 响应(取决于为无效的 DNS 查询设置的选项,如上所述)。权威域名是使用“结尾为”语义配置的。

注:
  • 子域和权威域名中的所有标签必须是完整的。例如,假设 alpha.beta.com、delta.beta.com、delta.eta.com 和 gamma.eta.com 是有效的 FQDN。如果我们希望 GSLB DNS 为 4 个 FQDN 中的每一个 FQDN 的查询返回权威响应,则可以指定两个权威域(beta.com 和 eta.com)。单独指定 eta.com 是不够的,因为“eta”并不是完整的标签,因此,它与 alpha.beta.com 或 delta.beta.com 不匹配。

  • 默认情况下,将为 System-DNS 配置文件启用 EDNS 选项。如果将 NSX Advanced Load Balancer 从旧版本升级到新版本,则不会在现有 DNS 配置文件中默认启用 EDNS。不过,如果在同一 NSX Advanced Load Balancer 控制器上创建了新的 DNS 配置文件,则默认启用 EDNS。

L4 配置文件

L4 配置文件用于任何不需要应用程序层代理的虚拟服务。

注:

使用 L4 配置文件相当于将虚拟服务的应用程序配置文件设置为 none

可以为在单个客户端 IP 地址和虚拟服务之间建立的 TCP 连接数或发送的 UDP 数据包数设置速率限制。

字段

描述

阈值

在指定的时间段内达到定义的连接 (TCP) 或数据包 (UDP) 阈值时,客户端超过速率限制。

时间段

在指定的时间段内达到定义的连接 (TCP) 或数据包 (UDP) 阈值时,客户端超过速率限制。

操作

选择在客户端超过速率限制时执行的操作。

  • 仅报告 - 在虚拟服务日志页面中生成日志。默认情况下,不执行任何操作。不过,可以将该选项与警示一起使用以生成警示操作,以便向远程目标发送通知或使用 ControlScript 执行操作。

  • 丢弃 SYN 数据包 - 对于基于 TCP 的限制,以静默方式丢弃来自客户端的 TCP SYN。NSX Advanced Load Balancer 还会生成日志。不过,在出现大量 DoS 流量期间,可能会跳过重复的日志。

  • 发送 TCP RST - 重置客户端 TCP 连接尝试。虽然发送 TCP 重置比“丢弃 SYN 数据包”选项更正常一些,但会为重置生成额外的数据包,而“丢弃 SYN 数据包”选项不发送客户端响应。NSX Advanced Load Balancer 还会生成日志。不过,在出现大量 DoS 流量期间,可能会跳过重复的日志。

Syslog 配置文件

Syslog 应用程序配置文件允许 NSX Advanced Load Balancer 对 Syslog 协议进行解码。该配置文件将虚拟服务设置为了解的 Syslog,并将网络配置文件设置为具有每个流解析的 UDP。

SIP 配置文件

SIP 配置文件允许 NSX Advanced Load Balancer 处理 SIP 应用程序的流量。该配置文件为通过 NSX Advanced Load Balancer 的 SIP 流量定义允许的事务超时。请在 16-512 秒的范围内配置该超时。