Nginx版本升级以及后续遇到的问题

2,126 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

Nginx版本升级步骤

前言:之前我的nginx版本是1.60,因为版本过低,服务器被木马入侵了,于是着手升级nginx版本。

Yum源升级法

首先我的系统是centos7,需要在nginx.org官网找到适合的分支,来下载适合系统的包。

然后在nginx.repo中写入, 首先用vim创建它:

vim /etc/yum.repos.d/nginx.repo

输入url:

   name=nginx repo
   baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/ 
   gpgcheck=0 
   enabled=0

使用yum升级:

    yum update --enablerepo=nginx nginx

然后yes即可。

image.png

这里可以看到yum升级完成了:

微信截图_20220112110915.png

此外,我这边nginx版本没有改变,是因为我使用的是系统里由gcc编译的nginx。接下来介绍这个nginx该如何升级。

gcc编译升级

首先要备份自己的配置文件(非常重要):

   cd /usr/local/nginx/conf
   cp nginx.conf nginx.conf.backup

然后要去nginx.org选择自己想要的版本,nginx.org/en/download…

image.png

这里可以用wget下载下来:

    wget http://nginx.org/download/nginx-1.20.2.tar.gz

解压:

    tar -zxf nginx-1.20.2.tar.gz

进入文件夹里面:

    cd nginx-1.20.2/

设置*.configure*, 这里就按照你的想法来了:

    .configure --prefix=/usr/local/nginx --with-http_stub_status_module 
    --with-http_v2_module --with-http_ssl_module

image.png

设置完成后,编译即可:

    make & make install

这样就做完了,如下:

image.png

最后查看下配置文件.这就是gcc编译升级nginx的方法.

如果配置文件出问题了,用原本的备份替换掉nginx.conf

    mv nginx.conf.backup nginx.conf

升级完成.

nginx.conf 出错的情况

最后的部分, 谈下因为我没备份, nginx.conf出问题的情况(😂)

image.png

可以看到,我的nginx无法重启,因为找不到ngixn.pid,所以无法重启reload nginx. 我试过了网上的方法:

    /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

但是failed了,因为nginx仍在运行.

image.png

而这时候,

    nginx -t

image.png

没什么问题.

我用vim修改了下nginx.conf,

image.png

这时候错误变成了:

image.png

无效的PID number,这时候我在用网上的方法,仍然出错:

image.png

于是我尝试将nginx的pid写入到nginx.pid中

    ps aux | grep "nginx: master porcess nginx" | grep -v pts | awk '{print $2;}'

这里需要注意的是“nginx:”之后的信息,要按照你的本地显示的来

echo `ps aux | grep "nginx: master process nginx" | grep -v pts| awk '{print $2;}'` 
> /usr/local/nginx/logs/nginx.pid

image.png

    nginx -s reload

可以发现已经没问题了。

nginx无法启动

如果使用

   nginx -s stop

nginx.pid中的pid会失效,这时候使用reopen会出错。

image.png

使用ps可以看到nginx进程已经消失了。

这时候要使用

    /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

指定一下nginx启动设置。

image.png

这时候“nginx:”之后的已经改变了。

但为什么后面还跟着/usr/local/nginx/sbin/nginx这种东西呢?之前好像是没有的,猜测是启动信息?

Nginx配置

www.digitalocean.com/community/t… 可以配置高性能安全稳定的Nginx服务器.

而上述的问题导致了:

image.png

无法重新加载Nginx服务器

而且也出现了

    certbot certonly --webroot -d example.com --email info@example.com 
    -w /var/www/_letsencrypt -n --agree-tos --force-renewal

这个命令无法完成, 从而无法配置SSL证书.

image.png