AJP 连接器

目录

简介

AJP 连接器元素代表一个连接器组件,它通过AJP协议与 Web 连接器通信。当您希望将 Tomcat 无缝集成到现有(或新的)Apache 安装中,并希望 Apache 处理 Web 应用程序中包含的静态内容,和/或利用 Apache 的 SSL 处理时,就会使用此连接器。

使用 AJP 协议需要额外的安全考虑,因为它比 HTTP 连接器允许更直接地操作 Tomcat 的内部数据结构。应特别注意addresssecretsecretRequiredallowedRequestAttributesPattern属性所使用的值。

当与 EnginejvmRoute属性结合使用时,此连接器支持负载均衡。

此 Tomcat 版本支持的本地连接器有

  • JK 1.2.x,支持任何受支持的服务器。有关详细信息,请参阅JK 文档
  • Apache httpd 2.x 上的 mod_proxy(Apache HTTP Server 2.2 中默认包含),并启用了 AJP:有关详细信息,请参阅httpd 文档

其他支持 AJP 的本地连接器可能仍然有效,但不再受支持。

属性

通用属性

所有 连接器 实现都支持以下属性

属性描述
allowBackslash

如果此值为true,则允许将 '\' 字符用作路径分隔符。

如果未指定,将使用默认值false

allowTrace

一个布尔值,用于启用或禁用 TRACE HTTP 方法。如果未指定,此属性将设置为 false。根据 RFC 7231 第 4.3.8 节,Cookie 和授权头将从 TRACE 请求的响应中排除。如果您希望包含这些,您可以为目标 Servlet 实现doTrace()方法并完全控制响应。

asyncTimeout

异步请求的默认超时时间(毫秒)。如果未指定,此属性将设置为 Servlet 规范默认值 30000(30 秒)。

discardFacades

一个布尔值,用于启用或禁用隔离容器内部请求处理对象的 facade 对象的回收。如果设置为true,则每个请求后 facade 将被设置为垃圾回收,否则它们将被重用。如果未指定,此属性将设置为true

enableLookups

如果您希望对request.getRemoteHost()的调用执行 DNS 查找以返回远程客户端的实际主机名,请将其设置为true。设置为false可跳过 DNS 查找并返回 IP 地址的字符串形式(从而提高性能)。默认情况下,DNS 查找是禁用的。

encodedReverseSolidusHandling

当设置为reject时,包含%5c序列的请求路径将被拒绝并返回 400 响应。当设置为decode时,包含%5c序列的请求路径将同时将其解码为\,同时解码其他%nn序列。当设置为passthrough时,包含%5c序列的请求路径将以不变的%5c序列处理。

当设置为decoded时,allowBackslash 属性将在解码后应用。

如果使用passthrough,则应用程序负责执行任何进一步的%nn解码。请求路径中包含的任何%25序列(编码的%)也将以不变的%25序列处理,以避免路径随后被应用程序%nn解码时可能出现的损坏和/或解码失败。

如果未指定,默认值为decode

encodedSolidusHandling

当设置为reject时,包含%2f序列的请求路径将被拒绝并返回 400 响应。当设置为decode时,包含%2f序列的请求路径将同时将其解码为/,同时解码其他%nn序列。当设置为passthrough时,包含%2f序列的请求路径将以不变的%2f序列处理。

如果使用passthrough,则应用程序负责执行任何进一步的%nn解码。请求路径中包含的任何%25序列(编码的%)也将以不变的%25序列处理,以避免路径随后被应用程序%nn解码时可能出现的损坏和/或解码失败。

如果未指定,默认值为reject

enforceEncodingInGetWriter

如果此值为true,则在未指定字符编码的情况下调用Response.getWriter()将导致后续调用Response.getCharacterEncoding()返回ISO-8859-1,并且Content-Type响应头将包含charset=ISO-8859-1组件。(SRV.15.2.22.1)

如果未指定,将使用符合规范的默认值true

maxCookieCount

