本节介绍了 NSX Advanced Load Balancer 中的 HTTP/2 支持。HTTP/2(最初命名为 HTTP/2.0)是最新的 HTTP 版本,它是在 HTTP 1.1 基础上开发的。HTTP/2 是二进制协议,而 HTTP 1.1 是文本协议。

以下是 HTTP/2 相对于 HTTP/1.1 的优势:

  • 请求和响应多路复用 - 对于 HTTP/1.1,将为多个并行请求打开多个 TCP 连接。对于 HTTP/2,可以将多个请求拆分为可以交错处理的帧;远端可以重新组装这些帧。仍然可以打开多个连接,但连接数没有 HTTP/1.1 中那么多。

  • 服务器推送 - 通过使用该功能,服务器可以发送多个资源以响应客户端请求,客户端无需为每个资源明确发送请求。这减少了等待每个请求提供资源而产生的延迟。在 HTTP/1.1 中,应用程序尝试内嵌资源以解决该问题。HTTP/2 允许客户端缓存资源,在页面之间重用资源以及与其他资源一起使用多路复用。

  • 流控制 - HTTP/2 使用窗口大小在应用程序层提供流控制,从而防止一端导致另一端不堪重负。

  • 标头压缩 - 在 HTTP/1.1 中,请求中的每个标头是以文本形式发送的。在 HTTP/2 中,标头使用 HPACK 压缩格式压缩请求和响应标头元数据,从而减少发送的标头大小。

  • 流优先级 - 由于 HTTP 消息作为帧发送,并且可能会交错处理来自不同流的帧,因此,HTTP/2 可以指定流的优先级。即,可以根据流优先级区别处理所有收到的帧。

注:

NSX Advanced Load Balancer 支持 HTTP/2 服务器推送。

用例

  • 不再需要 HTTP 1.1 使浏览器与 HTTP/2 兼容而使用的解决方法。

  • 可以将所有使用 HTTP/2 的浏览器部署在 NSX Advanced Load Balancer 上。

  • 支持应用程序使用反向代理进行 gRPC。

NSX Advanced Load Balancer 上支持的 HTTP/2 方法和模式

  • 通过 TLS 的 HTTP 或通过 SSL 的 HTTP - NSX Advanced Load Balancer 支持所有 HTTP/2 请求使用通过 TLS 的 HTTP 或通过 SSL 的 HTTP 方法。该方法使用 TLS 1.2 或更高版本。

  • 适用于 HTTP 设置的所有设置和选项也适用于启用了 HTTP/2 的虚拟服务。还支持 HTTP/2 请求使用 HTTP 功能,例如,HTTP 策略、DataScript、HTTP 超时设置,等等。

虚拟服务、池和池组的 HTTP/2 支持

前端和后端(服务器端)连接支持 HTTP/2。HTTP/2 具有以下增强功能:

  • 对于前端流量,在启用了 SSL 的端口和未启用 SSL 的端口上均支持 HTTP/2。

  • 对于后端流量,在池级别启用了 HTTP/2。

在虚拟服务和池上启用 HTTP/2

无法通过应用程序配置文件提供 HTTP/2 配置选项。可以通过虚拟服务配置访问该选项。

以下配置更改在前端和后端支持 HTTP/2:

  • 在应用程序配置文件中弃用了 http2_enabled 标记。

  • 可以将 enable_http2 标记用于虚拟服务。

  • 可以将 enable_http2 标记用于池和池组级别,以指示该池中配置的所有服务器是 HTTP/2.0 服务器。

使用 NSX Advanced Load Balancer 配置 HTTP/2

要为虚拟服务配置 HTTP2,请执行以下步骤:

  1. 导航到应用程序 > 虚拟服务

  2. 编辑现有虚拟服务或创建新的虚拟服务。

  3. 选中设置 > 服务端口下面提供的 HTTP2 复选框。

  4. 可以根据需要为 SSL 端口和非 SSL 端口启用 HTTP2



要为与虚拟服务关联的池和池组配置 HTTP2,请执行以下步骤:

  1. 导航到应用程序 > ,然后单击创建池或使用现有的池。选中服务器下面提供的启用 HTTP2 复选框,如下所示:



