为了让服务器支持HTTP/2,所以Nginx 的版本需要大于1.9.5,同时OpenSSL的版本需要大于1.0.2j,所以我就开始了升级之旅,OpenSSL我是用的源码编译的方式,还算顺利,直接搞定了,但是我升级Nginx的时候,最开始也采用了源码编译,虽然安装成功,但是替换系统原有版本的时候出了些状况,所以最后发现还是直接使用命令行安装的方式靠谱,所以现在我将升级安装Nginx和OpenSSL的方法记录一下,同时帮助自己以后查询,也分享给大家,欢迎大家和我一起交流讨论。
我的Ubuntu的系统为14.04,通过apt-get install 安装的Nginx版本为1.4.6,如下:
1、在命令行输入如下:
$ sudo apt-get update
$ sudo apt-get install nginx
$ nginx -v
nginx version: nginx/1.4.6 (Ubuntu)
你会发现默认安装的版本是1.4.6,这个版本无法支持HTTP/2,所以我需要升级他,升级方法如下:
1、下载签名文件nginx_signing.key, 并将其添加到apt key
$ sudo wget http://nginx.org/keys/nginx_signing.key
$ sudo apt-key add nginx_signing.key
2、修改sources.list
$ sudo vi /etc/apt/sources.list
将以下两行加入到sources.list文件中,注意修改codename为对应的值
deb http://nginx.org/packages/mainline/ubuntu/ codename nginx
deb-src http://nginx.org/packages/mainline/ubuntu/ codename nginx
注:上面的codename 记得更新,codename 的值如下表,可以选择
系统版本 | Codename | 支持平台 |
---|---|---|
12.04 | precise | x86_64, i386 |
14.04 | trusty | x86_64, i386, aarch64/arm64 |
15.10 | wily | x86_64, i386 |
16.04 | xenial | x86_64, i386 |
url 中的“/mainline”表示最新的主线版线,如果删掉以后,将下载最新的稳定版本。具体的本版情况,可查看官方地址:http://nginx.org/en/download.html
3、执行以下命令,开始安装
$ sudo apt-get remove nginx-common
$ sudo apt-get update
$ sudo apt-get install nginx
4、Run NGINX Open Source:
$ sudo nginx
5、验证nginx版本,命令如下:
$ nginx -v
nginx version: nginx/1.11.5
使用以下命令查看Nginx更详细的情况:
$ nginx -V
nginx version: nginx/1.10.2
built by gcc 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3)
built with OpenSSL 1.0.2j 26 Sep 2016
TLS SNI support enabled
你可以看到Nginx的详细版本,包括基于gcc和OpenSSL哪个版本进行built的。
你可以已经发现我这里的Nginx比我上面的低了,是因为我重新编译了一次,选择了一个稳定版本,我为啥要重新编译呢?
是因为我上面使用apt安装的时候,我的OpenSSL的版本不是我给升级后的,我之前编译出了一些状况,其实编译成功了,但是并没有替换系统的,是因为我当时在./configure的时候相关参数路径不对,还好的是,nginx -V
这个命令是可以看到configure的参数的,所以我复制了这个参数进行重新编辑,但是需要注意的时候,我之前新版本中并没有最关键的--with-openssl
,所以需要自己加上,还需要删掉一些,下面我就来说下具体的步骤:
1、OpenSSL已经是我们想的新版本情况下,开始获取Nginx的源码并解压:
$ sudo wget http://nginx.org/download/nginx-1.10.2.tar.gz
$ sudo tar -zxvf nginx-1.10.2.tar.gz
$ cd nginx-1.10.2
关于获取具体的哪个版本,请参看上面我提到的链接。
2、开始./configure
$ sudo ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --with-openssl=/openssl-1.0.2j --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module
3、开始编译Nginx
$ sudo make
$ sudo make install
4、sudo nginx
$ sudo nginx
5、验证Nginx
$ nginx -V
nginx version: nginx/1.10.2
built by gcc 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3)
built with OpenSSL 1.0.2j 26 Sep 2016
TLS SNI support enabled
configure arguments:...
6、启动Nginx
$sudo /etc/init.d/nginx start
好了,暂时告一段落,我还将继续探索学习,如果有什么新的内容,我将继续更新。
1、安装make(根据你系统实际情况决定是否安装)
$ sudo apt-get install make
2、下载你需要的OpenSSL版本,我的版本是 1.0.2j
$ sudo wget https://www.openssl.org/source/openssl-1.0.2j.tar.gz
注:在OpenSSL官网查看你需要的版本:https://www.openssl.org/source/
3、解压下载的OpenSSL压缩包
$ sudo tar -xzvf openssl-1.0.2j.tar.gz
4、开始编辑OpenSSL
$ cd openssl-1.0.2j
$ sudo ./config
$ sudo make install
5、建立软链
sudo ln -sf /usr/local/ssl/bin/openssl openssl
6、版本验证
$ openssl version -v
OpenSSL 1.0.2j 26 Sep 2016
看到版本号为1.0.2j,更新成功!
2017年1月11日更新:
如果当你执行以上命令时,遇到下面的错误:
openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or director
请不要惊慌,也不要去查找如何安装,其实这些文件就在你编译的openssl目录下,你只需要将其中两个文件cp到系统目录就好,如下操作:
$ sudo cp libssl.so.1.1 /lib/x86_64-linux-gnu
$ sudo cp libcrypto.so.1.1 /lib/x86_64-linux-gnu
好了,你在执行openssl的命令看看?
扫码关注w3ctech微信公众号
共收到4条回复