HTTP 压缩
对于具有可压缩内容的网站,HTTP 压缩功能通过压缩从服务器发送到支持压缩的浏览器的 HTTP 响应来实现无损压缩,以缓解延迟、长下载时间和其他网络性能问题。您可以通过将计算密集型压缩任务从服务器卸载到 NetScaler 设备来提高服务器性能。
下表介绍了 HTTP 压缩功能的功能:
| 功能 | 说明 |
|---|---|
| Compression Ratio(压缩比) | 压缩率取决于响应中的文件类型,但总是很重要,这显著减少了通过网络传输的数据量。 |
| 浏览器感知 | NetScaler 仅向感知压缩的浏览器提供压缩数据,从而缩短了客户端和服务器之间的事务时间。大多数现代 Web 浏览器都支持 HTTP 压缩。 |
| 压缩阻塞 | 您可以通过应用内置操作来定义内容过滤器以有选择地阻止压缩。 |
| 压缩缓存 | 启用集成缓存功能后,对相同内容的后续请求将从本地缓存中提供,从而减少往返服务器的次数并缩短事务处理时间。 |
| HTTPS 支持 | 压缩对 SSL 连接很有用,因为它可以减少必须在服务器上或 NetScaler 设备上加密并由客户端解密的内容量。 |
| 智能响应过滤 | NetScaler 压缩引擎根据定义的压缩参数智能地筛选服务器响应。例如,压缩引擎会检测零内容长度响应和压缩响应,并且不会压缩它们。检测压缩响应使源站点能够将基于服务器的压缩与 NetScaler 压缩功能结合使用。 |
| 压缩切换 | NetScaler 设备将来自压缩感知客户端的请求透明地定向到具有压缩能力的服务器,以便压缩对这些客户端的响应,并且对其他客户端的响应不会因压缩处理而延迟。 |
HTTP 压缩的工作原理
NetScaler 可以压缩静态和动态生成的数据。它应用 GZIP 或 DEFLATE 压缩算法从服务器响应中删除无关和重复的信息,并以更加简洁和有效的格式表示原始信息。这些压缩后的数据将发送到客户端的浏览器,并根据浏览器支持的一种或多种算法(GZIP 或 DEFLATE)进行解压缩。
NetScaler 压缩以不同的方式处理静态和动态内容。
- 静态文件只压缩一次,压缩副本存储在本地内存中。后续客户端对缓存文件的请求将从该内存中提供服务。
- 每当客户端请求动态页面时,都会动态创建动态页面。
当客户端向服务器发送请求时:
- 客户端请求到达 NetScaler。ADC 检查标头并存储有关浏览器支持哪种压缩(如果有)的信息。
- ADC 将请求转发到服务器并接收响应。
- NetScaler 压缩引擎通过将服务器响应与策略进行匹配来检查服务器响应的可压缩性。
- 如果响应与压缩操作关联的策略匹配,并且客户端浏览器支持操作指定的压缩算法,NetScaler 将应用该算法并将压缩的响应发送到客户端浏览器。
- 客户端应用支持的压缩算法来解压缩响应。
配置 HTTP 压缩
默认情况下,NetScaler 上的压缩处于禁用状态。在配置该功能之前,必须启用该功能。如果启用该功能,ADC 将压缩压缩策略指定的服务器请求。
使用 CLI 启用 HTTP 压缩
只能为 HTTP 和 SSL 服务启用压缩。您可以在全局范围内启用它,以便它适用于所有 HTTP 和 SSL 服务,也可以仅针对特定服务启用它。
在命令提示符下,输入以下命令之一以启用全局压缩或为特定服务启用压缩:
-
enable ns feature cmp或 set service \<name\> -CMP YES
使用 GUI 配置压缩
执行以下操作之一:
要全局启用压缩,请导航到“系统”>“设置”,单击“配置基本功能”,然后选择“HTTP 压缩”。
要为特定服务启用压缩,请导航到流量管理 > 负载平衡 > 服务,选择该服务,然后单击“编辑”。在 设置 组中,单击铅笔图标并启用 压缩。
配置压缩操作
压缩操作指定当请求或响应与操作关联的策略中的规则(表达式)匹配时要执行的操作。例如,您可以配置一个压缩策略来标识将发送到特定服务器的请求,然后将该策略与压缩服务器响应的操作相关联。
有四种内置的压缩操作:
- COMPRESS:使用 GZIP 算法压缩来自支持 GZIP 或同时支持 GZIP 和 DEFLATE 的浏览器中的数据。使用 DEFLATE 算法压缩来自仅支持 DEFLATE 算法的浏览器中的数据。如果浏览器不支持任何一种算法,则不会压缩浏览器的响应。
- NOCOMPRESS:不压缩数据。
- GZIP:使用 GZIP 算法压缩支持 GZIP 压缩的浏览器的数据。如果浏览器不支持 GZIP 算法,则不会压缩浏览器的响应。
- DEFLATE:使用 DEFLATE 算法为支持 DEFLATE 算法的浏览器压缩数据。如果浏览器不支持 DEFLATE 算法,则不会压缩浏览器的响应。创建操作后,您可以将该操作与一个或多个压缩策略相关联。
在命令提示符下,输入以下命令以创建压缩操作:
add cmp action <name> <cmpType> [-addVaryHeader <addVaryHeader> -varyHeaderValue<string>]
使用 CLI 配置压缩策略
压缩策略包含一条规则,该规则是一个逻辑表达式,使 NetScaler 设备能够识别应压缩的流量。
NetScaler 从服务器接收 HTTP 响应时,它会评估内置压缩策略和任何自定义压缩策略,以确定是否压缩响应,如果是压缩,则应用的压缩类型。分配给策略的优先级决定了策略与请求匹配的顺序。
在命令提示符下,输入以下命令以创建压缩策略:
add cmp policy <name> -rule <expression> -resAction <string>
使用 GUI 创建压缩操作
导航到 优化 > HTTP 压缩 > 操作 ,单击 添加 ,然后创建压缩操作以指定要对 HTTP 响应执行的压缩类型。
配置压缩策略
压缩策略包含一条规则,该规则是一个逻辑表达式,使 NetScaler 设备能够识别应压缩的流量。
NetScaler 从服务器接收 HTTP 响应时,它会评估内置压缩策略和任何自定义压缩策略,以确定是否压缩响应,如果是压缩,则应用的压缩类型。分配给策略的优先级决定了策略与请求匹配的顺序。
下表列出了内置的 HTTP 压缩策略。启用压缩功能时,这些策略将全局激活。
| 内置策略 | 说明 |
|---|---|
| ns_adv_nocmp_mozilla_47 | 阻止从 Mozilla 4.7 浏览器发送请求时 CSS 文件的压缩。 |
| ns_adv_cmp_mscss | 从 Microsoft Internet 资源管理器浏览器发送请求时压缩 CSS 文件。 |
| ns_adv_cmp_msapp | 压缩由以下应用程序生成的文件:Microsoft Office Word、Microsoft Office Excel、Microsoft Office PowerPoint。 |
| ns_adv_cmp_content_type | 当响应包含内容类型标头并包含文本时,压缩数据。 |
| ns_adv_nocmp_xml_ie | 阻止从 Microsoft Internet 资源管理器浏览器发送请求时进行压缩,响应包含内容类型标头并包含文本或 xml。 |
绑定压缩策略
要使压缩策略生效,必须将其全局绑定,以使其应用于流经 NetScaler 的所有流量或特定虚拟服务器,以便该策略仅适用于目标为该虚拟服务器 VIP 地址的请求。
绑定策略时,可以为其分配优先级。优先级决定了您定义的策略的评估顺序。可以将优先级设置为任何正整数。
使用 CLI 绑定压缩策略
在命令提示符下,输入以下命令之一以将压缩策略全局绑定或绑定到特定虚拟服务器:
bind cmp global <policyName> [-priority <positive_integer>] [-gotoPriorityExpression <expression>] [-type <type>] [-invoke (<labelType> <labelName>) ]bind lb vserver <vserverName> -policyName <policyName> -type (Request|Response) -priority <positive_integer> )
对要绑定压缩策略的每个虚拟服务器重复此命令。
使用 GUI 绑定压缩策略
执行以下操作之一:
在全局级别导航到 优化 > HTTP 压缩 > 策略,单击 策略管理器,然后通过指定相关的绑定点和连接类型(请求/响应)来绑定所需的策略。
在虚拟服务器级别
对于负载平衡虚拟服务器,导航到 流量管理 > 负载平衡 > 虚拟服务器,选择所需的虚拟服务器,单击 策略,然后绑定相关策略。
对于内容切换虚拟服务器,导航到 流量管理 > 内容切换 > 虚拟服务器,选择所需的虚拟服务器,单击 策略,然后绑定相关策略。
设置全局压缩参数以获得最佳性能
许多用户接受全局压缩参数的默认值,但是您可以通过自定义这些设置来提供更有效的压缩。
注意: 配置全局压缩参数后,不必重新启动设备。它们会立即应用于新的流程。
下表介绍了可以在 NetScaler 上设置的压缩参数。
| 压缩参数 | 说明 |
|---|---|
| 量子大小 | 为累积服务器响应而维护的缓冲区的大小(以 KB 为单位)。当缓冲区大小超过此值时,响应将被压缩。例如,如果将量子大小设置为 50 KB,NetScaler 会在缓冲区大小超过 50 KB 时压缩缓冲区的内容。最小值:1。最大值:63488。默认值:57344。 |
| 压缩级别 | 应用于服务器响应的压缩级别。可能的值:最佳速度、最佳压缩、最佳。 |
| 最小 HTTP 响应大小 | 压缩的 HTTP 响应的最小大小(以字节为单位)。发送小于此参数指定值的响应时不会进行压缩。 |
| 绕过 CPU 使用率的压缩 | NetScaler CPU 使用率(以百分比表示)等于或高于该百分比,未进行任何压缩。默认值:100。 |
| 允许服务器端压缩 | 允许服务器将压缩数据发送到 NetScaler。 |
| 压缩推送数据包 | 收到带有 TCP PUSH 标志的数据包后,立即压缩累积的数据包,而无需等待量子缓冲区填满。 |
| 外部缓存 | 发出私有响应指令,指示响应消息面向单个用户,不得由共享或代理缓存进行缓存。 |
使用 GUI 配置 HTTP 压缩
执行以下操作之一:
- 要全局启用压缩,请导航到“系统”>“设置”,单击“配置基本功能”,然后选择“HTTP 压缩”。
- 要为特定服务启用压缩,请导航到流量管理 > 负载平衡 > 服务,选择该服务,然后单击编辑。
- 在 设置 组中,单击铅笔图标并启用 压缩。
使用 GUI 创建压缩操作
导航到 优化 > HTTP 压缩 > 操作 ,单击 添加 ,然后创建压缩操作以指定要对 HTTP 响应执行的压缩类型
使用 GUI 创建压缩策略
导航到“优化”>“HTTP 压缩”>“策略”,单击“添加”,然后通过指定要运行的条件和相应操作来创建压缩策略。
评估压缩配置
您可以在控制板实用程序或 SNMP 监视器中查看压缩统计信息。控制板实用程序以表格和图形格式显示摘要和详细统计信息。
或者,您还可以查看压缩策略的统计信息,包括策略计数器在基于策略的压缩期间增加的请求数。
注意
- 有关统计数据和图表的更多信息,请参阅 NetScaler 设备上的控制板帮助。
- 有关 SNMP 的更多信息,请参阅 SNMP 主题。
使用 CLI 查看压缩统计信息
在命令提示符下,输入以下命令以显示压缩统计信息:
- 显示压缩统计信息摘要。
stat cmp
注意 stat cmp policy 命令仅显示高级策略压缩策略的统计信息。
2. 显示压缩策略命中次数和详细信息 show cmp policy \<name\>
3. 显示详细的压缩统计信息 stat cmp -detail
使用控制板查看压缩统计信息:
在控制板实用程序中,可以显示以下类型的压缩统计信息:
- 选择压缩以显示压缩统计信息的摘要。
- 要按协议类型显示详细的压缩统计信息,请单击 Details
- 要显示压缩功能处理的请求速率,请单击图形视图选项卡。
使用 SNMP 查看压缩统计信息
您可以使用 SNMP 网络管理应用程序查看以下压缩统计信息。
- 压缩请求数(OID:1.3.6.1.4.1.5951.4.1.1.50.1)
- 传输的压缩字节数(OID:1.3.6.1.4.1.5951.4.1.1.50.2)
- 收到的可压缩字节数(OID:1.3.6.1.4.1.5951.4.1.1.50.3)
- 传输的可压缩数据包的数量(OID:1.3.6.1.4.1.5951.4.1.1.50.4)
- 收到的可压缩数据包的数量(OID:1.3.6.1.4.1.5951.4.1.1.50.4)
- 收到的可压缩数据与传输压缩数据的比率(OID:1.3.6.1.4.1.5951.4.1.1.50.6)
- 收到的总数据与传输数据总数的比率 (OID: 1.3.6.1.4.1.5951.4.1.1.50.7)
使用 GUI 查看更多压缩统计信息
- 要显示 HTTP 压缩统计信息,请执行以下操作:
导航到 优化 > HTTP 压缩 ,然后单击 统计信息。
- 显示压缩策略的统计信息。
导航到 优化 > HTTP 压缩 > 策略 > 选择策略,然后单击 统计信息。
-
显示压缩策略标签的统计信息
-
导航到 优化 > HTTP 压缩 > 策略 > 选择策略标签,然后单击 统计信息。
卸载 HTTP 压缩
在服务器上执行压缩会影响服务器的性能。放置在 Web 服务器前面并配置为 HTTP 压缩的 NetScaler 可以减轻静态和动态内容的压缩,从而节省服务器 CPU 周期和资源。
您可以通过以下两种方式之一从 Web 服务器卸载压缩:
在 Web 服务器上禁用压缩,在全局级别启用 NetScaler 压缩功能,并配置用于压缩的服务。
在 Web 服务器上启用压缩功能,然后将 NetScaler 设备配置为从所有 HTTP 客户端请求中删除“接受编码”标头。然后,服务器会发送未压缩的响应。NetScaler 会在将服务器响应发送到客户端之前压缩服务器响应。
注意 如果服务器自动压缩所有响应,则第二个选项不起作用。NetScaler 不会尝试压缩已经压缩的响应。
Servercmp 参数使 NetScaler 设备能够处理卸载 HTTP 压缩。默认情况下,此参数设置为 ON,以便服务器将压缩数据发送到 NetScaler 设备。要卸载 HTTP 压缩,您需要将 servercmp 参数设置为 OFF。在命令提示符处,输入以下命令:
set service <service name> -CMP YES
对要为其启用压缩的每个服务重复此命令。
show service <service name>
对每个服务重复此命令,以验证是否启用了压缩。
Save config
set cmp parameter –serverCmp OFF
注意:
启用
Servercmp参数后,如果设备收到来自服务器的压缩响应,则设备不会进一步压缩数据。相反,它将压缩的响应转发给客户端。