在centos上使用tomcat8配置支持http2.0的时候,server.xml的配置文件里面有这么一段配置:

  <Service name="Catalina">
    <Connector port="8080"
              protocol="org.apache.coyote.http11.Http11AprProtocol"
              connectionTimeout="20000"
              redirectPort="8443"
              maxThreads="1000"
              minSpareThreads="20"
              acceptCount="1000"
              maxHttpHeaderSize="65536"
              debug="0"
              disableUploadTimeout="true"
              useBodyEncodingForURI="true"
              enableLookups="false"
              URIEncoding="UTF-8" />

但是启动tomcat报错如下:

tomcat-err.png

这是因为配置里面指定使用协议是org.apache.coyote.http11.Http11AprProtocol,即需要用APR运行模式,但这并不是tomcat默认的运行模式(此外还有bio和nio模式),需要额外安装apr和native的包才行。

1 需要安装的包

  • openssl-1.0.2(支持http2.0的话需要1.0.2以上版本)

  • apr

  • apr-util

  • tomcat-native(这个包在tomcat的bin目录下带的有)

2 安装openssl-1.0.2

cd /usr/local/src
tar -zxf /usr/local/src/openssl-1.0.2e.tar.gz
cd /usr/local/src/openssl-1.0.2e
./config -fPIC --prefix=/usr/local/openssl-1.0.2e
make
make install

#制作软链接
ln -s /usr/local/openssl-1.0.2e/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl-1.0.2e/include/openssl /usr/include/openssl

注意,在./config时要加上选项-fPIC,不然到后面安装tomcat native包的时候会报错。另外,不用–profix指定安装目录的话,默认应该是安装在/usr/local/ssl目录。

3 安装apr和apr-util

  • 安装apr

cd /usr/local/src
wget http://mirror.bit.edu.cn/apache//apr/apr-1.7.0.tar.gz
tar zxvf apr-1.7.0.tar.gz
cd apr-1.7.0
./configure --prefix=/usr/local/apr
make &&make install

安装时报rm: cannot remove ‘libtoolT’: No such file or directory的错

解决方法:

vim configure 配置文件,找到RM='$RM'这一行 修改为RM='$RM -f',修改完成后保存可解决。

  • 安装apr-util

cd /usr/local/src
wget http://mirror.bit.edu.cn/apache//apr/apr-util-1.6.1.tar.gz
tar zxvf apr-util-1.6.1.tar.gz &&cd apr-util-1.6.1
./configure --with-apr=/usr/local/apr
make &&make install

安装apr-util报错 xml/apr_xml.c:35:19: fatal error: expat.h: No such file or directory

解决方法:  yum install -y expat-devel*

  • 上面安装完后设置下环境变量:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib

也可以将/usr/local/apr/lib包路径添加到/etc/ld.so.conf文件:

echo "/usr/local/apr/lib" >> /etc/ld.so.conf

4 安装tomcat native

我使用的是tomcat-8.5.31,在它的bin目录下面就有一个tomcat-native.tar.gz包,将其解压后进行编译安装:

cp /usr/share/tomcat8/bin/tomcat-native.tar.gz /usr/local/src/
cd /usr/local/src/ &&tar zxf tomcat-native.tar.gz
cd tomcat-native-1.2.16-src/native/
./configure --with-apr=/usr/local/apr --with-java-home=/usr/java/jdk1.8.0_171-amd64 --with-ssl=/usr/local/openssl-1.0.2e
make &&make install

–with-ssl这个参数写成–with-ssl=yes好像也可以。

安装上面这些包之后,再重启tomcat就可以正常运行。