一、Nginx升级
生产要求,需要对现有Nginx-v1.6.1进行升级,需要保留原有已安装的模块,这里举例升级为Nginx-1.14.0。
- 下载新版本Nginx-1.14.0
http://nginx.org/en/download.htmlMainline为主线开发版本,不建议生产使用,可使用Stable稳定版。如需下载以前的老版本选择Legacy versions - 编译Nginx(只编译不要安装)
解压下载的Nginxtar -zxvf nginx-1.14.0.tar.gz -C /app/ljy/nginx/ #解压下载的新版本
cd /app/ljy/nginx/nginx-1.14.0/
查看旧Nginx的版本及现有的模块./nginx -V
[mall@bj-ecs-xhm-4f03-b2-hs22-cscs-02 sbin]$ ./nginx -V
nginx version: nginx/1.6.1
built by gcc 4.1.2 20080704 (Red Hat 4.1.2-48)
TLS SNI support disabled
configure arguments: --prefix=../nginx-new --add-module=./modules/taobao-nginx-http-concat --with-http_stub_status_module --add-module=./modules/ngx_devel_kit-0.2.19 --add-module=./modules/set-misc-nginx-module-0.24 --add-module=./modules/encrypted-session-nginx-module --add-module=./modules/echo-nginx-module --add-module=./modules/lua-nginx-module-0.9.4 --add-module=./modules/memc-nginx-module-0.15 --add-module=./modules/agentzh-srcache-nginx-module-10587a1 --add-module=./modules/ngx_http_redis-0.3.6 --with-http_ssl_module --with-http_gzip_static_module --with-http_sub_module --add-module=./modules/nginx-accesskey-2.0.3 --add-module=./modules/nginx_tcp_proxy_module-0.4.5 --add-module=./modules/naxsi-0.53-2/naxsi_src
开始configure配置编译:
先将modules模块库拷贝至/app/ljy/nginx/nginx-1.14.0/下,执行./configure的时候要指定模块所在的位置,然后执行下面的编译配置命令./configure,所需各个模块可自行下载,这里面是已经下载好的,包含了常用的Nginx模块,如下图:
./configure --prefix=../nginx-new --add-module=./modules/taobao-nginx-http-concat --with-http_stub_status_module --add-module=./modules/ngx_devel_kit-0.2.19 --add-module=./modules/set-misc-nginx-module-0.24 --add-module=./modules/encrypted-session-nginx-module --add-module=./modules/echo-nginx-module --add-module=./modules/lua-nginx-module-0.10.9 --add-module=./modules/memc-nginx-module-0.18 --add-module=./modules/agentzh-srcache-nginx-module-10587a1 --add-module=./modules/ngx_http_redis-0.3.6 --with-http_ssl_module --with-http_gzip_static_module --with-http_sub_module --add-module=./modules/nginx-accesskey-2.0.4 --add-module=./modules/naxsi-0.53-2/naxsi_src
为了防止目标主机没有Lua库的支持,所以,编译的时候可将Lua支持库编译进去。执行./configure后进入objs目录,编辑Makefile文件,替换-Wl,-E -lpthread -lcrypt /app/ljy/nginx/nginx-1.14.0/modules/LuaJIT-2.0.5/src/libluajit.a -lm -lpcre -lssl -lcrypto -ldl -lz \
这一行。
下面开始编译:
make
不要make install!!!以免覆盖原有nginx!!!
- 将objs目录下编译好的Nginx二进制文件拷贝至现有Nginx安装目录的sbin下(先备份旧Nginx启动文件),停掉现有Nginx进程,使用新的Nginx启动,查看升级后版本。
使用下面的命令来停止旧版本的Nginx,由新版本来接替,该命令会处理完老进程的所有请求后关闭所有连接并停止Nginx,查看Nginx日志目录会生成一个nginx.pid.oldbin文件,用来存放旧版本Nginx 的pid。
kill -USR2 `cat /app/ljy/nginx/ecsmall/logs/nginx.pid`
二、为现有Nginx添加模块
为现有的Nginx添加一个新的模块,比如添加Mongodb的GridFS 文件系统支持模块nginx-gridfs。注意:要找一个与现有Nginx版本相同的Nginx来编译。
- 先准备要添加的模块,并解压至指定目录。
- 同上Nginx升级操作的第2步,查看现有Nginx已安装的模块,然后配置编译的时候加入需要添加的模块,重新编译,这里举例加入了
--add-module=./modules/nginx-gridfs
模块。开始./configure,完成之后参考上面的步骤加入Lua库,然后make进行编译,记得不要make install,否则会覆盖原Nginx的!!! - 编译完成后,到objs目录下,使用新的Nginx二进制文件来替换现有Nginx,替换前记得先备份下原有的Nginx以免出现问题。参考上面第3步,重新启动添加新模块后的Nginx。
备注:
- Nginx的pid文件在日志logs目录下
- 低版本的Nginx可以通过打补丁来安装第三方模块nginx_tcp_proxy_module-master以便于支持TCP负载均衡配置(通过打补丁来扩展nginx_tcp_proxy_module模块可参考下面的链接)。而在新版本以后,由于第三方的插件并未进行更新(2018年5月),高版本的Nginx自带有TCP负载均衡配置(stream模块),所以,该插件不能安装在高版本的Nginx上。
参考文档: