Nginx为什么高效?一文搞明白Nginx核心原理
Nginx 的进程模型
Nginx 服务器,正常运行过程中:
- 多进程:一个 Master 进程、多个 Worker 进程
- Master 进程:管理 Worker 进程
- 对外接口:接收外部的操作(信号)
- 对内转发:根据外部的操作的不同,通过信号管理 Worker
- 监控:监控 worker 进程的运行状态,worker 进程异常终止后,自动重启 worker 进程
- Worker 进程:所有 Worker 进程都是平等的
- 实际处理:网络请求,由 Worker 进程处理;
- Worker 进程数量:在 nginx.conf 中配置,一般设置为核心数,充分利用 CPU 资源,同时,避免进程数量过多,避免进程竞争 CPU 资源,增加上下文切换的损耗。
思考:
- 请求是连接到 Nginx,Master 进程负责处理和转发?
- 如何选定哪个 Worker 进程处理请求?请求的处理结果,是否还要经过 Master 进程?
HTTP 连接建立和请求处理过程:
- Nginx 启动时,Master 进程,加载配置文件
- Master 进程,初始化监听的 socket
- Master 进程,fork 出多个 Worker 进程
- Worker 进程,竞争新的连接,获胜方通过三次握手,建立 Socket 连接,并处理请求
Nginx 高性能、高并发:
- Nginx 采用:多进程 + 异步非阻塞方式(IO 多路复用 epoll)
- 请求的完整过程:
- 建立连接
- 读取请求:解析请求
- 处理请求
- 响应请求
- 请求的完整过程,对应到底层,就是:读写 socket 事件
Nginx 的事件处理模型
request:Nginx 中 http 请求。
基本的 HTTP Web Server 工作模式:
- 接收请求:逐行读取请求行和请求头,判断段有请求体后,读取请求体
- 处理请求
- 返回响应:根据处理结果,生成相应的 HTTP 请求(响应行、响应头、响应体)
Nginx 也是这个套路,整体流程一致。
相关推荐
nginxs 2020-11-14
Guanjs0 2020-11-13
小木兮子 2020-11-11
yserver 2020-11-11
ssihc0 2020-11-11
windle 2020-11-10
HanksWang 2020-11-10
liuchen0 2020-11-10
Freshairx 2020-11-10
ccschan 2020-11-10
liwf 2020-11-10
Guanjs0 2020-11-09
AderStep 2020-11-09
zrtlin 2020-11-09
mqfcu 2020-11-10
windle 2020-10-29