Log abount Nginx build with openssl 1.1.1 on Debian jessie

开始操作之前,之前已经使用letsencrypt提供的证书配置Nginx来支持https + HTTP2了。

是这样子的,之前我的小站已经使用letsencrypt提供数字加密证书来支持https了,然后呢,最近不是从v站上面也学来一些新姿(知)势(识)嘛,也就是brotli + 0-RTT(early data) + HTTP/2 + server push + https,使得网站加载速度提升嘛,所以呢也要对这一新技术进行尝鲜。因为之前网站已经是HTTP/2 + https + gzip,所以呢这次主要工作就是Nginx弃用gzip,启用brotli + 0-RTT(early data)brotli是Google的开发并在Github上面开源的Nginx模块,名字是ngx_brotli,而0-RTT(early data)openssl 1.1.1提供的features之一。

然后呢,之前vps上面部署本小站的时候,都是下面这样子按部就班安装Nginx的:

1
2
3
4
$ curl -fsSL http://nginx.org/keys/nginx_signing.key -o - | sudo apt-key add -
$ echo -e "deb http://nginx.org/packages/debian/ $(lsb_release -cs) nginx
deb-src http://nginx.org/packages/debian/ $(lsb_release -cs) nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
$ sudo apt-get update && sudo apt-get install nginx

vps的系统使用的Linux发行版是Debian8 x86_64,然后这样子的方式呢,得到的nginx版本是stable version(1.14.1)的,但是Debian8openssl版本是要低于1.1.1,并且Nginx也不支持brotli,同时还不支持在Nginx的配置文件中使用ssl_early_data,这个选项就是为了支持0-RTT的。那么如何得知不支持呢,点这儿

那么,从这一链接得知,1.15才支持0-RTT,那么就需要安装mainline version的Nginx了,但是通过上面的方式是行不通了,因为Debian8上面的openssl版本是OpenSSL 1.0.1t 3 May 2016,但是如果不确定的服务器上面的是这个版本,可以执行如下命令得知:

1
$ openssl version

换另一种方式安装(手动编译以及安装)

更改Nginx源(source)

当时google一番,最后得到几个链接,但是没发现有Debian8的,可能是我的关键词没用对吧。但搜到ubuntu 18.04的也OK了,反正Ubuntu也是debian-like的嘛,那就用着吧。但需要更改Nginx的软件源:

1
2
3
$ echo -e "http://nginx.org/packages/mainline/debian/ $(lsb_release -cs) nginx
deb-src http://nginx.org/packages/mainline/debian/ $(lsb_release -cs) nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
$ sudo apt-get update

然后换一种方式安装Nginx,之前的安装方式也还是不支持brotli的,那么就需要编译安装了。

我没有完全跟着ubuntu 18.04上面的步骤,但也都还是大同小异吧。

我选择在自己的主目录下进行相关操作:

1
2
3
4
5
6
7
8
9
10
11
$ mkdir build && cd build
$ sudo apt-get source
$ ls -l
$ cd nginx-1.15.6 # writing this artile at that time
$ wget https://www.openssl.org/source/openssl-1.1.1.tar.gz # download openssl
$ tar zxvf openssl-1.1.1.tar.gz # extract openssl
$ mv openssl-1.1.1 openssl
$ git clone https://github.com/google/ngx_brotli.git
$ pwd
/home/Username/build/nginx-1.15.6/ # Username is your username.
$ vim debian/rules

在打开的文件里面第41行的末尾空格加上/home/username/build/nginx-1.15.6/openssl --add-module=/home/username/build/nginx-1.15.6/ngx_brotli,同理46行也加上,虽然那个选项是用于编译出调试版的Nginx的。

开始编译(compile)

这里对应ubuntu 18.04链接里面的第4步。

1
$ sudo dpkg-buildpackage -b

如果出现跟第四部中相同的错误,跟着做就是了,我当时也是有这个错误。按着这个做了,就编译通过了。

编译完了之后,就是安装了。在buill目录下面可以找到编译并且打包之后的安装包,.deb结尾的,类似这样子的nginx_1.15.6-1~jessie_amd64.deb,其中带dbg,是调试版本的Nginx

安装、配置、重启

安装(installation)

1
2
$ sudo apt-get remove nginx -y  # keep old configuration file,want to remove them, them use purge instead of remove.
$ sudo apt-get install nginx_1.15.6-1~jessie_amd64.deb

配置(configuration)

配置1
配置2, Nginx-doc

重启(restart)

1
$ sudo nginx -t && sudo nginx -t reload  # After execution, having a problem and displays later.

总结(Conclusion)

总结通过这样子的方法安装,还保留有原来的那种服务启动方式,而且还可以在相同服务器之间进行共享。

References: