7

Nginx 是什么

Nginx 是一款轻量的(相比 ApacheLighttpd 而言)、高性能的 HTTP 服务器,同时也可以用作反向代理、负载平衡器和 HTTP 缓存。Nginx 采用了模块化、事件驱动的架构设计,使用了异步非阻塞的事件处理机制处理请求,使得在高负载下也能提供更可靠的性能。
图片描述

Nginx 模块化体系

Nginx 的内部结构是由核心部分和一系列的功能模块所组成。Nginx Core 实现底层的通讯协议,为其他模块构建了基本的运行时环境,并且构建了其他各模块的协作基础。除此之外,应用相关的功能都是在一系列的功能模块中完成。

Nginx 将各功能模块组织成一条链,当有请求到达的时候,请求依次经过这条链上的部分或者全部模块进行处理。每个模块实现特定的功能,例如,实现对请求解压缩的模块,实现与上游服务器(upstream模块)进行通讯的模块,实现与 FastCGI 服务进行通讯的模块等等。

有两个模块比较特殊,他们居于 Nginx Core 和各功能模块的中间,这两个模块就是 HTTP 模块和 MAIL 模块。它们用于处理与 HTTP 协议和 email 相关协议(SMTP/POP3/IMAP)有关的事件,并且确保这些事件能被以正确的顺序来调用其他的一些功能模块。功能模块分类:

  1. event module:搭建了独立于操作系统的事件处理机制的框架,及提供了各具体事件的处理
  2. phase handler:主要负责处理客户端请求并产生待响应内容
  3. output filter:主要是负责对输出的内容进行处理,例如,对输出的图片的 URL 进行替换之类的工作
  4. upstream:实现负载均衡的功能
  5. load-balancer:实现负载均衡的功能,通过特定的算法,在众多的后端服务器中,选择一个服务器出来作为某个请求的转发服务器

图片描述

Nginx 进程模型

Nginx 程序在启动后,会以守护进程的方式在系统后台中运行,后台进程包含一个 master 进程和多个 worker 进程。

master 进程负责管理 Nginx 本身和其他 worker 进程,包含:接收来自外界的信号、向各 worker 进程发送信号、监控 worker 进程的运行状态、当 worker 进程退出后(异常情况下),会自动重新启动新的 worker 进程等。

worker 进程主要处理基本的网络事件,多个 worker 进程之间是对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的。一个请求,完全由 worker 进程来处理,而且只在一个 worker 进程中处理。worker 进程的个数是可以设置的,一般我们会设置与机器 cpu 核数一致,这里面的原因与 Nginx 的进程模型以及事件处理模型是分不开的。

Nginx 的进程模型,可以由下图来表示:
图片描述

Nginx 常用命令

nginx -h —— Nginx 帮助命令
nginx -s stop —— 快速停止 Nginx
nginx -s quit —— 平滑停止 Nginx
nginx -s reload —— 重载配置文件(用新的配置文件启动新 worker 进程,并平滑的关闭旧的 worker 进程)
nginx -t —— 检测配置文件是否正确


Jochen
846 声望85 粉丝

Stay hungry, stay foolish.