Tomcat 8.5 配置 APR 连接器和 HTTPS
Tomcat 8.5 configuration with APR connecter and HTTPS
出于安全原因,我们应该将我们的应用程序服务器从 Tomcat7 升级到 Tomcat8.5(Tomcat 用作 Apache HTTPD 2.4 前面的应用程序服务器,它是 Web 服务器,它们使用 AJP with mod_jk 集成),在成功配置后,应用程序能够 运行 成功,但我注意到 CPU 的使用率高达 100%。
请注意,我使用 Tomcat8.5.47 本机 二进制文件 windows 从 here 下载。
这是我在 server.xml
中启用 https 的配置
<Connector port="8444" maxHttpHeaderSize="8192"
maxThreads="150"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
SSLEnabled="true"
SSLCertificateFile="conf/certs/mycacert.pem"
SSLCertificateKeyFile="conf/certs/cakey_enc.pem" />
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8444" />
这里有一些关于AJP connector的详细信息,请特别参考protocol
属性。
经过Tomcat7和Tomcat8.5的长期比较,当我为Tomcat7和8.5输入https://localhost:port/manager/status时,我发现Tomcat7 使用 http-apr-8080
(对于 http),http-apr-8443
(对于 https,提到的是 http-apr 而不是 https-apr)和 ajp-apr-8009
,但是 Tomact8.5 使用 http-nio-8080
、https-openssl-nio-8444
和 ajp-nio-8009
因此 Tomcat7 在所有连接器中使用 APR 但 Tomcat8.5 使用 NIO。
附加信息:
我们正在 运行ning Windows Server 2008 R2 64 位,4GB RAM(这是测试服务器)。
4 月 1.7
AJP 1.3
JVM 1.8.0_231-b11
Tomcat初始内存池:1024MB
Tomcat最大内存池:1024MB
OpenSSL 1.1.1c
感谢您的帮助!
8.5.x 中存在 APR/native 库时默认值已更改。
在 Tomcat 7 中,它是 APR 连接器,包括用于 TLS 的 OpenSSL。
在 Tomcat 8.5 中,它是 NIO 连接器,包括用于 TLS 的 OpenSSL。
使用 OpenSSL 需要 APR/native 连接器。
如果你真的想要 APR/native(我个人会坚持使用默认值),最简单的方法是在你的 HTTP Connector
元素中使用以下内容
protocol="org.apache.coyote.http11.Http11AprProtocol"
和 protocol="org.apache.coyote.ajp.AjpAprProtocol"
用于您的 AJP 连接器。
这个线程 给了我尝试 Tomcat8.5.5
的想法,它解决了使用 Apr Connector
时自发高 CPU 用法的问题
出于安全原因,我们应该将我们的应用程序服务器从 Tomcat7 升级到 Tomcat8.5(Tomcat 用作 Apache HTTPD 2.4 前面的应用程序服务器,它是 Web 服务器,它们使用 AJP with mod_jk 集成),在成功配置后,应用程序能够 运行 成功,但我注意到 CPU 的使用率高达 100%。
请注意,我使用 Tomcat8.5.47 本机 二进制文件 windows 从 here 下载。
这是我在 server.xml
中启用 https 的配置<Connector port="8444" maxHttpHeaderSize="8192"
maxThreads="150"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
SSLEnabled="true"
SSLCertificateFile="conf/certs/mycacert.pem"
SSLCertificateKeyFile="conf/certs/cakey_enc.pem" />
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8444" />
这里有一些关于AJP connector的详细信息,请特别参考protocol
属性。
经过Tomcat7和Tomcat8.5的长期比较,当我为Tomcat7和8.5输入https://localhost:port/manager/status时,我发现Tomcat7 使用 http-apr-8080
(对于 http),http-apr-8443
(对于 https,提到的是 http-apr 而不是 https-apr)和 ajp-apr-8009
,但是 Tomact8.5 使用 http-nio-8080
、https-openssl-nio-8444
和 ajp-nio-8009
因此 Tomcat7 在所有连接器中使用 APR 但 Tomcat8.5 使用 NIO。
附加信息:
我们正在 运行ning Windows Server 2008 R2 64 位,4GB RAM(这是测试服务器)。
4 月 1.7
AJP 1.3
JVM 1.8.0_231-b11
Tomcat初始内存池:1024MB
Tomcat最大内存池:1024MB
OpenSSL 1.1.1c
感谢您的帮助!
8.5.x 中存在 APR/native 库时默认值已更改。
在 Tomcat 7 中,它是 APR 连接器,包括用于 TLS 的 OpenSSL。
在 Tomcat 8.5 中,它是 NIO 连接器,包括用于 TLS 的 OpenSSL。
使用 OpenSSL 需要 APR/native 连接器。
如果你真的想要 APR/native(我个人会坚持使用默认值),最简单的方法是在你的 HTTP Connector
元素中使用以下内容
protocol="org.apache.coyote.http11.Http11AprProtocol"
和 protocol="org.apache.coyote.ajp.AjpAprProtocol"
用于您的 AJP 连接器。
这个线程 Tomcat8.5.5
的想法,它解决了使用 Apr Connector