将宝塔面板的 nginx 升级到 1.13.8并启用TLSv1.3

2017年04月25日发布的nginx 1.13.0支持了TLSv1.3,而TLSv1.3相比之前的TLSv1.2、TLSv1.1等性能大幅提升。而宝塔面板目前的nginx版本是1.12.1,在nginx官网的最新版本是1.13.8,所以我迫不及待地将nginx升级到最新版1.13.8。下面记录如何升级nginx,本文基于CentOS Linux 7.4.1708 (Core),其他的操作系统略有不同。

获得宝塔 nginx 的编译参数

nginx -V

image从图中可以看出他的版本号和配置文件路径和添加的模块路径都在/www/server下, 其中/www是宝塔默认安装路径, server 则是宝塔存服务端和配置文件的路径, 于是确定了这是宝塔的 nginx, 将 configure arguments: 后面的参数 cpoy 下来, 后面需要用到.

下载 nginx 1.13.8

这部分很简单, 就不截图了, 直接贴命令

wget http://nginx.org/download/nginx-1.13.8.tar.gz
tar zxvf nginx-1.13.8.tar.gz

你也可以去 nginx 官网找最新版, 但是版本号差很多的话我不确定是否能用.

编译 nginx

直接给出命令, 其中./configure后面那一串就是刚刚 copy 的 configure arguments: 后面的参数 (保险起见请 copy 自己的那一段参数)

cd nginx-1.13.8
./configure--user=www --group=www --prefix=/www/server/nginx --with-openssl=/www/server/nginx/src/openssl --add-module=/www/server/nginx/src/ngx_devel_kit --add-module=/www/server/nginx/src/lua_nginx_module --add-module=/www/server/nginx/src/ngx_cache_purge --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-http_gunzip_module --with-stream --with-stream_ssl_module --with-ipv6 --with-http_sub_module --with-http_flv_module --with-http_addition_module --with-http_realip_module --with-http_mp4_module --with-ld-opt=-Wl,-E --with-ld-opt=-ljemalloc
make

这里说明下, 首先是运行./configure之后会有 ipv6 的警告, 这个可以不用理会, 直接 make 编译.

安装

这里需要注意, 不要直接make install, 这样可能会覆盖一些配置文件, 先通过find / -name nginx查找当前服务器里名为 nginx 的文件或目录.image

这里可以看到在/www/server目录里有几个叫 nginx 的文件或目录, 其中最可疑的就是/www/server/nginx/sbin/nginx , 直接执行/www/server/nginx/sbin/nginx -V可以看到 nginx 的版本和参数都和宝塔 nginx 的一样, 可以确定这就是宝塔的 nginx.image

然后使用 cp 命令将编译好的新版本覆盖掉宝塔的 nginx.

cp objs/nginx /www/server/nginx/sbin/nginx

这里要注意, 如果提示文件正忙需要先去宝塔停止 nginx 之后再覆盖, 覆盖后再打开 nginx, 如果没有提示文件正忙直接覆盖后去面板点击重载配置.

其它提示

宝塔 nginx 路径可能会变更, 如果发现路径不是/www/server/nginx/sbin/nginx的话, find 找到的每个都加 -V 试一下.
nginx 编译时的./configure参数中的 openssl 需要使用宝塔自带的 openssl 那个路径, 之前我使用了自己下载的新版, 编译时提示 lua 错误, 具体原因不知.
上面的 cp 命令中的 objs/nginx 是自己编译后的 nginx,nginx 编译后文件会生成在编译目录的 objs 目录里.

在nginx中启用TLSv1.3

我们到网站的 nginx 配置中,找到如下的配置:

ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

我们只需要把 TLSv1.3 加到 ssl_protocols 后面,同時添加TLSv1.3可以使用的加密套件即可:

ssl_ciphers "TLS13-AES128-GCM-SHA256:TLS13-AES256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES128-CCM-SHA256:TLS13-AES128-CCM-8-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;

保存并重启nginx。

验证nginx是否支持TLS 1.3

我们可以通过 nginx -t 命令来验证nginx是否支持TLS 1.3:

如果nginx支持TLS 1.3,将会输出下面的信息

[root@VM_95_137_centos ~]$ nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

如果nginx不支持TLS 1.3,将会输出下面的信息

[root@mlsha.cn /data/log]$  nginx -t
nginx: [warn] invalid value "TLSv1.3" in /etc/nginx/conf.d/default.conf:12
nginx: configuration file /etc/nginx/nginx.conf test failed

现在你已经在nginx正确地启用了TLS 1.3;但是如果你的OpenSSL版本没有升级到1.1.1的draft-18分支版本也是不支持的。也就是说,虽然我们在nginx启用了TLS 1.3,但实际上最终网站还是使用TLS 1.2 及以下版本进行连接,还需要升级OpenSSL以及开启浏览器对TLS1.3的支持才行.

相关推荐

发表评论

电子邮件地址不会被公开。 必填项已用*标注

微信扫一扫,分享到朋友圈

将宝塔面板的 nginx 升级到 1.13.8并启用TLSv1.3
返回顶部

显示

忘记密码?

显示

显示

获取验证码

Close