2. 对于池组,导航到应用程序 > 池组,然后单击创建池组或使用现有的池组。要启用 HTTP2,请选中池服务器下面提供的启用 HTTP2 复选框,如下所示:



使用 NSX Advanced Load Balancer UI 配置 HTTP/2

导航到应用程序 > 虚拟服务,使用现有虚拟服务或创建新的虚拟服务。选择设置 > 服务端口下面提供的 HTTP2。可以根据需要为 SSL 端口和非 SSL 端口启用 HTTP2。

为与虚拟服务关联的池和池组启用 HTTP2。导航到应用程序 > ,然后单击创建池或使用现有的池。选择服务器下面提供的启用 HTTP2 选项,如下所示:

要为池组启用 HTTP2,请选择池服务器下面提供的启用 HTTP2,如下所示:

使用 NSX Advanced Load Balancer CLI 配置 HTTP/2

在 configure virtual service 模式下使用 enable_http2 标记。

  • 配置虚拟服务

[admin:controller]: > configure virtualservice http2_vs
[admin:controller]: virtualservice> services index 1
[admin:controller]: virtualservice:services> enable_http2

同样,将 enable_http2 标记用于虚拟服务的关联池和池组。

  • 配置池

[admin:controller]: > configure pool v2-pool
[admin:controller]: pool> enable_http2
  • 配置池组

使用以下步骤为池组启用 HTTP/2。

[admin:controller]: > configure poolgroup v2-pg
[admin:controller]: poolgroup> enable_http2
  • 为现有池组启用 HTTP/2 - 要为现有池组启用 HTTP/2,请执行以下操作:

    • 从池组中移除所有池成员。

    • 使用上述步骤为所有池配置 enable_http2

    • 为池组配置 enable_http2

    • 将所有池添加到池组中。

正在检查状态

show virtualservice <virtual service name> 命令显示标记值设置为 true,如以下代码输出所示:

[admin:controller]: > show virtualservice http2-vs
+------------------------------------+-----------------------------------------------------+
| Field                              | Value                                               |
+------------------------------------+-----------------------------------------------------+
| uuid                               | virtualservice-2d67f7ed-eeee-4b81-af01-78ded84f4352 |
| name                               | http2-vs                                            |
| enabled                            | True                                                |
| services[1]                        |                                                     |
|   port                             | 80                                                  |
|   enable_ssl                       | False                                               |
|   port_range_end                   | 80                                                  |
|   enable_http2                     | True                                                |<----
| services[2]                        |                                                     |
|   port                             | 443                                                 |
|   enable_ssl                       | True                                                |
|   port_range_end                   | 443                                                 |<----
|   eable_http2                      | True                                                |
| application_profile_ref            | applicationprofile-22                               |
| network_profile_ref                | System-TCP-Proxy                                    |
| pool_ref                           | v2-pool                                             |
| se_group_ref                       | Default-Group                                       |
| http_policies[1]                   |                                                     |
|   index                            | 11                                                  |
|   http_policy_set_ref              | http_request_policy_1                               |
+------------------------------------+-----------------------------------------------------+
[admin:controller]: > show pool v2-pool
+---------------------------------------+------------------------------------------------+
| Field                                 | Value                                          |
+---------------------------------------+------------------------------------------------+
| uuid                                  | pool-5f38c27f-ff10-48e1-88e2-a9a2b39ad198      |
| name                                  | v2-pool                                        |
| default_server_port                   | 80                                             |
| graceful_disable_timeout              | 1 min                                          |
| connection_ramp_duration              | 10 min                                         |
| max_concurrent_connections_per_server | 0                                              |
| servers[1]                            |                                                |
|   ip                                  | 10.90.103.72                                   |
|   port                                | 80                                             |
|   hostname                            | 10.90.103.72                                   |
|   enabled                             | True                                           |
|   ratio                               | 1                                              |
|   verify_network                      | False                                          |
|   resolve_server_by_dns               | False                                          |
|   static                              | False                                          |
|   rewrite_host_header                 | False                                          |
| lb_algorithm                          | LB_ALGORITHM_LEAST_CONNECTIONS                 |
| lb_algorithm_hash                     | LB_ALGORITHM_CONSISTENT_HASH_SOURCE_IP_ADDRESS |
| inline_health_monitor                 | True                                           |
| use_service_port                      | False                                          |
| capacity_estimation                   | False                                          |
| capacity_estimation_ttfb_thresh       | 0 milliseconds                                 |
| vrf_ref                               | global                                         |
| fewest_tasks_feedback_delay           | 10 sec                                         |
| enabled                               | True                                           |
| request_queue_enabled                 | False                                          |
| request_queue_depth                   | 128                                            |
| host_check_enabled                    | False                                          |
| sni_enabled                           | True                                           |
| rewrite_host_header_to_sni            | False                                          |
| rewrite_host_header_to_server_name    | False                                          |
| lb_algorithm_core_nonaffinity         | 2                                              |
| lookup_server_by_name                 | False                                          |
| analytics_profile_ref                 | System-Analytics-Profile                       |
| tenant_ref                            | admin                                          |
| cloud_ref                             | Default-Cloud                                  |
| server_timeout                        | 0 milliseconds                                 |
| delete_server_on_dns_refresh          | True                                           |
| enable_http2                                 | True                                           | <-----
+---------------------------------------+------------------------------------------------+

