Nginx初认识之 Nginx重载配置文件、热部署和更新日志 (一) -张柏沛IT博客

正文内容

Nginx初认识之 Nginx重载配置文件、热部署和更新日志 (一)

栏目:Linux 发布时间:2020-02-10 16:46 浏览量:308

Nginx的3个主要的应用场景
1.静态资源服务
2.反向代理服务
3.API服务

优点:
高并发下达到高性能
可扩展性(有很多第三方插件),高可靠性(很难宕机)
热部署
BSD许可证

Nginx的组成:
二进制可执行文件
nginx.conf配置文件
access.log 访问日志,记录每一条http请求
error.log错误日志

Nginx的编译安装:
进入http://nginx.org/en/download.html下载nginx包

tar -xzf nginx-1.16.1.tar.gz
cd nginx-1.16.1
./configure --prefix=/usr/local/nginx     #configure完成后会生成一些中间文件在objs目录;里面有一个ngx_modules.c文件,里面列举着待会编译时会安装哪些模块。

make
make install

cd /usr/local/nginx && ll
#conf,html,logs,sbin 四个目录,放啥东西的一目了然

====================================

Nginx的配置语法
1.配置文件由指令和指令块构成
指令以;结尾,指令与参数将以空格分开
指令块以{}大括号将多条指令组织在一起。有些指令块有名字有些没有。

2.include语句可以引入多个配置文件

3.使用$表示使用变量

4.部分指令的参数支持正则

Nginx中的时间单位:
ms 毫秒
s   秒
m   分钟
h   小时
d   天
w   周
M   月
y   年

Nginx中空间单位
空   字节
k/K  m/M    g/G

Nginx 基本命令
启动:nginx
重新加载配置文件(相当于重启):nginx -s reload
帮助:-h
使用指定的配置文件启动:-c
指定新的配置: -g
指定运行目录:-p
发送信号:-s
如  nginx -s reload 重启
    nginx -s stop   停止
    nginx -s quit   优雅的停止
    nginx -s reopen 重新开始记录日志文件
    
测试配置文件是否有语法错误: -t
打印 nginx 的版本信息、编译等: -v

注意:nginx -s reload 可以在不停止对客户服务的情况下重新加载配置文件;所以虽然运行这条命令没有停止服务再开启服务,但是重新加载了配置文件,其实也算是一种重启。

接下来做3个小演示:
首先开启nginx服务
nginx

此时在浏览器输入ip即可访问到nginx的欢迎首页

1.重载配置文件
# 将监听端口修改为8080并重启
vi /usr/local/nginx/conf/nginx.conf

listen       8080;

nginx -s reload
ps -aux|grep :8080

2.热部署
所谓的热部署就是在不停止nginx服务的条件下更行nginx的版本。

更新nginx只需更新它/usr/local/nginx/sbin目录下的nginx命令就可。

# 先备份nginx命令
cd /usr/local/nginx/sbin && cp nginx nginx_bak

# 解压新版本或者旧版本的nginx
tar -xzf nginx-1.14.2.tar.gz
./configure --prefix=/usr/local/nginx   #这里--prefix要和之前的nginx一样
make    # 编译

编译后,在中间目录 nginx-1.14.2/objs中会出现nginx二进制文件,这就是我们要替换的nginx命令

cp /root/nginx-1.14.2/objs/nginx /usr/local/nginx/sbin/nginx -f  #将objs中的nginx覆盖旧的nginx,这里要加一个-f强制覆盖,因为旧的nginx还在运行,不强制覆盖是不会让你覆盖的。

千万不要 make install

由于没有执行 make install 所以这里只是替换了命令文件为新版本的nginx的命令文件,像配置文件什么的都还是原来的配置。

cd /usr/local/nginx/sbin && ll
-rwxr-xr-x 1 root root 3746472 Feb  1 11:00 nginx
-rwxr-xr-x 1 root root 3825224 Feb  1 10:42 nginx_bak

现在可以看出两个nginx是不一样大的,是两个版本的nginx

接下来我们要启动新版本的nginx,将请求平滑过渡到新的nginx进程。

# 查看nginx进程
ps -aux | grep nginx
root     23867  0.0  0.0  20596  1396 ?        Ss   Jan31   0:00 nginx: master process nginx
nobody   25011  0.0  0.0  23108  1756 ?        S    Jan31   0:00 nginx: worker process
root     24640  0.0  0.0 112708   980 pts/0    S+   10:36   0:00 grep --color=auto nginx

这里nginx会有两个进程,master和worker

# 发送一个信号给nginx master进程,告诉他我们要开始热部署
kill -USR2 23867

这样的话nginx会新起一个master和worker进程(此时就有两个nginx的master和worker进程),这个master进程相当于是重新启动了一个nginx服务,此时旧的nginx的master进程和worker进程依旧存在,但是已经不再监听80或者8080端口。

# 发送一个信号让旧的nginx优雅的退出
kill -WINCH 23867
ps -aux | grep nginx

此时可以看到旧的nginx master进程还在,旧的nginx worker进程已消失。此时所有请求都已经过渡到了新的nginx进程中。旧的nginx master进程还在是为了当新版本的nginx有问题时可以回退到旧版本nginx

本人在做到 kill -USR2 的时候发现并没有新起一个master和worker进程,可能是因为我的电脑只有单核。
cat /proc/cpuinfo| grep "cpu cores"| uniq   #查看核数

所以我直接使用
nginx -s quit && nginx
进行重启

 

3.切割日志
就是将每天的日志先备份一份到别的地方,然后使用nginx -s reopen 命令清空旧的日志,重新记载,这样防止日志不停地积累到一个文件导致日志文件过大。

cd /usr/local/nginx/logs    # nginx日志存放目录
mkdir logs_bak
cp ./access.log logs_bak
nginx -s reopen     #清空旧日志并重新记录

可以将这个过程写到定时任务每天或者每周执行一次。

如果您需要转载,可以点击下方按钮可以进行复制粘贴;本站博客文章为原创,请转载时注明以下信息

张柏沛IT技术博客 > Nginx初认识之 Nginx重载配置文件、热部署和更新日志 (一)

热门推荐
推荐新闻