AJP 连接器
目录
简介
AJP 连接器元素代表一个连接器组件,它通过AJP
协议与 Web 连接器通信。当您希望将 Tomcat 无缝集成到现有(或新的)Apache 安装中,并希望 Apache 处理 Web 应用程序中包含的静态内容,和/或利用 Apache 的 SSL 处理时,就会使用此连接器。
使用 AJP 协议需要额外的安全考虑,因为它比 HTTP 连接器允许更直接地操作 Tomcat 的内部数据结构。应特别注意address
、secret
、secretRequired
和allowedRequestAttributesPattern
属性所使用的值。
当与 Engine 的jvmRoute
属性结合使用时,此连接器支持负载均衡。
此 Tomcat 版本支持的本地连接器有
- JK 1.2.x,支持任何受支持的服务器。有关详细信息,请参阅JK 文档。
- Apache httpd 2.x 上的 mod_proxy(Apache HTTP Server 2.2 中默认包含),并启用了 AJP:有关详细信息,请参阅httpd 文档。
其他支持 AJP 的本地连接器可能仍然有效,但不再受支持。
属性
通用属性
所有 连接器 实现都支持以下属性
属性 | 描述 |
---|---|
allowBackslash |
如果此值为 如果未指定,将使用默认值 |
allowTrace |
一个布尔值,用于启用或禁用 TRACE HTTP 方法。如果未指定,此属性将设置为 false。根据 RFC 7231 第 4.3.8 节,Cookie 和授权头将从 TRACE 请求的响应中排除。如果您希望包含这些,您可以为目标 Servlet 实现 |
asyncTimeout |
异步请求的默认超时时间(毫秒)。如果未指定,此属性将设置为 Servlet 规范默认值 30000(30 秒)。 |
discardFacades |
一个布尔值,用于启用或禁用隔离容器内部请求处理对象的 facade 对象的回收。如果设置为 |
enableLookups |
如果您希望对 |
encodedReverseSolidusHandling |
当设置为 当设置为 如果使用 如果未指定,默认值为 |
encodedSolidusHandling |
当设置为 如果使用 如果未指定,默认值为 |
enforceEncodingInGetWriter |
如果此值为 如果未指定,将使用符合规范的默认值 |
maxCookieCount |
请求允许的最大 Cookie 数量。小于零的值表示没有限制。如果未指定,将使用默认值 200。 |
maxParameterCount |
从查询字符串以及(对于 POST 请求)内容类型为 |
maxPartCount |
内容类型为 |
maxPartHeaderSize |
内容类型为 |
maxPostSize |
容器 FORM URL 参数解析将处理的 POST 请求的最大大小(字节)。将此属性设置为小于零的值可以禁用此限制。超过此限制的请求将被拒绝。如果未指定,此属性将设置为 2097152 (2 MiB)。 |
maxSavePostSize |
容器在 FORM 或 CLIENT-CERT 身份验证期间保存/缓冲的 POST 请求的最大大小(字节)。对于这两种身份验证类型,POST 都将在用户身份验证之前保存/缓冲。对于 CLIENT-CERT 身份验证,POST 在 SSL 握手期间进行缓冲,并在请求处理时清空缓冲区。对于 FORM 身份验证,POST 在用户被重定向到登录表单时保存,并保留直到用户成功进行身份验证或与身份验证请求关联的会话过期。将此属性设置为 -1 可以禁用此限制。将此属性设置为零将禁用在身份验证期间保存 POST 数据。如果未指定,此属性将设置为 4096 (4 KiB)。 |
parseBodyMethods |
一个逗号分隔的 HTTP 方法列表,对于这些方法,使用 |
port |
此连接器将创建服务器套接字并等待传入连接的 TCP 端口号。您的操作系统只允许一个服务器应用程序侦听特定 IP 地址上的特定端口号。如果使用特殊值 0(零),则 Tomcat 将随机选择一个空闲端口用于此连接器。这通常只在嵌入式和测试应用程序中有用。 |
protocol |
设置处理传入流量的协议。要配置 AJP 连接器,此项必须指定。如果未提供协议值,则将配置HTTP 连接器而不是 AJP 连接器。 |
proxyName |
如果此连接器在代理配置中使用,请配置此属性以指定对 |
proxyPort |
如果此连接器在代理配置中使用,请配置此属性以指定对 |
redirectPort |
如果此连接器支持非 SSL 请求,并且收到一个请求,该请求的匹配 |
rejectSuspiciousURIs |
如果 URI 与 Servlet 6.0 规范标识的可疑 URI 模式之一匹配,此连接器是否应拒绝请求?默认值为 |
scheme |
将此属性设置为您希望通过调用 |
secure |
如果您希望对 |
URIEncoding |
这指定了用于解码 URI 字节的字符编码,在 %xx 解码 URL 之后。默认值为 |
useBodyEncodingForURI |
这指定了是否应将 contentType 中指定的编码用于 URI 查询参数,而不是使用 URIEncoding。此设置是为了与 Tomcat 4.1.x 兼容而存在的,在 Tomcat 4.1.x 中,contentType 中指定或使用 Request.setCharacterEncoding 方法显式设置的编码也用于 URL 中的参数。默认值为 注意:请参阅HTTP 连接器文档中有关此属性的说明。 |
useIPVHosts |
将此属性设置为 |
xpoweredBy |
将此属性设置为 |
标准实现
要使用 AJP,您必须指定 protocol 属性(参见上文)。
标准 AJP 连接器(NIO 和 NIO2)除了支持上述通用连接器属性外,还支持以下属性。
属性 | 描述 |
---|---|
acceptCount |
当达到 |
acceptorThreadPriority |
接受器线程的优先级。用于接受新连接的线程。默认值为 |
address |
对于具有多个 IP 地址的服务器,此属性指定将用于侦听指定端口的地址。默认情况下,连接器将侦听环回地址。除非使用系统属性另行配置 JVM,否则基于 Java 的连接器(NIO、NIO2)在配置为 |
ajpFlush |
一个布尔值,用于启用或禁用在发生显式刷新时向前端代理发送 AJP 刷新消息。默认值为 |
allowedRequestAttributesPattern |
AJP 协议使用请求属性将一些信息从反向代理传递给 AJP 连接器。这些属性是
AJP 协议支持传递任意请求属性。包含任意请求属性的请求将被拒绝并返回 403 响应,除非整个属性名称与此正则表达式匹配。如果未指定,默认值为 |
bindOnInit |
控制连接器使用的套接字何时绑定。如果设置为 |
clientCertProvider |
当客户端证书信息以 |
connectionLinger |
此连接器使用的套接字在关闭时将保留的秒数。默认值为 |
connectionTimeout |
此连接器在接受连接后等待请求 URI 行呈现的毫秒数。AJP 协议连接器的默认值为 |
executor |
对执行器元素中名称的引用。如果设置了此属性,并且命名的执行器存在,则连接器将使用该执行器,所有其他线程属性将被忽略。请注意,如果未为连接器指定共享执行器,则连接器将使用私有的内部执行器来提供线程池。 |
executorTerminationTimeoutMillis |
私有内部执行器在继续停止连接器的过程之前,将等待请求处理线程终止的时间。如果未设置,默认值为 |
keepAliveTimeout |
此连接器在关闭连接之前,将等待另一个 AJP 请求的毫秒数。默认值是使用 connectionTimeout 属性设置的值。 |
maxConnections |
服务器在任何给定时间将接受和处理的最大连接数。当达到此数量时,服务器将接受但不再处理一个额外的连接。此额外连接将被阻塞,直到正在处理的连接数降至maxConnections以下,此时服务器将再次开始接受和处理新连接。请注意,一旦达到限制,操作系统仍可能根据 仅适用于 NIO/NIO2,将值设置为 -1 将禁用 maxConnections 功能,并且不计算连接数。 |
maxHeaderCount |
容器允许的请求中的最大头部数量。包含的头部数量超过指定限制的请求将被拒绝。小于 0 的值表示没有限制。如果未指定,默认使用 100。 |
maxThreads |
此连接器将创建的最大请求处理线程数,因此决定了可以处理的最大并发请求数。如果未指定,此属性设置为 200。如果此连接器关联了执行器,则此属性将被忽略,因为连接器将使用执行器而不是内部线程池来执行任务。请注意,如果配置了执行器,此属性的任何设置值都将被正确记录,但将报告为 |
minSpareThreads |
始终保持运行的最小线程数。这包括活动线程和空闲线程。如果未指定,默认使用 |
packetSize |
此属性设置 AJP 数据包的最大大小(字节)。最大值为 65536。它应该与为 mod_jk 配置的 |
processorCache |
协议处理器缓存 Processor 对象以加快性能。此设置决定缓存多少个此类对象。 |
secret |
只接受来自具有此秘密关键字的 worker 的请求。默认值为 |
secretRequired |
如果此属性为 |
tcpNoDelay |
如果设置为 |
threadPriority |
JVM 中请求处理线程的优先级。默认值为 |
throwOnFailure |
如果连接器在生命周期转换期间遇到异常,该异常是应该被重新抛出还是记录?如果未指定,将使用默认值 |
tomcatAuthentication |
如果设置为 Web 服务器必须将用户主体(用户名)作为名为 请注意,此主体将没有与之关联的角色。 默认值为 |
tomcatAuthorization |
如果设置为 |
useVirtualThreads |
(布尔值) 使用此属性可以启用或禁用内部执行器使用虚拟线程。如果此连接器关联了执行器,则此属性将被忽略。默认值为 |
Java TCP 套接字属性
NIO 和 NIO2 实现除了支持上述通用连接器和 HTTP 属性外,还支持以下 Java TCP 套接字属性。
属性 | 描述 |
---|---|
socket.rxBufSize |
(整型) 套接字接收缓冲区 (SO_RCVBUF) 大小(字节)。如果未设置,则使用 JVM 默认值。 |
socket.txBufSize |
(整型) 套接字发送缓冲区 (SO_SNDBUF) 大小(字节)。如果未设置,则使用 JVM 默认值。如果显式设置此值,应小心。在某些 JVM 上,如果值小于约 8k,则观察到非常差的性能。 |
socket.tcpNoDelay |
(布尔值) 这等同于标准属性tcpNoDelay。 |
socket.soKeepAlive |
(布尔值) 套接字保持活动设置 (SO_KEEPALIVE) 的布尔值。如果未设置,则使用 JVM 默认值。 |
socket.ooBInline |
(布尔值) 套接字 OOBINLINE 设置的布尔值。如果未设置,则使用 JVM 默认值。 |
socket.soReuseAddress |
(布尔值) 套接字重用地址选项 (SO_REUSEADDR) 的布尔值。如果未设置,则使用 JVM 默认值。 |
socket.soLingerOn |
(布尔值) 套接字 SO_LINGER 选项的布尔值。标准属性connectionLinger的值 >=0 等同于将其设置为 |
socket.soLingerTime |
(整型) 套接字 SO_LINGER 选项的值(秒)。这等同于标准属性connectionLinger。此属性和 |
socket.soTimeout |
这等同于标准属性connectionTimeout。 |
socket.performanceConnectionTime |
(整型) 性能设置的第一个值。请参阅套接字性能选项。所有三个性能属性都必须设置,否则将使用 JVM 默认值。 |
socket.performanceLatency |
(整型) 性能设置的第二个值。请参阅套接字性能选项。所有三个性能属性都必须设置,否则将使用 JVM 默认值。 |
socket.performanceBandwidth |
(整型) 性能设置的第三个值。请参阅套接字性能选项。所有三个性能属性都必须设置,否则将使用 JVM 默认值。 |
socket.unlockTimeout |
(整型) 套接字解锁的超时时间。当连接器停止时,它将尝试通过向自身打开连接来释放接受器线程。默认值为 |
NIO 特定配置
以下属性是 NIO 连接器特有的。
属性 | 描述 |
---|---|
socket.directBuffer |
(布尔值) 布尔值,表示是使用直接 ByteBuffers 还是 Java 映射的 ByteBuffers。默认值为 |
socket.appReadBufSize |
(整型) Tomcat 中打开的每个连接都与一个读取 ByteBuffer 相关联。此属性控制此缓冲区的大小。默认情况下,此读取缓冲区的大小为 |
socket.appWriteBufSize |
(整型) Tomcat 中打开的每个连接都与一个写入 ByteBuffer 相关联。此属性控制此缓冲区的大小。默认情况下,此写入缓冲区的大小为 |
socket.bufferPool |
(整型) NIO 连接器使用一个名为 NioChannel 的类,该类包含链接到套接字的元素。为了减少垃圾回收,NIO 连接器缓存这些通道对象。此值指定此缓存的大小。默认值为 |
socket.bufferPoolSize |
(整型) NioChannel 池也可以基于大小,而不是基于使用的对象。大小计算如下 |
socket.processorCache |
(整型) Tomcat 将缓存 SocketProcessor 对象以减少垃圾回收。整数值指定缓存中最多保留多少个对象。默认值为 |
socket.eventCache |
(整型) Tomcat 将缓存 PollerEvent 对象以减少垃圾回收。整数值指定缓存中最多保留多少个对象。默认值为 |
NIO2 特定配置
以下属性是 NIO2 连接器特有的。
属性 | 描述 |
---|---|
useCaches |
(布尔值) 使用此属性可以启用或禁用对象缓存,以减少生成的 GC 对象数量。默认值为 |
socket.directBuffer |
(布尔值) 布尔值,表示是使用直接 ByteBuffers 还是 Java 映射的 ByteBuffers。默认值为 |
socket.appReadBufSize |
(整型) Tomcat 中打开的每个连接都与一个读取 ByteBuffer 相关联。此属性控制此缓冲区的大小。默认情况下,此读取缓冲区的大小为 |
socket.appWriteBufSize |
(整型) Tomcat 中打开的每个连接都与一个写入 ByteBuffer 相关联。此属性控制此缓冲区的大小。默认情况下,此写入缓冲区的大小为 |
socket.bufferPoolSize |
(整型) NIO2 连接器使用一个名为 Nio2Channel 的类,该类包含链接到套接字的元素。为了减少垃圾回收,NIO2 连接器缓存这些通道对象。此值指定此缓存的大小。默认值为 |
socket.processorCache |
(整型) Tomcat 将缓存 SocketProcessor 对象以减少垃圾回收。整数值指定缓存中最多保留多少个对象。默认值为 |
嵌套组件
目前没有。
特殊功能
代理支持
当 Tomcat 运行在代理服务器后方时,可以使用proxyName
和proxyPort
属性。这些属性修改了调用request.getServerName()
和request.getServerPort()
方法时返回给 Web 应用程序的值,这些方法通常用于构建重定向的绝对 URL。如果不配置这些属性,返回的值将反映从代理服务器接收连接的服务器名称和端口,而不是客户端最初请求的目标服务器名称和端口。
有关更多信息,请参阅代理支持指南。
连接器比较
下面是一个小图表,显示了连接器之间的区别。
Java NIO 连接器 NIO |
Java NIO2 连接器 NIO2 |
|
---|---|---|
类名 | AjpNioProtocol |
AjpNio2Protocol |
Tomcat 版本 | 7.x 及更高版本 | 8.x 及更高版本 |
支持轮询 | 是 | 是 |
轮询大小 | maxConnections |
maxConnections |
读取请求头部 | 阻塞 | 阻塞 |
读取请求体 | 阻塞 | 阻塞 |
写入响应头部和体 | 阻塞 | 阻塞 |
等待下一个请求 | 非阻塞 | 非阻塞 |
最大连接数 | maxConnections |
maxConnections |