限制

  • HTTP/2 池不支持缓存。

  • 不支持上游 HTTP/2 连接多路复用。

  • 未提供 HTTP/2 运行状况监控器支持。如果后端服务器仅支持 HTTP/2,则 HTTP(S) 运行状况监控器不适用于该池。只能为该池配置 TCP 或 PING 运行状况监控器。

  • 如果后端服务器启用了SSL 并同时支持 HTTP/1 和 HTTP/2,则必须为 HTTPS 运行状况监控器配置自己的属性。

  • 对于未启用 SSL 的端口,不支持从 HTTP/1.1 升级到 HTTP/2.0。

  • 客户端必须知道非 SSL 端口只能支持 HTTP/2。

  • 后端池假设侦听配置的端口的服务器仅支持 HTTP/2,而不会发送从 HTTP1.1 到 HTTP/2.0 的升级。

  • 对于池组,池组和所有关联池之间的 HTTP 版本必须匹配。

  • 不会同时支持一端(前端)的 HTTP/1.1 分块 Transfer-Encoding 机制和另一端(后端)的 HTTP/2 分块机制。如果存在分块,即,如果需要使用流模式或部分缓冲模式,并且一端为块,另一端为 V2 块,则不支持该方法。

升级

如果在应用程序配置文件中为侦听端口 80 和 443 的虚拟服务启用了 HTTP/2,在升级后,将在端口 443 上为虚拟服务自动启用 HTTP/2。不会在端口 80(未启用 SSL 的端口)上启用 HTTP/2。

HTTP/2 配置文件的其他配置选项

HTTP/2 配置字段已移到 http_profile 下面名为 http2_profile 的子字段。以下字段已添加到 http2_profile 中:

  • max_http2_requests_per_connection:该值控制可以通过客户端 HTTP/2 连接发送的最大请求数。如果该值设置为 0,则可以通过 HTTP/2 客户端连接发送不限数量的请求。

  • max_http2_header_field:该字段控制压缩的请求标头字段的最大大小(以字节为单位)。该限制同样适用于请求标头的名称和值,范围是 1-8192 字节。默认值为 4096 字节。

  • http2_initial_window_size:该字段控制 HTTP/2 流中的初始流控制的窗口大小。该字段的值范围是 64-32768 KB。默认值为 64 KB。

  • max_http2_control_frames_per_connection:该字段控制客户端可以通过 HTTP/2 连接发送的控制帧数。该字段的值范围是 0-10000,默认值为 1000。可以将该值设置为零,以允许在客户端 HTTP/2 连接上发送不限数量的控制帧。

  • max_http2_queued_frames_to_client_per_connection:该字段控制可以在任何给定时间排队等待通过客户端 HTTP/2 连接发送的帧数。该字段的值范围是 0-10000,默认值为 1000。该参数的值为零表示,可以在客户端 HTTP/2 连接上排队不限数量的帧。

  • max_http2_empty_data_frames_per_connection:该字段控制客户端可以通过 HTTP/2 连接发送的空数据帧数。该字段的值范围是 0-10000,默认值为 1000。该参数的值为零表示,可以通过客户端 HTTP/2 连接发送不限数量的空数据帧。

  • max_http2_concurrent_streams_per_connection:该字段用于配置客户端 HTTP/2 连接上的最大并发流数。该字段的值范围是 1-256,默认值为 128。