请求允许的最大 Cookie 数量。小于零的值表示没有限制。如果未指定,将使用默认值 200。

maxParameterCount

从查询字符串以及(对于 POST 请求)内容类型为application/x-www-form-urlencodedmultipart/form-data的请求体中获取的请求参数(包括上传文件)的最大总数。超过此限制的请求将被拒绝。小于 0 的值表示没有限制。如果未指定,默认使用 1000。

maxPartCount

内容类型为multipart/form-data的请求中允许的最大部分总数。此限制是maxParameterCount的补充。超过此限制的请求将被拒绝。小于 0 的值表示没有限制。如果未指定,默认使用 10。

maxPartHeaderSize

内容类型为multipart/form-data的请求中每个部分允许的最大头部字节数。超过此限制的请求将被拒绝。小于 0 的值表示没有限制。如果未指定,默认使用 512。

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 方法列表,对于这些方法,使用application/x-www-form-urlencoded的请求体将以与 POST 相同的方式解析请求参数。这对于希望支持 PUT 请求的 POST 样式语义的 RESTful 应用程序很有用。请注意,除POST以外的任何设置都会导致 Tomcat 的行为方式与 Servlet 规范的意图相悖。根据 HTTP 规范,此处明确禁止 HTTP 方法 TRACE。默认值为POST

port

连接器将创建服务器套接字并等待传入连接的 TCP 端口号。您的操作系统只允许一个服务器应用程序侦听特定 IP 地址上的特定端口号。如果使用特殊值 0(零),则 Tomcat 将随机选择一个空闲端口用于此连接器。这通常只在嵌入式和测试应用程序中有用。

protocol

设置处理传入流量的协议。要配置 AJP 连接器,此项必须指定。如果未提供协议值,则将配置HTTP 连接器而不是 AJP 连接器。
AJP 连接器的标准协议值为AJP/1.3,它使用基于 Java NIO 的连接器。
要使用显式协议,可以使用以下值
org.apache.coyote.ajp.AjpNioProtocol - 非阻塞 Java NIO 连接器。
org.apache.coyote.ajp.AjpNio2Protocol - 非阻塞 Java NIO2 连接器。
也可以使用自定义实现。
请查看我们的连接器比较图表。

proxyName

如果此连接器在代理配置中使用,请配置此属性以指定对request.getServerName()的调用返回的服务器名称。有关详细信息,请参阅代理支持

proxyPort

如果此连接器在代理配置中使用,请配置此属性以指定对request.getServerPort()的调用返回的服务器端口。有关详细信息,请参阅代理支持

redirectPort

如果此连接器支持非 SSL 请求,并且收到一个请求,该请求的匹配<security-constraint>需要 SSL 传输,Catalina 将自动将请求重定向到此处指定的端口号。

rejectSuspiciousURIs

如果 URI 与 Servlet 6.0 规范标识的可疑 URI 模式之一匹配,此连接器是否应拒绝请求?默认值为false

scheme

将此属性设置为您希望通过调用request.getScheme()返回的协议名称。例如,对于 SSL 连接器,您会将其设置为“https”。默认值为“http”。

secure

如果您希望对request.isSecure()的调用对于此连接器收到的请求返回true,请将此属性设置为true。您会在 SSL 连接器或从 SSL 加速器(如加密卡、SSL 设备甚至 Web 服务器)接收数据的非 SSL 连接器上使用此设置。默认值为false

URIEncoding

这指定了用于解码 URI 字节的字符编码,在 %xx 解码 URL 之后。默认值为UTF-8

useBodyEncodingForURI

这指定了是否应将 contentType 中指定的编码用于 URI 查询参数,而不是使用 URIEncoding。此设置是为了与 Tomcat 4.1.x 兼容而存在的,在 Tomcat 4.1.x 中,contentType 中指定或使用 Request.setCharacterEncoding 方法显式设置的编码也用于 URL 中的参数。默认值为false

注意:请参阅HTTP 连接器文档中有关此属性的说明。

useIPVHosts

