完整的记录一下Nginx的升级流程

完整的记录一下Nginx的更新流程

在看后续内容之前,我要提醒一下,为了方便,我在文章中使用的都是root用户,但这是很危险的行为,实际上你可能只需要在make install和关闭/启动nginx的时候需要root权限。

1 确定正在运行的nginx使用的配置文件和可执行文件

1.1 旧版本的配置文件的路径

通过nginx进程的pid去定位正在运行的nginx可执行文件路径和它使用的配置文件,

使用ps aux | grep nginx命令找到正在运行的nginx进程:

[root@cgp6g196 ~]# ps aux | grep nginx
root     17895  0.0  0.0  46004  1152 ?        Ss   11:03   0:00 nginx: master process ./nginx -c /usr/local/nginx/conf/nginx.conf
nginx    17896  0.0  0.0  46476  2404 ?        S    11:03   0:00 nginx: worker process
nginx    17897  0.0  0.0  46476  2432 ?        S    11:03   0:00 nginx: worker process
nginx    17898  0.0  0.0  46476  2400 ?        S    11:03   0:00 nginx: worker process
nginx    17899  0.0  0.0  46476  2404 ?        S    11:03   0:00 nginx: worker process
root     30561  0.0  0.0 112812   968 pts/3    S+   14:03   0:00 grep --color=auto nginx

注意看输出结果中的第一行结尾部分,nginx: master process表示这个是nginx的主进程,也就是我们要找的进程,

后面的./nginx -c /usr/local/nginx/conf/nginx.conf就是上次启动nginx使用的命令,上次启动时使用的参数一定要保存好,之后还要使用。

1.2 旧版本的可执行程序路径

上面的输出结果的第二列表示进程的pid,比如我上面的nginx的主进程的pid就是第一行的17895

执行cd /proc/<nginx主进程pid>,进入保存进程信息的文件夹,用ls -l命令就可以查看到可执行文件的路径:、

[root@cgp6g196 ~]# cd /proc/17896
[root@cgp6g196 17896]# ls -l
total 0
dr-xr-xr-x 2 nginx nginx 0 Aug 17 14:20 attr
-rw-r--r-- 1 nginx nginx 0 Aug 17 14:20 autogroup
-r-------- 1 nginx nginx 0 Aug 17 14:20 auxv
-r--r--r-- 1 nginx nginx 0 Aug 17 14:20 cgroup
--w------- 1 nginx nginx 0 Aug 17 14:20 clear_refs
-r--r--r-- 1 nginx nginx 0 Aug 17 13:59 cmdline
-rw-r--r-- 1 nginx nginx 0 Aug 17 14:20 comm
-rw-r--r-- 1 nginx nginx 0 Aug 17 14:20 coredump_filter
-r--r--r-- 1 nginx nginx 0 Aug 17 14:20 cpuset
lrwxrwxrwx 1 nginx nginx 0 Aug 17 14:20 cwd -> /usr/local/nginx/sbin
-r-------- 1 nginx nginx 0 Aug 17 14:20 environ
lrwxrwxrwx 1 nginx nginx 0 Aug 17 14:20 exe -> /usr/local/nginx/sbin/nginx # 这里‘->’后面的就是可执行文件
dr-x------ 2 nginx nginx 0 Aug 17 14:20 fd
dr-x------ 2 nginx nginx 0 Aug 17 14:20 fdinfo
-rw-r--r-- 1 nginx nginx 0 Aug 17 14:20 gid_map
-r-------- 1 nginx nginx 0 Aug 17 14:20 io
-r--r--r-- 1 nginx nginx 0 Aug 17 14:20 limits
-rw-r--r-- 1 nginx nginx 0 Aug 17 14:20 loginuid
dr-x------ 2 nginx nginx 0 Aug 17 14:20 map_files
# ...
# 文件夹里内容还有很多,就不一一列出了

进入文件夹后,应该可以看到一个名为exe的软连接,它指向的就是该进程使用的可执行文件路径,也就是我们要找的nginx。

2 编译新版本的nginx

直接在这里下载想要的nginx版本即可:nginx下载

下载后解压备用,在正式编译之前,我们还需要知道之前的nginx编译的时候使用了那些配置参数。

上一步我们得到了正在运行的nginx可执行文件路径,使用<nginx可执行文件> -V命令:

[root@cgp6g196 ~]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.24.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
# 下面这一行表示执行配置时添加的参数
configure arguments: --prefix=/vol-th/home/xxx/xxx/nginx-1.24.0/install --with-http_stub_status_module --with-http_ssl_module

上面的最后一行就列出我在上次编译使用的参数,分别是:

  • –prefix=/vol-th/home/xxx/xxx/nginx-1.24.0/install

  • –with-http_stub_status_module

  • –with-http_ssl_module

不同情况下使用的参数可能不同,后面两个--with-<模块名>_module之类的都是表示编译时添加的模块。

继续正题进入到之前解压好nginx文件夹下,依次执行./configure <配置参数>makemake install

[root@cgp6g196 nginx-1.24.0]# ./configure --prefix=/vol-th/home/xxx/xxx/nginx-1.24.0/install --with-http_stub_status_module --with-http_ssl_module
# ...一堆输出,没有报错就行
[root@cgp6g196 nginx-1.24.0]# make
# ...同样一堆输出,没有报错就行
[root@cgp6g196 nginx-1.24.0]# make install
# ...同样一堆输出,没有报错就行

执行完上面的之后,如果没有报错,新版本的nginx就应该已经安装在默认的/usr/local/nginx/或者你指定的--prefix路径下了。

3 关闭旧版本并启动的nginx

nginx关闭启动还有别的方法,这里我只介绍我常用的一种。

我们在第一步中已经得到了正在运行的<nginx主进程的pid>和当时启动时使用的参数(包含指定配置文件路径)。接下来依次执行kill -INT <nginx主进程pid><nginx可执行文件路径> <上次启动使用的参数>,拿我这里的举例就是:

[root@cgp6g196 nginx-1.24.0]# kill -INT 17895
[root@cgp6g196 nginx-1.24.0]# /vol-th/home/xxx/xxx/nginx-1.24.0/install/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

如果执行没有报错,那么恭喜你,你更新成功了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值