一. 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安装包
- 获取两款不同版本nginx的安装包,可以通过官网下载
https://www.nginx.com/
-
解压安装包
tar zxf nginx-1.15.8.tar.gz cd nginx-1.15.8 vim /etc/security/limits.conf ##这里可以修改最大文件数
- 关闭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
-
修改配置文件,启动
useradd nginx ##创建nginx用户 cd nginx-1.15.8 vim conf/nginx.conf
/usr/local/nginx/sbin/nginx
-
查看当前版本号
/usr/local/nginx/sbin/nginx -t ##查看配置文件语法的正确性 /usr/local/nginx/sbin/nginx -V ##查看当前nginx版本及编译所加的参数
- 安装高版本的nginx,模拟版本更型
安装过程大同小异
tar zxf nginx-1.16.0.tar.gz
cd nginx-1.16.0
ls
/usr/local/nginx/sbin/nginx -V
./configure --prefix=/usr/local/nginx --with-file-aio
cd objs/
ls
cd ..
make
cd objs/
ls
cd /usr/local/nginx/sbin/
ls
-
备份原有nginx,一旦更型失败立刻回退
cd /usr/local/nginx/sbin/ ls cp nginx nginx.old ##做好二进制文件的备份 ls ./nginx -V cd - ls cp -f nginx /usr/local/nginx/sbin/nginx ##将新版本启动脚本复制到旧版本的目录下
-
查看进程,关闭原版本进程
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
版本更新成功!!
-
版本回退
在日常生产中,如果版本更新一旦失败,就要立刻停止更新,还原之前的版本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作为服务器时每天都会产生大量的日志,如果不进行管理将会占用大量的内存,所以必须进行日志切割再将日志进行压缩
-
正常备份
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
当然这里只是演示一下备份的原理
-
编写脚本
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