nginx是多进程结构,多进程结构设计是为了保证nginx的高可用高可靠,包含:
热部署,就是配置文件nginx.conf修改后,不需要stop Nginx,不需要中断请求,就能让配置文件生效,即在线升级,即不打断用户的请求下更新版本。 通过上文我们已经知道worker进程负责处理具体的请求,那么如果想达到热部署的效果,Nginx可以修改配置文件nginx.conf后,重新生成新的worker进程,当然会以新的配置进行处理请求,而且新的请求必须都交给新的worker进程,至于老的worker进程,等把那些以前的请求处理完毕后,kill掉即可。然后使用新的配置创建新的 worker,所以可以做到在线更新版本,新版本和旧版本的进程可以同时存在,不影响客户的访问。
实验环境 :搭建成功版本为1.15.9的nginx服务器<上一篇>
1、添加上版本注释 vim src/core/nginx.h
1)删除之前安装的nginx目录:rm -fr /usr/local/nginx
2)回到编译目录:make clean
3)查看当前nginx的进程 ps aux | grep nginx
4)再次编译:
./configure --prefix=/usr/local/nginx --with-file-aio
6)开启nginx:/usr/local/nginx/sbin/nginx
7)查看nginx的进程:ps aux|grep nginx
8)查看nginx的版本号:/usr/local/nginx/sbin/nginx -v
1) 首先解压:tar zxf nginx-1.17.4.tar.gz
2)在 nginx-1.17.4目录下编译,./configure --prefix=/usr/local/nginx --with-file-aio
4)在nginx/nginx-1.17.4/objs/
目录下,执行make后才产生的二进制文件nginx 。此时,执行命令./nginx -V
查看nginx版本。发现版本为nginx/1.17.4 ,但是生效的版本还是nginx/1.15.9
5)ps -ef | grep nginx
可以看到原来的2个进程
6)kill -USR2 原master进程的pid 让旧版本的worker进程不再接受请求,ps -ef | grep nginx
可以看到4个进程
7)kill -WINCH 原来master进程的pid ,关闭原来进程的子进程,master不结束,防止更新失败。ps -ef | grep nginx
可以看到3个进程,此时新版本已经可以用了
8)/usr/local/nginx/sbin/nginx -V 可以看到版本已经更新了
此时,版本升级已经完成l。
假如我们刚才更新失败,要回到原来nginx/1.15.9的版本
1)还原nginx脚本
2)kill -HUP 旧版本的master进程PID,重新唤起旧版本的master进程,让其接收请求
3)
kill -USR2 27129,让新版本的master进程不接收请求
kill -WINCH 27129,关闭新版本的worker进程
4)查看nginx版本 :/usr/local/nginx/sbin/nginx -v
实际在企业当中,如果更新失败立马就要回滚,并且更新的时候只能进行一次,失败立马回滚
1、查看日志的大小:du -sh /usr/local/nginx/logs/access.log
2、在真机多次请求页面 ab -c 1 -n 100000 http://www.ranran.org/index.html
3、再次查看 du -sh /usr/local/nginx/logs/access.log
4、保存前一天的日志 mv access.log `date +%F -d -1day`_access.log
5、重新生成一个access.log日志 /usr/local/nginx/sbin/nginx -s reopen,