相信大家平时用的最多的地方应该是做反向代理。不过人家可是不止这些东西。Nginx 是以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。以下是nginx的http连接和处理过程。

nginx响应接口时快时慢 nginx快的原因_多路复用


HTTP 连接建立和请求处理过程如下:

1.Nginx 启动时,Master 进程,加载配置文件。

2.Master 进程,初始化监听的 Socket。

3.Master 进程,Fork 出多个 Worker 进程。

4.Worker 进程,竞争新的连接,获胜方通过三次握手,建立 Socket 连接,并处理请求。Nginx 服务器,正常运行过程中:

多进程: 一个 Master 进程、多个 Worker 进程。

Master 进程: 管理 Worker 进程。对外接口:接收外部的操作(信号);对内转发:根据外部的操作的不同,通过信号管理 Worker;监控: 监控 Worker 进程的运行状态,Worker 进程异常终止后,自动重启 Worker 进程。

Worker 进程: 所有 Worker 进程都是平等的。实际处理:网络请求,由 Worker 进程处理。Worker 进程数量:在 nginx.conf 中配置,一般设置为核心数,充分利用 CPU 资源,同时,避免进程数量过多,避免进程竞争 CPU 资源,增加上下文切换的损耗。

nginx是个web服务器,基本上也是典型的web服务器工作模式。

nginx响应接口时快时慢 nginx快的原因_nginx_02


Nginx 的模块一般来说包括5个,分别是event module,phase handler,output filter,upstream,load-balancer,不过平时能接触到的最多的当属后面2个,

upstream: upstream 模块实现反向代理的功能,将真正的请求转发到后端服务器上,并从后端服务器上读取响应,发回客户端。

upstream 模块是一种特殊的 handler,只不过响应内容不是真正由自己产生的,而是从后端服务器上读取的。

load-balancer: 负载均衡模块,实现特定的算法,在众多的后端服务器中,选择一个服务器出来作为某个请求的转发服务器。

为什么高性能,高并发?原因如下:

Nginx 采用多进程 + 异步非阻塞方式(IO 多路复用 Epoll)。

IO 多路复用: 一个线程,跟踪多个 Socket 状态,哪个就绪,就读写哪个。优势如下:
IO 多路复用:单个连接的请求处理速度没有优势。
大并发量:只使用一个线程,处理大量的并发请求,降低上下文环境切换损耗,也不需要考虑并发问题,相对可以处理更多的请求。
消耗更少的系统资源(不需要线程调度开销)。