将此属性设置为true,以使 Tomcat 使用本地 Web 服务器传递的 IP 地址来确定将请求发送到哪个主机。默认值为false

xpoweredBy

将此属性设置为true,以使 Tomcat 使用规范中推荐的头部来宣传对 Servlet 规范的支持。默认值为false

标准实现

要使用 AJP,您必须指定 protocol 属性(参见上文)。

标准 AJP 连接器(NIO 和 NIO2)除了支持上述通用连接器属性外,还支持以下属性。

属性描述
acceptCount

当达到maxConnections时,操作系统提供的传入连接请求队列的最大长度。操作系统可能会忽略此设置并为队列使用不同的大小。当此队列满时,操作系统可能会主动拒绝额外的连接,或者这些连接可能会超时。默认值为 100。

acceptorThreadPriority

接受器线程的优先级。用于接受新连接的线程。默认值为5java.lang.Thread.NORM_PRIORITY常量的值)。有关此优先级含义的更多详细信息,请参阅java.lang.Thread类的 JavaDoc。

address

对于具有多个 IP 地址的服务器,此属性指定将用于侦听指定端口的地址。默认情况下,连接器将侦听环回地址。除非使用系统属性另行配置 JVM,否则基于 Java 的连接器(NIO、NIO2)在配置为0.0.0.0::时将同时侦听 IPv4 和 IPv6 地址。

ajpFlush

一个布尔值,用于启用或禁用在发生显式刷新时向前端代理发送 AJP 刷新消息。默认值为true
AJP 刷新消息是一个没有正文内容的 SEND_BODY_CHUNK 数据包。像 mod_jk 或 mod_proxy_ajp 这样的代理实现,在收到此类数据包时,会将 Web 服务器中缓冲的数据刷新到客户端。将其设置为false可以减少 AJP 数据包流量,但可能会延迟向客户端发送数据包。在响应结束时,AJP 总是会刷新到客户端。

allowedRequestAttributesPattern

AJP 协议使用请求属性将一些信息从反向代理传递给 AJP 连接器。这些属性是

  • javax.servlet.request.cipher_suite
  • javax.servlet.request.key_size
  • javax.servlet.request.ssl_session
  • javax.servlet.request.X509Certificate
  • AJP_LOCAL_ADDR
  • AJP_REMOTE_PORT
  • AJP_SSL_PROTOCOL
  • JK_LB_ACTIVATION
  • CERT_ISSUER (仅限 IIS)
  • CERT_SUBJECT (仅限 IIS)
  • CERT_COOKIE (仅限 IIS)
  • HTTPS_SERVER_SUBJECT (仅限 IIS)
  • CERT_FLAGS (仅限 IIS)
  • HTTPS_SECRETKEYSIZE (仅限 IIS)
  • CERT_SERIALNUMBER (仅限 IIS)
  • HTTPS_SERVER_ISSUER (仅限 IIS)
  • HTTPS_KEYSIZE (仅限 IIS)

AJP 协议支持传递任意请求属性。包含任意请求属性的请求将被拒绝并返回 403 响应,除非整个属性名称与此正则表达式匹配。如果未指定,默认值为null

bindOnInit

控制连接器使用的套接字何时绑定。如果设置为true,则在连接器初始化时绑定,在连接器销毁时解除绑定。如果设置为false,则在连接器启动时绑定套接字,在停止时解除绑定。如果未指定,默认值为true

clientCertProvider

当客户端证书信息以java.security.cert.X509Certificate实例以外的形式呈现时,需要在使用前进行转换,此属性控制使用哪个 JSSE 提供程序执行转换。如果未指定,将使用默认提供程序。

connectionLinger

连接器使用的套接字在关闭时将保留的秒数。默认值为-1,表示禁用套接字逗留(linger)。

connectionTimeout

连接器在接受连接后等待请求 URI 行呈现的毫秒数。AJP 协议连接器的默认值为-1(即无限)。

executor

