搜索

17.8. 配置过滤器

download PDF

过滤器允许修改请求的某些方面,并且可以使用 predicates 来控制过滤器的执行时间。过滤器的一些常见用例包括设置标头或执行 GZIP 压缩。

注意

过滤器在功能上等同于 JBoss EAP 6 中使用的全局值。

可以定义以下类型的过滤器:

  • custom-filter
  • error-page
  • expression-filter
  • gzip
  • mod-cluster
  • request-limit
  • response-header
  • 重写

以下示例演示了如何使用管理 CLI 配置过滤器。您还可以通过导航到 Configuration Subsystems Web(Undertow) Filters 来配置使用管理控制台的过滤器。

更新现有过滤器

更新现有过滤器:

/subsystem=undertow/configuration=filter/response-header=myHeader:write-attribute(name=header-value,value="JBoss-EAP")
reload

创建新过滤器

要创建新过滤器,请执行以下操作:

/subsystem=undertow/configuration=filter/response-header=new-response-header:add(header-name=new-response-header,header-value="My Value")

删除过滤器

删除过滤器:

/subsystem=undertow/configuration=filter/response-header=new-response-header:remove
reload

有关可用于配置过滤器的属性的完整列表,请参阅 Undertow Subsystem Attributes 部分。

17.8.1. 配置 buffer-request 处理程序

客户端或浏览器的请求由两个部分组成:标题和正文。在典型的情形中,标头和正文发送至 JBoss EAP,两者之间没有任何延迟。但是,如果首先发送标题,在几秒钟后发送正文,则会延迟发送完整的请求。此方案在 JBoss EAP 中创建线程,以显示为 等待 执行完整的请求。

可以使用 buffer-request 处理程序纠正发送标头和请求正文时造成的延迟。buffer-request 处理程序会在将其分配到 worker 线程前尝试使用来自非阻塞 IO 线程的请求。如果没有添加 buffer-request 处理程序,则直接为 worker 线程分配线程。但是,当添加 buffer-request 处理程序时,处理程序会尝试读取它在分配至 worker 线程前可以使用 IO 线程以非阻塞方式缓冲的数据量。

您可以使用以下管理 CLI 命令配置 buffer-request 处理程序:

/subsystem=undertow/configuration=filter/expression-filter=buf:add(expression="buffer-request(buffers=1)")

/subsystem=undertow/server=default-server/host=default-host/filter-ref=buf:add

可以处理的缓冲区请求的大小有限制。此限制由缓冲区大小和缓冲区总数的组合决定,如下方的公式所示。

Total_size = num_buffers ¹ buffer_size

在以上因素中:

  • Total_size 是在请求分配给 worker 线程前缓冲的数据大小。
  • num_buffers 是缓冲区的数量。缓冲区数量由处理程序上的 buffers 参数设置。
  • buffer_size 是每个缓冲区的大小。缓冲区大小在 io 子系统中设置,默认情况下为 16KB。
警告

避免配置非常大的缓冲区请求,否则您可能耗尽内存。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.