一.Nginx介绍
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等
Nginx作为负载均衡服务:Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为 HTTP代理服务对外进行服务。Nginx采用C进行编写,不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多。
二.Nginx版本更型和版本回退
实验环境:rhel7.3虚拟机,两款不同版本的nginx安装包
1.获取两款不同版本nginx的安装包,可以通过官网下载
2.解压安装包
tar zxf nginx-1.15.8.tar.gz
cd nginx-1.15.8
vim CHANGES ##这里可以看见nginx最初的版本
vim /etc/security/limits.conf ##这里可以修改最大文件数
3.关闭debug日志,进行编译安装
vim auto/cc/gcc
yum install -y pcre-devel zlib-devel gcc ##下载依赖包,编译软件
cd nginx-1.15.8 ##在该目录下预编译
./configure --prefix=/usr/local/nginx --with-file-aio
make
make install
4.修改配置文件,启动
useradd nginx ##创建nginx用户
cd nginx-1.15.8
vim conf/nginx.conf
/usr/local/nginx/sbin/nginx
5.查看当前版本号
/usr/local/nginx/sbin/nginx -t ##查看配置文件语法的正确性
/usr/local/nginx/sbin/nginx -V ##查看当前nginx版本及编译所加的参数
6.安装高版本的nginx,模拟版本更型
安装过程大同小异
89 tar zxf nginx-1.16.0.tar.gz
90 cd nginx-1.16.0
91 ls
92 /usr/local/nginx/sbin/nginx -V
93 ./configure --prefix=/usr/local/nginx --with-file-aio
94 cd objs/
95 ls
96 cd ..
97 make
98 cd objs/
99 ls
100 cd /usr/local/nginx/sbin/
101 ls
7.备份原有nginx,一旦更型失败立刻回退
100 cd /usr/local/nginx/sbin/
101 ls
102 cp nginx nginx.old ##做好二进制文件的备份
103 ls
104 ./nginx -V
105 cd -
106 ls
107 cp -f nginx /usr/local/nginx/sbin/nginx ##将新版本启动脚本复制到旧版本的目录下
8.查看进程,关闭原版本进程
ps -ef | grep nginx
可以看到此时nginx的一个master进程和两个worker进程
kill -USR2 3787
3787为老版本master进程号,在杀掉此进程的基础上启用新版本进程
ps -ef | grep nginx
启用新版本的nginx后,可以看到新版本的master和worker进程号,但旧版本的worker进程依然在接受请求,用户访问依然访问旧版本的nginx
kill -WINCH 3787
当老版本的nginx接受完所用请求后,关闭所有连接。此命令会将旧版本的的worker进程停掉,不会将master进程停掉
ps -ef | grep nginx
/usr/local/nginx/sbin/nginx -V
版本更新成功!!
9.版本回退
在日常生产中,如果版本更新一旦失败,就要立刻停止更新,还原之前的版本
cd /usr/local/nginx/sbin/
cp -f nginx.old nginx ##将刚才备份的文件还原
ps -ef | grep nginx
kill -USR2 6340
kill -HUP 3787
将旧版本的master进程拉起,用来产生新的master进程接受用户请求
ps -ef | grep nginx
kill -WINCH 6340
ps -ef | grep nginx
/usr/local/nginx/sbin/nginx -V
版本回退成功!!
三.Nginx日志切割
nginx作为服务器时每天都会产生大量的日志,如果不进行管理将会占用大量的内存,所以必须进行日志切割再将日志进行压缩
1.正常备份
cd /usr/local/nginx/logs
[root@server1 logs]# ls ##在此目录下是nginx所产生的日志
access.log error.log nginx.pid
[root@server1 logs]# mv access.log `date +%F -d -1day`access.log
[root@server1 logs]# ls
2019-05-06access.log error.log nginx.pid
[root@server1 logs]# /usr/local/nginx/sbin/nginx -s reopen
[root@server1 logs]# ls
2019-05-06access.log access.log error.log nginx.pid
当然这里只是演示一下备份的原理
2.编写脚本
vim backup.sh
#!/bin/bash
LOG_PATH=/usr/local/nginx/logs/oldlogs
CUR_LOG_PATH=/usr/local/nginx/logs
YESTEDAY=$(date +%F -d -1day)
mv $CUR_LOG_PATH/access.log $LOG_PATH/${YESTEDAY}_access.log
mv $CUR_LOG_PATH/error.log $LOG_PATH/${YESTEDAY}_error.log
kill -USER1 $(cat /usr/local/nginx/logs/nginx.pid)
chmod +x backup.sh
vim /etc/cron.d/file ##写入到系统日志文件中,让其定期执行
0 0 * * * /bin/bash /us r/local/nginx/logs/backup.sh