以下 CLI 片段显示上述选项的配置示例。登录到 NSX Advanced Load Balancer CLI。使用 applicationprofile 模式和 http2_profile 选项更改上述参数的值。

[admin:controller]: > configure applicationprofile ap-1
Updating an existing object. Currently, the object is:
+------------------------------------------------------+---------------------------------------------------------+
| Field                                                | Value                                                   |
+------------------------------------------------------+---------------------------------------------------------+
| uuid                                                 | applicationprofile-1d264f41-d19c-445e-a4df-740dca5957f0 |
| name                                                 | ap-1                                                    |
| type                                                 | APPLICATION_PROFILE_TYPE_HTTP                           |
| http_profile                                         |                                                         |
|   connection_multiplexing_enabled                    | True                                                    |
|   xff_enabled                                        | True                                                    |
|   xff_alternate_name                                 | X-Forwarded-For                                         |
|   hsts_enabled                                       | False                                                   |
|   hsts_max_age                                       | 365                                                     |
|   secure_cookie_enabled                              | False                                                   |
|   httponly_enabled                                   | False                                                   |
|   http_to_https                                      | False                                                   |
|   server_side_redirect_to_https                      | False                                                   |
|   x_forwarded_proto_enabled                          | False                                                   |
|   post_accept_timeout                                | 30000 milliseconds                                      |
|   client_header_timeout                              | 10000 milliseconds                                      |
|   client_body_timeout                                | 30000 milliseconds                                      |
|   keepalive_timeout                                  | 30000 milliseconds                                      |
|   client_max_header_size                             | 12 kb                                                   |
|   client_max_request_size                            | 48 kb                                                   |
|   client_max_body_size                               | 0 kb                                                    |
|   max_rps_unknown_uri                                | 0                                                       |
|   max_rps_cip                                        | 0                                                       |
|   max_rps_uri                                        | 0                                                       |
|   max_rps_cip_uri                                    | 0                                                       |
|   ssl_client_certificate_mode                        | SSL_CLIENT_CERTIFICATE_NONE                             |
|   websockets_enabled                                 | True                                                    |
|   max_rps_unknown_cip                                | 0                                                       |
|   max_bad_rps_cip                                    | 0                                                       |
|   max_bad_rps_uri                                    | 0                                                       |
|   max_bad_rps_cip_uri                                | 0                                                       |
|   keepalive_header                                   | False                                                   |
|   use_app_keepalive_timeout                          | False                                                   |
|   allow_dots_in_header_name                          | False                                                   |
|   disable_keepalive_posts_msie6                      | True                                                    |
|   enable_request_body_buffering                      | False                                                   |
|   enable_fire_and_forget                             | False                                                   |
|   max_response_headers_size                          | 48 kb                                                   |
|   respond_with_100_continue                          | True                                                    |
|   hsts_subdomains_enabled                            | True                                                    |
|   enable_request_body_metrics                        | False                                                   |
|   fwd_close_hdr_for_bound_connections                | True                                                    |
|   max_keepalive_requests                             | 100                                                     |
|   disable_sni_hostname_check                         | False                                                   |
|   reset_conn_http_on_ssl_port                        | False                                                   |
|   http_upstream_buffer_size                          | 0 kb                                                    |
|   enable_chunk_merge                                 | True                                                    |
|   http2_profile                                      |                                                         |
|     max_http2_control_frames_per_connection          | 1000                                                    |
|     max_http2_queued_frames_to_client_per_connection | 1000                                                    |
|     max_http2_empty_data_frames_per_connection       | 1000                                                    |
|     max_http2_concurrent_streams_per_connection      | 128                                                     |
|     max_http2_requests_per_connection                | 1000                                                    |
|     max_http2_header_field_size                      | 4096 bytes                                              |
|     http2_initial_window_size                        | 64 kb                                                   |
| preserve_client_ip                                   | False                                                   |
| preserve_client_port                                 | False                                                   |
| preserve_dest_ip_port                                | False                                                   |
| tenant_ref                                           | admin                                                   |
+------------------------------------------------------+---------------------------------------------------------+
[admin:controller]: applicationprofile> http_profile
[admin:controller]: applicationprofile:http_profile> http2_profile
[admin:controller]: applicationprofile:http_profile:http2_profile> max_http2_control_frames_per_connection 2000
Overwriting the previously entered value for max_http2_control_frames_per_connection
[admin:controller]: applicationprofile:http_profile:http2_profile> max_http2_queued_frames_per_connection 2000
No command or arguments found in 'max_http2_queued_frames_per_connection 2000'.
[admin:controller]: applicationprofile:http_profile:http2_profile> max_http2_queued_frames_to_client_per_connection 2000
Overwriting the previously entered value for max_http2_queued_frames_to_client_per_connection
[admin:controller]: applicationprofile:http_profile:http2_profile> max_http2_concurrent_streams_per_connection 256
Overwriting the previously entered value for max_http2_concurrent_streams_per_connection
[admin:controller]: applicationprofile:http_profile:http2_profile> max_http2_requests_per_connection 2500
Overwriting the previously entered value for max_http2_requests_per_connection
[admin:controller]: applicationprofile:http_profile:http2_profile> http2_initial_window_size 256
Overwriting the previously entered value for http2_initial_window_size
[admin:controller]: applicationprofile:http_profile:http2_profile> max_http2_header_field_size 8192
Overwriting the previously entered value for max_http2_header_field_size
[admin:controller]: applicationprofile:http_profile:http2_profile> save
[admin:controller]: applicationprofile:http_profile> save
[admin:controller]: applicationprofile> save
+------------------------------------------------------+---------------------------------------------------------+
| Field                                                | Value                                                   |
+------------------------------------------------------+---------------------------------------------------------+
| uuid                                                 | applicationprofile-1d264f41-d19c-445e-a4df-740dca5957f0 |
| name                                                 | ap-1                                                    |
| type                                                 | APPLICATION_PROFILE_TYPE_HTTP                           |
| http_profile                                         |                                                         |
|   connection_multiplexing_enabled                    | True                                                    |
|   xff_enabled                                        | True                                                    |
|   xff_alternate_name                                 | X-Forwarded-For                                         |
|   hsts_enabled                                       | False                                                   |
|   hsts_max_age                                       | 365                                                     |
|   secure_cookie_enabled                              | False                                                   |
|   httponly_enabled                                   | False                                                   |
|   http_to_https                                      | False                                                   |
|   server_side_redirect_to_https                      | False                                                   |
|   x_forwarded_proto_enabled                          | False                                                   |
|   post_accept_timeout                                | 30000 milliseconds                                      |
|   client_header_timeout                              | 10000 milliseconds                                      |
|   client_body_timeout                                | 30000 milliseconds                                      |
|   keepalive_timeout                                  | 30000 milliseconds                                      |
|   client_max_header_size                             | 12 kb                                                   |
|   client_max_request_size                            | 48 kb                                                   |
|   client_max_body_size                               | 0 kb                                                    |
|   max_rps_unknown_uri                                | 0                                                       |
|   max_rps_cip                                        | 0                                                       |
|   max_rps_uri                                        | 0                                                       |
|   max_rps_cip_uri                                    | 0                                                       |
|   ssl_client_certificate_mode                        | SSL_CLIENT_CERTIFICATE_NONE                             |
|   websockets_enabled                                 | True                                                    |
|   max_rps_unknown_cip                                | 0                                                       |
|   max_bad_rps_cip                                    | 0                                                       |
|   max_bad_rps_uri                                    | 0                                                       |
|   max_bad_rps_cip_uri                                | 0                                                       |
|   keepalive_header                                   | False                                                   |
|   use_app_keepalive_timeout                          | False                                                   |
|   allow_dots_in_header_name                          | False                                                   |
|   disable_keepalive_posts_msie6                      | True                                                    |
|   enable_request_body_buffering                      | False                                                   |
|   enable_fire_and_forget                             | False                                                   |
|   max_response_headers_size                          | 48 kb                                                   |
|   respond_with_100_continue                          | True                                                    |
|   hsts_subdomains_enabled                            | True                                                    |
|   enable_request_body_metrics                        | False                                                   |
|   fwd_close_hdr_for_bound_connections                | True                                                    |
|   max_keepalive_requests                             | 100                                                     |
|   disable_sni_hostname_check                         | False                                                   |
|   reset_conn_http_on_ssl_port                        | False                                                   |
|   http_upstream_buffer_size                          | 0 kb                                                    |
|   enable_chunk_merge                                 | True                                                    |
|   http2_profile                                      |                                                         |
|     max_http2_control_frames_per_connection          | 2000                                                    |
|     max_http2_queued_frames_to_client_per_connection | 2000                                                    |
|     max_http2_empty_data_frames_per_connection       | 1000                                                    |
|     max_http2_concurrent_streams_per_connection      | 256                                                     |
|     max_http2_requests_per_connection                | 2500                                                    |
|     max_http2_header_field_size                      | 8192 bytes                                              |
|     http2_initial_window_size                        | 256 kb                                                  |
| preserve_client_ip                                   | False                                                   |
| preserve_client_port                                 | False                                                   |
| preserve_dest_ip_port                                | False                                                   |
| tenant_ref                                           | admin                                                   |
+------------------------------------------------------+---------------------------------------------------------+
[admin:controller]: >
[admin:controller]: > show applicationprofile ap-1
+------------------------------------------------------+---------------------------------------------------------+
| Field                                                | Value                                                   |
+------------------------------------------------------+---------------------------------------------------------+
| uuid                                                 | applicationprofile-1d264f41-d19c-445e-a4df-740dca5957f0 |
| name                                                 | ap-1                                                    |
| type                                                 | APPLICATION_PROFILE_TYPE_HTTP                           |
| http_profile                                         |                                                         |
|   connection_multiplexing_enabled                    | True                                                    |
|   xff_enabled                                        | True                                                    |
|   xff_alternate_name                                 | X-Forwarded-For                                         |
|   hsts_enabled                                       | False                                                   |
|   hsts_max_age                                       | 365                                                     |
|   secure_cookie_enabled                              | False                                                   |
|   httponly_enabled                                   | False                                                   |
|   http_to_https                                      | False                                                   |
|   server_side_redirect_to_https                      | False                                                   |
|   x_forwarded_proto_enabled                          | False                                                   |
|   post_accept_timeout                                | 30000 milliseconds                                      |
|   client_header_timeout                              | 10000 milliseconds                                      |
|   client_body_timeout                                | 30000 milliseconds                                      |
|   keepalive_timeout                                  | 30000 milliseconds                                      |
|   client_max_header_size                             | 12 kb                                                   |
|   client_max_request_size                            | 48 kb                                                   |
|   client_max_body_size                               | 0 kb                                                    |
|   max_rps_unknown_uri                                | 0                                                       |
|   max_rps_cip                                        | 0                                                       |
|   max_rps_uri                                        | 0                                                       |
|   max_rps_cip_uri                                    | 0                                                       |
|   ssl_client_certificate_mode                        | SSL_CLIENT_CERTIFICATE_NONE                             |
|   websockets_enabled                                 | True                                                    |
|   max_rps_unknown_cip                                | 0                                                       |
|   max_bad_rps_cip                                    | 0                                                       |
|   max_bad_rps_uri                                    | 0                                                       |
|   max_bad_rps_cip_uri                                | 0                                                       |
|   keepalive_header                                   | False                                                   |
|   use_app_keepalive_timeout                          | False                                                   |
|   allow_dots_in_header_name                          | False                                                   |
|   disable_keepalive_posts_msie6                      | True                                                    |
|   enable_request_body_buffering                      | False                                                   |
|   enable_fire_and_forget                             | False                                                   |
|   max_response_headers_size                          | 48 kb                                                   |
|   respond_with_100_continue                          | True                                                    |
|   hsts_subdomains_enabled                            | True                                                    |
|   enable_request_body_metrics                        | False                                                   |
|   fwd_close_hdr_for_bound_connections                | True                                                    |
|   max_keepalive_requests                             | 100                                                     |
|   disable_sni_hostname_check                         | False                                                   |
|   reset_conn_http_on_ssl_port                        | False                                                   |
|   http_upstream_buffer_size                          | 0 kb                                                    |
|   enable_chunk_merge                                 | True                                                    |
|   http2_profile                                      |                                                         |
|     max_http2_control_frames_per_connection          | 1000                                                    |
|     max_http2_queued_frames_to_client_per_connection | 1000                                                    |
|     max_http2_empty_data_frames_per_connection       | 1000                                                    |
|     max_http2_concurrent_streams_per_connection      | 128                                                     |
|     max_http2_requests_per_connection                | 1000                                                    |
|     max_http2_header_field_size                      | 4096 bytes                                              |
|     http2_initial_window_size                        | 64 kb                                                   |
| preserve_client_ip                                   | False                                                   |
| preserve_client_port                                 | False                                                   |
| preserve_dest_ip_port                                | False                                                   |
| tenant_ref                                           | admin                                                   |
+------------------------------------------------------+---------------------------------------------------------+