执行器元素中名称的引用。如果设置了此属性,并且命名的执行器存在,则连接器将使用该执行器,所有其他线程属性将被忽略。请注意,如果未为连接器指定共享执行器,则连接器将使用私有的内部执行器来提供线程池。

executorTerminationTimeoutMillis

私有内部执行器在继续停止连接器的过程之前,将等待请求处理线程终止的时间。如果未设置,默认值为5000(5 秒)。

keepAliveTimeout

连接器在关闭连接之前,将等待另一个 AJP 请求的毫秒数。默认值是使用 connectionTimeout 属性设置的值。

maxConnections

服务器在任何给定时间将接受和处理的最大连接数。当达到此数量时,服务器将接受但不再处理一个额外的连接。此额外连接将被阻塞,直到正在处理的连接数降至maxConnections以下,此时服务器将再次开始接受和处理新连接。请注意,一旦达到限制,操作系统仍可能根据acceptCount设置接受连接。默认值为8192

仅适用于 NIO/NIO2,将值设置为 -1 将禁用 maxConnections 功能,并且不计算连接数。

maxHeaderCount

容器允许的请求中的最大头部数量。包含的头部数量超过指定限制的请求将被拒绝。小于 0 的值表示没有限制。如果未指定,默认使用 100。

maxThreads

连接器将创建的最大请求处理线程数,因此决定了可以处理的最大并发请求数。如果未指定,此属性设置为 200。如果此连接器关联了执行器,则此属性将被忽略,因为连接器将使用执行器而不是内部线程池来执行任务。请注意,如果配置了执行器,此属性的任何设置值都将被正确记录,但将报告为-1(例如通过 JMX)以明确表示它未使用。

minSpareThreads

始终保持运行的最小线程数。这包括活动线程和空闲线程。如果未指定,默认使用10。如果此连接器关联了执行器,则此属性将被忽略,因为连接器将使用执行器而不是内部线程池来执行任务。请注意,如果配置了执行器,此属性的任何设置值都将被正确记录,但将报告为-1(例如通过 JMX)以明确表示它未使用。

packetSize

此属性设置 AJP 数据包的最大大小(字节)。最大值为 65536。它应该与为 mod_jk 配置的max_packet_size指令相同。通常不需要更改最大数据包大小。在发送证书或证书链时,已报告存在默认值问题。默认值为 8192。如果设置为小于 8192,则该设置将被忽略并使用默认值 8192。

processorCache

协议处理器缓存 Processor 对象以加快性能。此设置决定缓存多少个此类对象。-1表示无限制,默认值为200。如果未使用 Servlet 3.0 异步处理,则一个好的默认值是使用与 maxThreads 设置相同的值。如果使用 Servlet 3.0 异步处理,则一个好的默认值是使用 maxThreads 和预期最大并发请求数(同步和异步)中的较大值。

secret

只接受来自具有此秘密关键字的 worker 的请求。默认值为null。除非secretRequired被明确配置为false,否则此属性必须指定为非空、非零长度的值。如果此属性配置为非空、非零长度的值,则 worker 必须提供匹配的值,否则无论secretRequired的设置如何,请求都将被拒绝。

secretRequired

如果此属性为true,则 AJP 连接器仅在secret属性配置为非空、非零长度值时才会启动。此属性仅控制 AJP 连接器启动时是否需要指定secret属性。它控制 worker 是否需要提供秘密。默认值为true。此属性仅在连接器用于可信网络时才应设置为false

tcpNoDelay

如果设置为true,则服务器套接字上将设置 TCP_NO_DELAY 选项,这在大多数情况下可提高性能。默认情况下此项设置为true

threadPriority

JVM 中请求处理线程的优先级。默认值为5java.lang.Thread.NORM_PRIORITY常量的值)。有关此优先级含义的更多详细信息,请参阅java.lang.Thread类的 JavaDoc。如果此连接器关联了执行器,则此属性将被忽略,因为连接器将使用执行器而不是内部线程池来执行任务。请注意,如果配置了执行器,此属性的任何设置值都将被正确记录,但将报告为-1(例如通过 JMX)以明确表示它未使用。

