AJP 连接器
目录
简介
AJP 连接器元素表示一个连接器组件,该组件通过AJP
协议与 Web 连接器通信。这用于希望将 Tomcat 无形地集成到现有(或新的)Apache 安装中,并且希望 Apache 处理 Web 应用程序中包含的静态内容和/或利用 Apache 的 SSL 处理的情况。
使用 AJP 协议需要额外的安全考虑,因为它允许对 Tomcat 的内部数据结构进行比 HTTP 连接器更直接的操作。应特别注意address
、secret
、secretRequired
和allowedRequestAttributesPattern
属性所用的值。
此连接器在与引擎的jvmRoute
属性结合使用时支持负载平衡。
此 Tomcat 版本支持的本机连接器是
- 任何受支持的服务器上的 JK 1.2.x。有关详细信息,请参阅JK 文档。
- 启用 AJP 的 Apache httpd 2.x 上的 mod_proxy(默认包含在 Apache HTTP Server 2.2 中):有关详细信息,请参阅httpd 文档。
其他支持 AJP 的本机连接器可能有效,但不再受支持。
属性
通用属性
连接器的所有实现都支持以下属性
属性 | 说明 |
---|---|
allowBackslash |
如果此值为 如果未指定,则使用默认值 |
allowTrace |
布尔值,可用于启用或禁用 TRACE HTTP 方法。如果未指定,此属性设置为 false。根据 RFC 7231 第 4.3.8 节,cookie 和授权标头将从对 TRACE 请求的响应中排除。如果您希望包括这些标头,可以为目标 Servlet 实现 |
asyncTimeout |
以毫秒为单位的异步请求的默认超时时间。如果未指定,此属性设置为 Servlet 规范默认值 30000(30 秒)。 |
discardFacades |
布尔值,可用于启用或禁用隔离容器内部请求处理对象的 facade 对象的回收。如果设置为 |
enableLookups |
如果希望对 |
encodedSolidusHandling |
当设置为 |
enforceEncodingInGetWriter |
如果为 如果未指定,将使用默认的规范兼容值 |
maxCookieCount |
请求允许的最大 Cookie 数。小于零的值表示没有限制。如果未指定,将使用默认值 200。 |
maxParameterCount |
从查询字符串获取的请求参数(包括上传的文件)和对于 POST 请求,如果内容类型为 |
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 |
使用 |
port |
此 Connector 将在该 TCP 端口号上创建一个服务器套接字并等待传入连接。您的操作系统将只允许一个服务器应用程序侦听特定 IP 地址上的特定端口号。如果使用特殊值 0(零),则 Tomcat 将随机选择一个空闲端口供此连接器使用。这通常仅在嵌入式和测试应用程序中才有用。 |
protocol |
设置用于处理传入流量的协议。若要配置 AJP 连接器,必须指定此项。如果未提供协议值,则将配置 HTTP 连接器 而不是 AJP 连接器。 |
proxyName |
如果此 Connector 在代理配置中使用,请配置此属性以指定要为调用 |
proxyPort |
如果此 Connector 在代理配置中使用,请配置此属性以指定要为调用 |
redirectPort |
如果此 Connector 支持非 SSL 请求,并且接收到一个请求,而对于该请求,匹配的 |
rejectSuspiciousURIs |
如果 URI 与 Servlet 6.0 规范确定的可疑 URI 模式之一匹配,此 Connector 是否应拒绝请求?默认值为 |
scheme |
将此属性设置为希望通过调用 |
安全 |
如果希望对该连接器接收的请求返回 |
URIEncoding |
在对 URL 进行 %xx 解码后,此属性指定用于解码 URI 字节的字符编码。默认值为 |
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 |
当达到 |
acceptorThreadCount |
用于接受连接的线程数。在多 CPU 机器上增加此值,尽管您实际上永远不需要超过 |
acceptorThreadPriority |
接受器线程的优先级。用于接受新连接的线程。默认值为 |
address |
对于具有多个 IP 地址的服务器,此属性指定将用于侦听指定端口的地址。默认情况下,连接器将侦听环回地址。除非使用系统属性以其他方式配置 JVM,否则基于 Java 的连接器(NIO、NIO2)在使用 |
ajpFlush |
布尔值,可用于启用或禁用在发生显式刷新时向前端代理发送 AJP 刷新消息。默认值为 |
allowedRequestAttributesPattern |
AJP 协议使用请求属性从反向代理传递一些信息到 AJP 连接器。这些属性是
AJP 协议支持传递任意请求属性。包含任意请求属性的请求将被拒绝,并返回 403 响应,除非整个属性名称与该正则表达式匹配。如果未指定,则默认值为 |
bindOnInit |
控制连接器使用的套接字的绑定时间。如果设置为 |
clientCertProvider |
当客户端证书信息以 |
connectionLinger |
此 连接器 使用的套接字在关闭时将保留的秒数。默认值为 |
connectionTimeout |
此 连接器 在接受连接后等待请求 URI 行呈现的毫秒数。AJP 协议连接器的默认值为 |
executor |
对 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 |
只有来自具有此密钥的工人的请求才会被接受。默认值为 |
secretRequired |
如果此属性为 |
tcpNoDelay |
如果设置为 |
threadPriority |
JVM 中请求处理线程的优先级。默认值为 |
throwOnFailure |
如果连接器在生命周期转换期间遇到异常,是否应该重新抛出或记录异常?如果未指定,将使用默认值 |
tomcatAuthentication |
如果设置为 Web 服务器必须将用户主体(用户名)作为名为 请注意,此主体不会有任何与之关联的角色。 默认值为 |
tomcatAuthorization |
如果设置为 |
useVirtualThreads |
(布尔值)使用此属性启用或禁用与内部执行器一起使用虚拟线程。如果此连接器关联了一个执行器,则此属性将被忽略。默认值为 |
Java TCP 套接字属性
除了上面列出的通用连接器和 HTTP 属性外,NIO 和 NIO2 实现还支持以下 Java TCP 套接字属性。
属性 | 说明 |
---|---|
socket.rxBufSize |
(int)套接字接收缓冲区(SO_RCVBUF)大小(以字节为单位)。如果未设置,则使用 JVM 默认值。 |
socket.txBufSize |
(int)套接字发送缓冲区(SO_SNDBUF)大小(以字节为单位)。如果未设置,则使用 JVM 默认值。如果显式设置此值,则应小心。已观察到某些 JVM 在值小于约 8k 时性能非常差。 |
socket.tcpNoDelay |
(bool)这等效于标准属性 tcpNoDelay。 |
socket.soKeepAlive |
(bool)套接字保持活动设置(SO_KEEPALIVE)的布尔值。如果未设置,则使用 JVM 默认值。 |
socket.ooBInline |
(bool)套接字 OOBINLINE 设置的布尔值。如果未设置,则使用 JVM 默认值。 |
socket.soReuseAddress |
(bool)套接字重用地址选项(SO_REUSEADDR)的布尔值。如果未设置,则使用 JVM 默认值。 |
socket.soLingerOn |
(bool)套接字 so linger 选项(SO_LINGER)的布尔值。标准属性 connectionLinger 的值大于或等于 0 等效于将其设置为 |
socket.soLingerTime |
(int)套接字 so linger 选项(SO_LINGER)的值(以秒为单位)。这等效于标准属性 connectionLinger。必须同时设置此属性和 |
socket.soTimeout |
这等效于标准属性 connectionTimeout。 |
socket.performanceConnectionTime |
(int)性能设置的第一个值。请参阅 套接字性能选项 必须设置所有三个性能属性,否则将对所有三个属性使用 JVM 默认值。 |
socket.performanceLatency |
(int)性能设置的第二个值。请参阅 套接字性能选项 必须设置所有三个性能属性,否则将对所有三个属性使用 JVM 默认值。 |
socket.performanceBandwidth |
(int)性能设置的第三个值。请参阅 套接字性能选项 必须设置所有三个性能属性,否则将对所有三个属性使用 JVM 默认值。 |
socket.unlockTimeout |
(int)套接字解锁超时。当连接器停止时,它将尝试通过向自身打开连接器来释放接收器线程。默认值为 |
NIO 特定配置
以下属性特定于 NIO 连接器。
属性 | 说明 |
---|---|
socket.directBuffer |
(bool)布尔值,是否使用直接 ByteBuffers 或 java 映射的 ByteBuffers。默认值为 |
socket.appReadBufSize |
(int)在 Tomcat 中打开的每个连接都与读取 ByteBuffer 关联。此属性控制此缓冲区的大小。默认情况下,此读取缓冲区大小为 |
socket.appWriteBufSize |
(int)在 Tomcat 中打开的每个连接都与写入 ByteBuffer 关联。此属性控制此缓冲区的大小。默认情况下,此写入缓冲区大小为 |
socket.bufferPool |
(int)NIO 连接器使用一个名为 NioChannel 的类,该类包含链接到套接字的元素。为了减少垃圾收集,NIO 连接器会缓存这些通道对象。此值指定此缓存的大小。默认值为 |
socket.bufferPoolSize |
(int)NioChannel 池也可以基于大小,而不是基于已使用的对象。大小计算如下 |
socket.processorCache |
(int)Tomcat 将缓存 SocketProcessor 对象以减少垃圾回收。该整数值指定最多在缓存中保留多少个对象。默认值为 |
socket.eventCache |
(int)Tomcat 将缓存 PollerEvent 对象以减少垃圾回收。该整数值指定最多在缓存中保留多少个对象。默认值为 |
NIO2 特定配置
以下属性特定于 NIO2 连接器。
属性 | 说明 |
---|---|
useCaches |
(bool)使用此属性启用或禁用对象缓存以减少产生的 GC 对象数量。默认值为 |
socket.directBuffer |
(bool)布尔值,是否使用直接 ByteBuffers 或 java 映射的 ByteBuffers。默认值为 |
socket.appReadBufSize |
(int)在 Tomcat 中打开的每个连接都与读取 ByteBuffer 关联。此属性控制此缓冲区的大小。默认情况下,此读取缓冲区大小为 |
socket.appWriteBufSize |
(int)在 Tomcat 中打开的每个连接都与写入 ByteBuffer 关联。此属性控制此缓冲区的大小。默认情况下,此写入缓冲区大小为 |
socket.bufferPoolSize |
(int)NIO2 连接器使用名为 Nio2Channel 的类,该类包含链接到套接字的元素。为了减少垃圾回收,NIO 连接器缓存这些通道对象。此值指定此缓存的大小。默认值为 |
socket.processorCache |
(int)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 |