type
status
date
summary
slug
tags
category
password
URL
icon
背景介绍
最近想把一个项目升级到HTTP2,与升级HTTP2相关的各个组件的版本信息如下
- springboot 2.1
- tomcat 9.0
- JDK 1.8
- Ubuntu 18.04
准备工作
首先,查阅springboot官网上的文档,看如何升级到HTTP2,
。
文档中提到,springboot项目要支持HTTP2,将配置文件中的server.http2.enabled设置为true就可以了,但是要看具体的版本。除此之外,springboot中的HTTP2是要基于SSL协议的,也就是需要基于HTTPS进行升级,而不能直接从HTTP进行升级。接下来,我们看具体的情况。
文档中提到,如果我们项目中使用的http服务器是Undertow,且版本高于1.4.0,那么在JDK1.8环境下无需其它操作,直接修改上面的配置文件就可以。
使用Jetty的话,如果版本是9.4.8加入上述依赖后即可支持HTTP2。
文档中提到,Tomcat9.0是支持HTTP2的,但是需要JDK的版本是1.9,项目中使用的是JDK1.8,需要安装libtcnative库以及相应的依赖。否则的话只能使用基于SSL的HTTP1.1。
不管使用哪种方式,都需要基于SSL协议,因此,我们需要去为项目申请证书。
这里,我使用
来申请免费的证书。申请证书前,需要先准备好自己的域名和一个邮箱,在为域名申请证书的时候需要邮箱的账号。申请的过程中,FreeSSL需要你下载一个KeyManager软件,申请好的证书会存放到这个软件中。
打开软件后,选择你申请的那个证书,进行导出。导出界面如下所示
我选择导出为jks格式的,私钥加密密码需要设置一下并记住,因为一会儿会用到。
导出后,将jks文件复制到项目中的resources文件夹内。添加如下配置语句
key-store-password是密钥库的密码,key-password是密钥库内该证书的加密密码,这两个密码在这种情况下都是一样的,是在导出jks文件是自己设置的密码。
目前位置,准备工作就做好了,现在开始设置web服务器来支持HTTP2
配置Tomcat所需的库
这里,我选择文档中的第三种方法,即安装libtcnative库以及相应的依赖。
找到Tomcat的官方文档,里面有说明如何安装libtcnative库。
文档中提到,在安装libtcnative之前,需要先安装一下依赖。
- APR library
- OpenSSL libraries
- JDK
除了安装官方文档中提到的这三个依赖外,实际安装时还需要提前安装gcc和Tomcat。
这里我使用的是Ubuntu18.04,在该环境下,以上依赖的安装方式如下所示;
如果以上步骤全部运行成功的话,我们会在tomcat的lib目录下看到libtcnative-1.so这个文件,然后执行tomcat的启动脚本
启动后,查看启动日志
如果有输出如下信息
证明依赖安装成功了。
如果没有出现此信息,那就把libtcnative-1.so文件所在路径加入到系统环境变量中,该变量生效后即可成功运行。
临时添加环境变量的方式,这种方式的环境变量仅在该终端下有效。
如果想设置永久的环境变量,可以把上面的语句添加到~/.bashrc(只对当前用户有效)或者profile文件(针对所有用户有效)。
然后我们就可以把项目打包部署到云主机上了。
项目打包部署
我的项目里有两个模块,每个模块里都有一个启动项,其中一个项目依赖于另一个项目。如果项目只有一个启动项,那么打包很容易。或者两个含有启动项的模块之间互相没有依赖关系,那样也很容易打包。
我在网上搜到一些方法,但是采用这些方法的话,都会报错,要不提示依赖缺失,要不提示主清单属性不存在。因此,我采用以下方法打包。
首先,假设模块A依赖模块B,即模块A中需要模块B中的某些类。在用maven打包时,先将模块B的pom文件中build的属性改为如下
除此之外,由于模块A在引入依赖时,会顺带引入模块B中的依赖,因此需要将模块B中A用不到的依赖给排除掉,否则也会报错。
在修改(复制粘贴)pom文件后clean时提示pom文件出错的,有可能是由非法的空格,建议仔细检查自己修改的部分。
然后执行clean操作后,用父工程中的pom文件进行打包操作,这样生成的模块A的jar文件就可以征程运行了。获得了模块A的jar文件后,复制到其它地方,然后将模块B中pom文件build的<skip>属性给注释掉,然后clean再用父工程的pom文件打包,即可获取B模块的jar文件。这样就可以正常部署到云服务器上了。
部署完成之后,可以在
网站检测自己的网站是否成功支持HTTP2。如下图所示
以上就是升级的全过程,有问题的话欢迎留言。
参考资料
- 作者:luxinfeng
- 链接:https://www.luxinfeng.top/138b03078c294437aec4b7f09d915b25
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。