这篇笔记主要讲解的其实就是conf/server.xml
中的一些配置项,涉及Tomcat服务器的功能配置、性能优化等内容。本篇笔记是基于Tomcat9进行讲解的。
官方文档:https://tomcat.apache.org/tomcat-9.0-doc/index.html
Tomcat中,Connector是处理网络请求的终端,使用浏览器上网时,我们最常用的两种协议是HTTP和HTTPS。
在server.xml
中,默认有这样的配置:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
以上配置能让我们使用HTTP
协议与TCP 8080
端口访问Tomcat服务器上的资源。
JDK中新的NIO、NIO2相比旧的BIO,有更好的IO性能。将protocol属性替换成如下内容即可开启NIO2模式:
<Connector port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol"
connectionTimeout="20000"
redirectPort="8443" />
APR模式使用本地库,性能上得到了进一步提高,但是依赖于具体的操作系统平台,这里就不具体介绍了。
server.xml中有如下配置,取消注释就可以开启HTTPS了,但是直接启动会报错,因为我们必须配置HTTPS证书。
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
这里我们使用JDK自带的工具keytool
生成一个自签名证书(仅用于测试)。
输入命令:
keytool -genkeypair -keyalg "RSA" -keystore "/home/ubuntu/tomcat.keystore"
此时我们就生成了一个对localhost
签名的证书了。
将HTTPS的Connector修改为如下,指定证书路径和密码:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Nio2Protocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" keystoreFile="/home/ubuntu/tomcat.keystore" keystorePass="123456" />
keystoreFile
:证书文件路径keystorePass
:证书文件密码使用浏览器访问https://localhost:8443
,由于是测试证书,因此显示如下:
继续访问即可。
注:实际上,我们网站一般都是通过在Nginx上配置HTTPS证书,然后通过Nginx反向代理应用服务器(如Tomcat)。以上内容大家了解即可,一般很少用到。
AJP是一个二进制的TCP协议,主要应用于Web服务器(比如Apache)和Servlet容器之间传输数据,它通过保持TCP长连接来提高反向代理的数据传输性能。网上一些一知半解的博客说AJP用于动静分离什么的,其实这个协议和动静分离没有任何关系,它仅仅是用于将数据传输给Web服务器,然后由Web服务器转换为HTTP的方式再发送给客户端。
支持AJP的Web服务器主要是Apache的mod_jk
,近几年很火的Nginx只有第三方模块nginx_ajp_module
,项目Github地址:https://github.com/yaoweibin/nginx_ajp_module,但是用的人似乎不多,好多年未更新了,也不知道是否靠谱。还有一种说法是Nginx使用AJP相比HTTP没有什么优势,总之使用Nginx时几乎没人用AJP了。不仅如此,大部分人都建议关闭AJP Connector以提高Tomcat性能和安全性。
总之这个功能默认就是开着的,如果实际上线的系统中不使用AJP,尤其是非对外开放的系统中,一定要注意这个AJP的Connector,不需要就应该及时关闭,以免引发安全问题。