throwOnFailure

如果连接器在生命周期转换期间遇到异常,该异常是应该被重新抛出还是记录?如果未指定,将使用默认值false。请注意,默认值可以通过org.apache.catalina.startup.EXIT_ON_INIT_FAILURE系统属性更改。

tomcatAuthentication

如果设置为true,则身份验证将在 Tomcat 中完成。否则,已验证的主体将从本地 Web 服务器传播并在 Tomcat 中用于授权。

Web 服务器必须将用户主体(用户名)作为名为REMOTE_USER的请求属性发送。

请注意,此主体将没有与之关联的角色。

默认值为true。如果tomcatAuthorization设置为true,则此属性无效。

tomcatAuthorization

如果设置为true,则已验证的主体将从本地 Web 服务器传播并被视为已在 Tomcat 中进行身份验证。如果 Web 应用程序具有一个或多个安全约束,则 Tomcat 将执行授权并将角色分配给已验证的主体。如果请求的相应 Tomcat Realm 未识别提供的用户名,仍将创建 Principal,但它将没有角色。默认值为false

useVirtualThreads

(布尔值) 使用此属性可以启用或禁用内部执行器使用虚拟线程。如果此连接器关联了执行器,则此属性将被忽略。默认值为false

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 等同于将其设置为true。标准属性connectionLinger的值 <0 等同于将其设置为false。此属性和soLingerTime都必须设置,否则将使用 JVM 默认值。

socket.soLingerTime

(整型) 套接字 SO_LINGER 选项的值(秒)。这等同于标准属性connectionLinger。此属性和soLingerOn都必须设置,否则将使用 JVM 默认值。

socket.soTimeout

这等同于标准属性connectionTimeout

socket.performanceConnectionTime

(整型) 性能设置的第一个值。请参阅套接字性能选项。所有三个性能属性都必须设置,否则将使用 JVM 默认值。

socket.performanceLatency

(整型) 性能设置的第二个值。请参阅套接字性能选项。所有三个性能属性都必须设置,否则将使用 JVM 默认值。

socket.performanceBandwidth

(整型) 性能设置的第三个值。请参阅套接字性能选项。所有三个性能属性都必须设置,否则将使用 JVM 默认值。

socket.unlockTimeout

(整型) 套接字解锁的超时时间。当连接器停止时,它将尝试通过向自身打开连接来释放接受器线程。默认值为250,单位为毫秒。

NIO 特定配置

以下属性是 NIO 连接器特有的。

属性描述
socket.directBuffer

(布尔值) 布尔值,表示是使用直接 ByteBuffers 还是 Java 映射的 ByteBuffers。默认值为false
当您使用直接缓冲区时,请确保为直接内存空间分配了适当的内存量。在 Sun 的 JDK 上,这可能是-XX:MaxDirectMemorySize=256m之类的设置。

socket.appReadBufSize

(整型) Tomcat 中打开的每个连接都与一个读取 ByteBuffer 相关联。此属性控制此缓冲区的大小。默认情况下,此读取缓冲区的大小为8192字节。对于较低的并发性,您可以增加此值以缓冲更多数据。对于大量的保持活动连接,请减小此数字或增加您的堆大小。

socket.appWriteBufSize

(整型) Tomcat 中打开的每个连接都与一个写入 ByteBuffer 相关联。此属性控制此缓冲区的大小。默认情况下,此写入缓冲区的大小为8192字节。对于低并发性,您可以增加此值以缓冲更多响应数据。对于大量的保持活动连接,请减小此数字或增加您的堆大小。
这里的默认值很低,如果您不需要处理数万个并发连接,则应该将其提高。

socket.bufferPool

(整型) NIO 连接器使用一个名为 NioChannel 的类,该类包含链接到套接字的元素。为了减少垃圾回收,NIO 连接器缓存这些通道对象。此值指定此缓存的大小。默认值为500,表示缓存将保留 500 个 NioChannel 对象。其他值包括-1表示无限缓存,0表示不缓存。

