保护私人版权,尊重他人版权。转载请注明出处并附带页面链接
注意:warning !执行下面操作前建议先 备份好nginx 配置文件 以及 nginx 可执行文件 !!!
- nginx三种发行版本选择在nginx官方罗列出三种大版本,有些小伙伴可能一开始不知道如何选择,如下:
Mainline version 主线版本
Stable version 稳定版–一般正式环境就用这个
Legacy versions 历史版本
网址:http://nginx.org/en/download.html
wget http://nginx.org/download/nginx-1.16.1.tar.gz
解压 tar -xf nginx-1.16.1.tar.gz
如果只需要 nginx 关联,其他地方不升级这个的话可以不做这一句,下载解压就可以了 ./config –prefix=/usr/local/openssl #如果此步骤报错,需要安装perl以及gcc包
make && make install
解压 tar -xf openssl-1.1.1d.tar.gz
- 查看一下nginx 版本 nginx -V 看一下以前的配置
1 | nginx version: nginx/1.12.2 |
./configure –prefix=/usr/local/nginx –with-http_ssl_module –with-openssl=/root/openssl-1.1.0f/ –user=nobody –group=nobody
参考以前的 configure arguments 待会编译的时候 会用到 ,只需要将你的 /root/openssl-1.1.0f/ 替换为你刚下载解压好的openssl目录就可以了,修改好如下:
1 | 在解压好的nginx-1.16.1的目录下执行下面两个语句 |
- 查看更新后的版本 nginx -V,如果符合预期
重启
1 | 第一步 |
如果遇见如下报错,是因为没有使用/path/nginx -c来启动nginx,而是直接使用nginx环境变量启动的进程,而nginx是不读取path环境变量的
execve() failed while executing new binary process “nginx” (2: No such file or directory)
这样子你就没办法平滑启动了,只能在人少的时候关闭后再重新启动
修改nginx 站点配置文件
- 修改 ssl_protocols,可以用下面语句(搜索匹配ssl_protocols,然后整行替换,建议将
grep -rl "ssl_pro" *
改成指定文件先测试一下,避免复制有问题导致全部文件出问题,同时建议先备份配置文件)
1 | sed -i --follow-symlinks "/^.*ssl_protocols/c\ ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;" `grep -rl "ssl_pro" *` |
- 修改 ssl_ciphers ,这个同上,加密方式改变
1 | sed -i --follow-symlinks "/^.*ssl_ciphers/c\ ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256::\!MD5;" `grep -rl "ssl_cip" *` |
- 改完后使用 nginx -t 检查是否有问题,没问题就执行 nginx -s reload
- 然后可以使用
myssl.com
这个网站进行检测 tls是否已经支持到了tlsv1.3
PS:墙裂建议 使用 ‘nginx绝对路径’ + ‘c’ + ‘nginx.conf 绝对路径’ 启动 nginx ,支持平滑升级,避免停服升级的窘境
在升级重启过程中遇到的一些问题
- 以前老版本nginx 配置了
ssl on;
,升级版本后执行会报错,需要注释掉ssl on
1
2[root@web4 nginx]# nginx -t
nginx: [warn] the "ssl" directive is deprecated, use the "listen ... ssl" directive instead in - ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3 需要本机器的全部站点的配置文件都加上TLSv1.3 这样才会使用 TLSv1.3 ,如果这么做
不一定
能用到TLSv1.3 ,emmm…就是这么坑