我们在使用tomcat的时候有很多情况下需要用到Apr模式来支持高并发,这里就讲一下如果开启tomcat的Apr协议,并演示配置http和https两种连接器。
首先你得有一个tomcat然后就可以进行下面的工作了。关于tomcat服务器的准备可以查看其他几篇文章,主要可以看:
https://blog.csdn.net/hyklose/article/details/81204826
(一)开启Apr服务
想要开启apr服务,你需要在你的ubuntu上安装下面这些程序,有的可能你已经有了,如果没有就全部安装吧:
software | command |
---|---|
libapr-dev | sudo apt-get install libapr1-dev |
libssl-dev | sudo apt-get install libssl-dev |
libexpat-dev | sudo apt-get install libexpat1-dev |
gcc | sudo apt-get install gcc |
make | sudo apt-get install make |
除此之外还需要apache的tomcat-native。最新的apach已经在bin下面包含了tomcat-native,如果你没有就先去apache官网下载一个tomcat的包,然后去bin下面找到。
http://mirrors.sorengard.com/apache/tomcat/tomcat-9/v9.0.10/bin/apache-tomcat-9.0.10.tar.gz
可以直接解压:
root@ubuntu:~/opt/apache-tomcat-9.0.10/bin# tar -zxvf tomcat-native.tar.gz
然后进入文件夹进行编译安装:
root@ubuntu:~/opt/apache-tomcat-9.0.10/bin# cd tomcat-native-1.2.17-src/native/
root@ubuntu:~/opt/apache-tomcat-9.0.10/bin/tomcat-native-1.2.17-src/native# ./configure --with-java-home=/usr/lib/jvm/default-java
root@ubuntu:~/opt/apache-tomcat-9.0.10/bin/tomcat-native-1.2.17-src/native# make
root@ubuntu:~/opt/apache-tomcat-9.0.10/bin/tomcat-native-1.2.17-src/native# make install
然后重启tomcat:
root@ubuntu:~/opt/apache-tomcat-9.0.10/bin/tomcat-native-1.2.17-src/native# service tomcat restart
现在你得tomcat就是可以使用apr协议的了。
(二)配置http的Apr连接器
虽然我们开启了tomcat的Apr协议,但是还要配置连接器。http连接器的配置和简单,只要修改conf下的server.xml文件就可以了,在conf/server.xml中找到下面:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
修改protocol就可以了,修改为下面的样子:
<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
connectionTimeout="20000"
redirectPort="8443" />
然后再重启tomcat就可以了。
root@ubuntu:~/opt/apache-tomcat-9.0.10/conf# service tomcat restart
这时候我们可以去看一下tomcat的启动log:
root@ubuntu:~/opt/apache-tomcat-9.0.10/conf# vi ../logs/catalina.2018-07-25.log
如果可以找到下面的描述并且下面没有错误,就说明Apr协议的http连接器成功启动了:
25-Jul-2018 08:27:38.004 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-apr-8080"]
(三)配置https的Apr连接器
https的连接器配置要麻烦一些,我们需要首先生成一个openssl的X509公钥和私钥对。
我们首先来生成openssl的CA密钥,如果你没有安装openssl,请安装一下:
root@ubuntu:~# sudo apt-get install openssl
然后使用下面命令生成key:
root@ubuntu:~# openssl genrsa -des3 -out server.key 2048
这是一个带密码的key,会要你输入一个密码,如果你想要一个不带密码的key,可以在执行一下下面命令:
root@ubuntu:~# openssl rsa -in server.key -out server.key
它会要你再次输入以下上面的密码,但是这之后,key就没有密码了。
然后我们生成CA的crt文件,使用下面命令:
root@ubuntu:~# openssl req -new -x509 -key server.key -out ca.crt -days 3650
然后我们生成csr文件,使用下面命令:
root@ubuntu:~# openssl req -new -key server.key -out server.csr
最后我们生成最终crt文件,使用下面命令:
root@ubuntu:~# openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey server.key -CAcreateserial -out server
这样我们就得到了三个有用的密钥文件,他们分别是server.crt,server.key,ca.crt。
有人可能会说他经常见到一种.pem的密钥文件,如果你需要,可以使用下面命令生成:
root@ubuntu:~# cat server.key server.crt > server.pem
到此为止我们所需要的公钥私钥就全部生成了,接下来我们需要配置下tomcat服务器开启https的Apr连接器,依旧是修改conf/server.xml文件,添加下面一段(主要不要添加在结尾,要在</Service>上面,也可以找到相似,添加在旁边):
<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
maxThreads="200" scheme="https" secure="true" SSLEnabled="true"
SSLCertificateFile="/root/server.crt"
SSLCertificateKeyFile="/root/server.key"
SSLVerifyClient="optional" SSLProtocol="TLSv1+TLSv1.1+TLSv1.2"/>
然后重启tomcat服务器:
root@ubuntu:~# service tomcat restart
这样我们就开启了tomcat的Apr协议,可以查看一下log文件:
root@ubuntu:~/opt/apache-tomcat-9.0.10/conf# vi ../logs/catalina.2018-07-25.log
如果可以找到下面的描述并且下面没有错误,就说明Apr协议的https连接器成功启动了:
25-Jul-2018 10:17:49.003 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["https-openssl-apr-8443"]