为什么nginx可以通过替换可执行程序的方式升级

平时给nginx添加模块,或者升级版本的时候,都是在nginx源码目录里面./configure,然后重新make,最后用源码目录下,objs目录里面的nginx来替换原本的老版本可执行程序。为什么可以通过这种方式来升级呢?因为nginx安装后,安装目录里面一堆文件,正儿八经干活的其实就sbin/nginx一个。其他的都是龙套。现在我们同时安装两个版本,然后对比两个安装目录里面所有的文件,会发现,除了sbin/nginx不同,其他的文件都是一模一样的。

#先安装一些必要的组件
yum -y install gcc gcc-c++ autoconf automake zlib zlib-devel openssl openssl-devel pcre-devel
#下载
wget http://nginx.org/download/nginx-1.12.1.tar.gz
wget http://nginx.org/download/nginx-1.10.3.tar.gz
tar xf nginx-1.12.1.tar.gz
tar xf nginx-1.10.3.tar.gz
#添加用户
useradd -s /sbin/nologin -M www
#安装
cd nginx-1.12.1
./configure --user=www --group=www --prefix=/usr/local/nginx12  --with-http_ssl_module --with-http_gzip_static_module --with-http_realip_module && make && make install 
cd ../nginx-1.10.3
./configure --user=www --group=www --prefix=/usr/local/nginx10  --with-http_ssl_module --with-http_gzip_static_module --with-http_realip_module && make && make install 

然后我们把/usr/local/nginx12和/usr/local/nginx10目录里面的所有文件生成md5校验值。

[root@test local]# ls
bin  etc  games  include  lib  lib64  libexec  nginx10  nginx12  sbin  share  src
[root@test local]# cd nginx10 && md5deep -lr ./ > ../nginx10.md5
[root@test local]# cd nginx12 && md5deep -lr ./ > ../nginx12.md5
[root@test local]# cat nginx12.md5 
e3eb0a1df437f3f97a64aca5952c8ea0  ./html/index.html
d74f9cdd604653c22c6752c46fffd587  ./html/50x.html
3a0b1f2d0a5734fe3200a48703bafed2  ./conf/nginx.conf
88ac833ee8ea60904a8b3063fde791de  ./conf/uwsgi_params
3a0b1f2d0a5734fe3200a48703bafed2  ./conf/nginx.conf.default
3e338aca6a53a5420fc791b5ef86f64c  ./conf/koi-utf
4729c30112ca3071f4650479707993ad  ./conf/fastcgi_params
88ac833ee8ea60904a8b3063fde791de  ./conf/uwsgi_params.default
178a634a52a0777a4cf6f3a394fd2b53  ./conf/fastcgi.conf
bd837e7b34f5c9b8d89957d0527f0d44  ./conf/mime.types.default
3749ffe19bedd842eb87e83d544e5ce6  ./conf/win-utf
4729c30112ca3071f4650479707993ad  ./conf/fastcgi_params.default
bfa0b80381fed2b1dfcf617b0ba204ec  ./conf/koi-win
bd837e7b34f5c9b8d89957d0527f0d44  ./conf/mime.types
df8c71e25e0356ffc539742f08fddfff  ./conf/scgi_params.default
178a634a52a0777a4cf6f3a394fd2b53  ./conf/fastcgi.conf.default
df8c71e25e0356ffc539742f08fddfff  ./conf/scgi_params
0853bf74c4916a9d9b670d810b64a4e4  ./sbin/nginx

然后我们对比两个.md5文件

[root@test local]# diff nginx10.md5 nginx12.md5
19c18
< 1a57e963e4b8622d5539a3230e8a4e39  ./sbin/nginx
---
> f080e4347fd34e1dfdb9fed0362a237a  ./sbin/nginx

新手看到这个diff的输出会有点云里雾里,所以我把两个.md5文件的最后一行(就是sbin/nginx校验值的那一行)都删掉

sed -i '$d' nginx10.md5 nginx12.md5
[root@test local]# diff nginx10.md5 nginx12.md5
[root@test local]# echo $?
0

diff没有任何输出,证明两个文件完全一致,龙套说得以证实。
其实,我们可以用nginx10目录下所有文件的MD5值nginx10.md5去校验nginx12目录

[root@test local]# md5deep -X nginx10.md5 -r nginx12/*
f080e4347fd34e1dfdb9fed0362a237a  /usr/local/nginx12/sbin/nginx

原创文章,转载请注明: 转载自笛声

本文链接地址: 为什么nginx可以通过替换可执行程序的方式升级

4 条评论

  • 一抹阳光 2017年7月21日 回复

    之前都是用虚拟空间,现在开始转战vps啦,话说lnmp,资源占用率好低啊,256M内存的vps,安装了Centosx64+lnmp,居然内才占用34%,佩服……

  • 姜辰 2017年7月21日 回复

    感觉这个还是满不错~~= = nginx还是强悍。然后你博客还是别用百度云加速了吧,对我IP很不友好啊

    • dige 2017年9月4日 回复 作者

      切到阿里的CDN了。

  • 广州网站建设 2018年8月16日 回复

    收藏了

发表评论

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