socket.bufferPoolSize

(整型) NioChannel 池也可以基于大小,而不是基于使用的对象。大小计算如下
NioChannel 缓冲区大小 = 读取缓冲区大小 + 写入缓冲区大小
SecureNioChannel 缓冲区大小 = 应用程序读取缓冲区大小 + 应用程序写入缓冲区大小 + 网络读取缓冲区大小 + 网络写入缓冲区大小
该值以字节为单位,默认值为1024*1024*100 (100 MiB)。

socket.processorCache

(整型) Tomcat 将缓存 SocketProcessor 对象以减少垃圾回收。整数值指定缓存中最多保留多少个对象。默认值为0。其他值包括-1表示无限缓存,0表示不缓存。

socket.eventCache

(整型) Tomcat 将缓存 PollerEvent 对象以减少垃圾回收。整数值指定缓存中最多保留多少个对象。默认值为0。其他值包括-1表示无限缓存,0表示不缓存。

NIO2 特定配置

以下属性是 NIO2 连接器特有的。

属性描述
useCaches

(布尔值) 使用此属性可以启用或禁用对象缓存,以减少生成的 GC 对象数量。默认值为false

socket.directBuffer

(布尔值) 布尔值,表示是使用直接 ByteBuffers 还是 Java 映射的 ByteBuffers。默认值为false
当您使用直接缓冲区时,请确保为直接内存空间分配了适当的内存量。在 Sun 的 JDK 上,这可能是-XX:MaxDirectMemorySize=256m之类的设置。

socket.appReadBufSize

(整型) Tomcat 中打开的每个连接都与一个读取 ByteBuffer 相关联。此属性控制此缓冲区的大小。默认情况下,此读取缓冲区的大小为8192字节。对于较低的并发性,您可以增加此值以缓冲更多数据。对于大量的保持活动连接,请减小此数字或增加您的堆大小。

socket.appWriteBufSize

(整型) Tomcat 中打开的每个连接都与一个写入 ByteBuffer 相关联。此属性控制此缓冲区的大小。默认情况下,此写入缓冲区的大小为8192字节。对于低并发性,您可以增加此值以缓冲更多响应数据。对于大量的保持活动连接,请减小此数字或增加您的堆大小。
这里的默认值很低,如果您不需要处理数万个并发连接,则应该将其提高。

socket.bufferPoolSize

(整型) NIO2 连接器使用一个名为 Nio2Channel 的类,该类包含链接到套接字的元素。为了减少垃圾回收,NIO2 连接器缓存这些通道对象。此值指定此缓存的大小。默认值为500,表示缓存将保留 500 个 Nio2Channel 对象。其他值包括-1表示无限缓存,0表示不缓存。

socket.processorCache

(整型) Tomcat 将缓存 SocketProcessor 对象以减少垃圾回收。整数值指定缓存中最多保留多少个对象。默认值为0。其他值包括-1表示无限缓存,0表示不缓存。

嵌套组件

目前没有。

特殊功能

代理支持

当 Tomcat 运行在代理服务器后方时,可以使用proxyNameproxyPort属性。这些属性修改了调用request.getServerName()request.getServerPort()方法时返回给 Web 应用程序的值,这些方法通常用于构建重定向的绝对 URL。如果不配置这些属性,返回的值将反映从代理服务器接收连接的服务器名称和端口,而不是客户端最初请求的目标服务器名称和端口。

有关更多信息,请参阅代理支持指南

连接器比较

下面是一个小图表,显示了连接器之间的区别。

Java NIO 连接器
NIO
Java NIO2 连接器
NIO2
类名 AjpNioProtocol AjpNio2Protocol
Tomcat 版本 7.x 及更高版本 8.x 及更高版本
支持轮询
轮询大小 maxConnections maxConnections
读取请求头部 阻塞 阻塞
读取请求体 阻塞 阻塞
写入响应头部和体 阻塞 阻塞
等待下一个请求 非阻塞 非阻塞
最大连接数 maxConnections maxConnections