w3ctech

Ubuntu 升级安装Nginx 与 OpenSSL

为了让服务器支持HTTP/2,所以Nginx 的版本需要大于1.9.5,同时OpenSSL的版本需要大于1.0.2j,所以我就开始了升级之旅,OpenSSL我是用的源码编译的方式,还算顺利,直接搞定了,但是我升级Nginx的时候,最开始也采用了源码编译,虽然安装成功,但是替换系统原有版本的时候出了些状况,所以最后发现还是直接使用命令行安装的方式靠谱,所以现在我将升级安装Nginx和OpenSSL的方法记录一下,同时帮助自己以后查询,也分享给大家,欢迎大家和我一起交流讨论。

Ubuntu 升级安装Nginx 与 OpenSSL

Nginx升级安装:

我的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更详细的情况:

$ 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

好了,暂时告一段落,我还将继续探索学习,如果有什么新的内容,我将继续更新。

OpenSSL升级

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微信

扫码关注w3ctech微信公众号

共收到4条回复

  • 管理员是哪位啊, 注册的帐号没有发认证邮件, 怎么处理.

    回复此楼
  • @Angel 认证了,你退出重新登录一下,就可以了!

    回复此楼
  • @裕波 还是不行

    回复此楼
  • @Angel 不太可能呀,你退出重新登录了吗?

    回复此楼