Nginx问答题
▶ nginx工作原理:
• Nginx核心架构:Master-Worker模型
▪ Nginx启动后生成两类进程:
1.Master(主进程,管理员),不处理用户HTTP请求,管理所有Worker子进程
2.Worker(子进程,干活的),真正接受浏览器请求,处理请求,默认进程数=CPU核心数,Worker只是继承Master已经开好的监听端口,**这是reload实现平滑无中断的关键**
▪ 执行reload之后,发生了什么?
1.Master收到信号,加载、校验新版配置文件
2.Master启动一批全新Worker子进程,新Worker加载新的配置,继承监听端口,立刻开始接收新来的客户端请求。
**此时新旧Worker同时共存,新Worker:新配置,接新请求,旧Worker:旧配置,还在处理已经建立好的旧连接**
3.Master向旧Worker发送优雅关闭信号,旧Worker处理完手上所有连接后自动退出消亡,只剩新Worker,重载完成。
执行 nginx -s reload
↓
Master收到SIGHUP信号
↓
校验nginx.conf新配置
↓
(校验通过) 创建新Worker进程(新配置,接收新请求)
↓
通知旧Worker:停止接新请求,做完手头工作再退出
↓
旧Worker逐个处理完存量请求,陆续退出
↓
只剩新Worker,reload完成
▶ Nginx为什么拥有高性能并且能够支撑高并发?
Nginx采用多进程+异步非阻塞方式(**IO多路复用Epoll** )
IO多路复用:1个服务员+按铃系统(高效省资源)
多线程:雇100个服务员(资源爆炸)
▶ Worker争抢式有哪些好处?
(1)可以使用nginx -s reload热部署
(2)每个worker都是独立的进程,如果有其中的一个worker出现问题,其他worker独立争抢,实现请求过程,不会造成服务中断。
▶ Nginx日志分割
编写nginx日志分割脚本**(实际工作中很重要)**
Nginx:ogRotate.sh
#!/bin/bash
LOGS_PATH=/var/log/nginx #日志存放路径
YESTERDAY=$(date -d "-1 day" +%Y-%m-%d) #昨天
cp把原来的文件备份为原文件名_日期.log
清空源日志文件信息:>${LOGS_PATH}/access.log
▶ 常见错误页的处理
**• 200:请求成功!服务器正常返回了数据**
**• 301:永久重定向。网址搬家了。**
• 302:临时重定向。网址暂时换了。
• 304:没变过,用缓存吧!你本地缓存的文件还能用,不用重新下载
• 400:发送了无效请求!
• 401:没带通行证!需要登陆或认证。一般会跳转到登陆界面。
**• 403:权限不足,禁止访问。没有配置默认index.html也会出现。**
**• 404:页面找不到**
**• 500:服务器后台代码崩了!**
**• 502:网关炸了!Nginx后面服务没响应或挂了。后端服务没启动,负载过高**
**• 503:服务器超负荷,忙不过来**
**• 504:服务器处理超时(比如数据库查询卡死)**