nginx的平滑升级
nginx在编译安装完成之后,出于以下两种考虑都需要进行升级:
- 版本更新
- 添加未编译安装的模块
而nginx所采用的平滑升级可以保证在不停止服务的情况下解决以上问题。我们以动态增加–with-http_stub_status_module模块为例,步骤如下:
1. 查看nginx版本号及已安装模块
[root@foundation7 nginx]# nginx -V
nginx version: nginx/long #隐藏版本号为1.2.9,通过nginx-1.2.9/src/core/nginx.h头文件隐藏。
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-4) (GCC)
TLS SNI support enabled
configure arguments: --prefix=/usr/local/app/nginx --user=nginx --group=nginx --with-http_sub_module --with-http_ssl_module --with-http_gzip_static_module --with-pcre=/usr/local/app/nginx/pcre-8.40 --with-zlib=/usr/local/app/nginx/zlib-1.2.11
2.下载对应版本的源码包
wget http://nginx.org/download/nginx-1.2.9.tar.gz
3.解压并重新编译
[root@foundation7 nginx]# tar -zxf nginx-1.2.9.tar.gz -C /usr/local/app/nginx/
[root@foundation7 nginx]# cd /usr/local/app/nginx/nginx-1.2.9/
[root@foundation7 nginx-1.2.9]# ./configure --prefix=/usr/local/app/nginx --user=nginx --group=nginx --with-http_sub_module --with-http_ssl_module --with-http_gzip_static_module --with-pcre=/usr/local/app/nginx/pcre-8.40 --with-zlib=/usr/local/app/nginx/zlib-1.2.11 --with-http_stub_status_module
[root@foundation7 nginx-1.2.9]# make
源码安装三部曲:./configure && make &&make install
- ./configure:用来检查当前的linux环境是否满足即将安装软件所需的依赖关系。
- make:编译命令,可自动完成编译过程,且只对上次编译修改过的部分进行编译。从Makefile中读取指令执行
[root@foundation7 nginx-1.2.9]# make
make -f objs/Makefile
make[1]: 进入目录“/usr/local/app/nginx/nginx-1.2.9”
make[1]: “objs/nginx”是最新的。
make[1]: 离开目录“/usr/local/app/nginx/nginx-1.2.9”
make -f objs/Makefile manpage
make[1]: 进入目录“/usr/local/app/nginx/nginx-1.2.9”
make[1]: 对“manpage”无需做任何事。
make[1]: 离开目录“/usr/local/app/nginx/nginx-1.2.9”
可以看出当没有修改时,是不进行重新编译的。
- make install:安装,从Makefile中读取指令。
4.替换nginx二进制文件
通过编译之后,源码包里的objs目录里便有了新的nginx文件,替换原来的nginx二进制文件,重新加载配置文件即可完成平滑升级。
[root@foundation7 nginx-1.2.9]# cp /usr/local/app/nginx/sbin/nginx /usr/local/app/nginx/sbin/nginx.bak
[root@foundation7 nginx-1.2.9]# cp objs/nginx /usr/local/app/nginx/sbin/nginx
[root@foundation7 nginx-1.2.9]# ll /usr/local/sbin/nginx
lrwxrwxrwx. 1 root root 31 6月 15 10:54 /usr/local/sbin/nginx -> /usr/local/app/nginx/sbin/nginx
[root@foundation7 nginx-1.2.9]# nginx -t
nginx: the configuration file /usr/local/app/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/app/nginx/conf/nginx.conf test is successful
[root@foundation7 nginx-1.2.9]# nginx -s reload
[root@foundation7 nginx-1.2.9]# nginx -V
nginx version: nginx/long
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-4) (GCC)
TLS SNI support enabled
configure arguments: --prefix=/usr/local/app/nginx --user=nginx --group=nginx --with-http_sub_module --with-http_ssl_module --with-http_gzip_static_module --with-pcre=/usr/local/app/nginx/pcre-8.40 --with-zlib=/usr/local/app/nginx/zlib-1.2.11 --with-http_stub_status_module
可以看到,我们已经动态加载了–with-http_stub_status_module模块。