- Nginx初认识之 Nginx重载配置文件、热部署和更新日志 (一)
- Nginx初认识之 Nginx搭建静态资源服务器 (二)
- Nginx初认识之 Nginx搭建反向代理服务器 (三)
- Nginx初认识之 GoAccess可视化实时监控access.log日志 (四)
- Nginx初认识之 Nginx支持PHP和TP5项目 (五)
- Nginx架构篇之 Nginx的进程结构和信号管理 (六)
- Nginx架构篇之 Nginx和Apache的比较 (七)
- Nginx HTTP模块篇 Nginx接收HTTP请求的流程 (八)
- Nginx HTTP模块篇 server_name指令和Nginx处理HTTP请求的11个阶段(九)
- Nginx HTTP模块篇 realip模块 (十)
- Nginx HTTP模块篇 rewrite模块 (十一)
- Nginx HTTP模块篇 limit_conn和limit_req模块 (十二)
- Nginx HTTP模块篇 access阶段的deny allow auth_basic auth_request指令 (十三)
- Nginx HTTP模块篇 precontent阶段的try_files和mirror指令 (十四)
- Nginx HTTP模块篇 content阶段的static模块 (十五)
- Nginx HTTP模块篇 日志记录之log模块和过滤模块 (十六)
- Nginx HTTP模块篇 Nginx中的常用变量 (十七)
- Nginx HTTP模块篇 Nginx防盗链——referer模块 (十八)
- Nginx优化篇 Nginx+php_fpm使用php及其配置优化 (十九)
- Nginx优化篇 Linux内核参数优化和nginx配置优化 (二十)
- Nginx优化篇 Linux内核参数、Nginx配置和php-fpm配置优化汇总 (二十一)
- Nginx优化篇 ab压力测试和监控 (二十二)
- Nginx优化篇 nginx+php-fpm压力测试实践 (二十三)
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重载配置文件、热部署和更新日志 (一)