日志

可以使用以下模式之一检查日志:

  • 使用 NSX Advanced Load Balancer UI

  • 使用 NSX Advanced Load Balancer CLI

使用 UI 检查日志

NSX Advanced Load Balancer 的应用程序日志将 HTTP/2.0 显示为请求中的 HTTP 版本。导航到应用程序 > 虚拟服务,选择所需的虚拟服务,然后导航到日志选项卡以检查日志。



可以在重要日志下面检查与 HTTP/2 请求和响应相关的错误。

使用 CLI 检查日志

以下是适用于 HTTP/2 功能的计数器,可以在故障排除期间使用这些计数器。

  • 请求处理错误

  • 响应代码(2xx、3xx、4xx 和 5xx)

  • 协议错误

  • 流量控制错误

  • 帧大小错误

  • 压缩错误

  • 拒绝的流错误

可以使用 show virtualservice <virtual service name> detail 命令检查 HTTP/2 方法的可用计数器。

[admin:controller]: > show virtualservice <virtual service name> detail

|     cache_bytes                         | 0                                       |
|     http2_requests_handled              | 2                                       |
|     http2_response_2xx                  | 2                                       |
|     http2_response_3xx                  | 0                                       |
|     http2_response_4xx                  | 0                                       |
|     http2_response_5xx                  | 0                                       |
|     http2_protocol_errors               | 0                                       |
|     http2_flow_control_errors           | 0                                       |
|     http2_frame_size_errors             | 0                                       |
|     http2_compression_errors            | 0                                       |
|     http2_refused_stream_errors         | 0                                       |
|     http2_enhance_your_calm             | 0                                       |
|     http2_miscellaneous_errors          | 0

