Ubuntu 14.04开启nginx http2支持的方法

再过不到两个月,Ubuntu18.04就要出来了,但是手上还有一些老机器还停留在14.04?:

没有足够的时间和动力来升级这几台老机器,但是一些常用的软件准备顺手升级一下。最基本的自然是升级nginx支持http2. http2的优势可以参见《当我们在谈论HTTP队头阻塞时,我们在谈论什么?》以及《低延迟与用户体验杂谈》

Ubuntu 14.04开启nginx http2支持的前置条件

  1. nginx >=1.9.5
  2. openSSL >= 1.0.2

第一个条件大家一般都不会漏掉。但是第二个条件一般是http2无法成功开启时才发现。这是因为随14.04一起分发的openSSL版本是1.0.1f. 那么要开启http2支持,有两种方式:

  1. 使用他人编译好的ngingx with http2 support package安装;
  2. 升级本地openSSL版本,然后从源码编译安装。

而随Ubuntu 18.04一起分发的openSSL版本为1.1.0g, 因此不存在这个问题。

使用packaege安装(懒人专用)

这里需要注意一下,很多为提供14.04提供nginx安装包的源虽然可以让你安装更高版本的nginx,但是大多是使用openSSL 1.0.1编译的,因此无法支持http2, 比如jessis, nginx mainline为14.04提供的安装包是使用1.0.1编译的,因此不支持http2的。这里我们使用ondrej提供的源。

  • 卸载已经安装的nginx(会保留配置文件,take is easy):

  • 添加ondrej nginx安装源:

如果出现如下错误:

应该是终端编码问题,尝试使用LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/nginx解决。

  • 更新源,并安装:

从源码安装

修改nginx配置开启http2

设置nginx支持http2最关键是在https端口添加http2指令:

一个网站的参考配置模板如下:

小结

nginx开启http2的支持不要忘记了对openSSL最低版本的要求。其实http2已经不再时髦啦,http2+TLS1.3才是未来,可以参见《低延迟与用户体验杂谈》。后面会讲讲docker+nginx开启http2和TLS1.3的方式,这种方式即可以方便的尝试各个nginx版本,同时也不会破坏本地的nginx环境。

Linode镜像迁移部署后启动失败的解决方法

为了测试Linode各个机房的速度,把系统镜像在不同DC进行Clone部署测试(Linode后台的Clone功能挺好用,速度方面,各个DC之间拷贝镜像大概在5 ~ 10MB/s)。但是,从Tokyo搬到Singapore拷贝的第一个镜像就启动不起来。

看了下,推断是虚拟类型不同(日本东京是Xen, 新加坡是KVM),造成磁盘lable不同,磁盘挂载失败。

解决办法:

  1. 通过Linode管理后台的Rescue进入系统;
  2. sudo vim /etc/fdtab。根据自己VPS当前的虚拟类型和磁盘分配进行配置,一般这个文件里面配置了两个目录。但是,我的镜像搬移过来尝试启动一次失败后,这个文件内容已经为空, sigh… 下面是fstab文件的基本格式,可根据自己磁盘情况参考配置:

  1. fstab文件的具体介绍和配置可以参考wiki;
  2. 配置完成后,保存文件,正常启动即可。