可以使用 show pool <pool name> detail 命令在池状态中检查与 HTTP/2 相关的错误。

[admin:controller]: > show pool v2-pool detail  | grep http2 |   http2_protocol_header_errors      | 0                                               | |   http2_protocol_other_errors       | 0                                               | |   http2_flow_control_errors         | 0                                               | |   http2_frame_size_errors           | 0                                               | |   http2_compression_errors          | 0                                               | |   http2_refused_stream_errors       | 0                                               | |   http2_enhance_your_calm           | 0                                               | |   http2_misc_errors                 | 0                                               | [admin:controller]: 

HPACK 动态表

除了静态表以外,HPACK 还具有一个连接级别动态表,从位置 62(静态表之后)开始,一直到 SETTINGS 帧中的 SETTINGS_HEADER_TABLE_SIZE 值定义的最大表大小。如果未明确定义,则使用默认值(4096 个八位字节)。在达到最大表大小时,将逐出最早的条目。为了简化该过程,在写入表时,每个条目将会递增。

标头的表条目位置不是静态的。在当前和将来请求在表中添加新标头时,它会不断增加。TCP 保证该顺序,因此,在 HTTP/2 中,动态表对于每个 TCP 连接是唯一的。

有关 HPACK 标头类型的完整信息,请参见 RFC7541

注:
  • 在客户端已支持动态 HPACK 表。从 22.1.1 版本开始,NSX Advanced Load Balancer 添加了服务器端支持。

  • 在服务器端,在 NSX Advanced Load Balancer 尝试创建 HTTP2 连接时,它检查是否在虚拟服务上启用了缓存。如果启用了缓存,它在 SETTINGS 帧中将 SETTINGS_HEADER_TABLE_SIZE 值设置为零以禁用动态 HPACK 表。如果未启用缓存,则 NSX Advanced Load Balancer 将 SETTINGS_HEADER_TABLE_SIZE 设置为 4k。无法配置 SETTINGS_HEADER_TABLE_SIZE