Nginx 是什么
Nginx
是一款轻量的(相比 Apache
、Lighttpd
而言)、高性能的 HTTP
服务器,同时也可以用作反向代理、负载平衡器和 HTTP
缓存。Nginx
采用了模块化、事件驱动的架构设计,使用了异步非阻塞
的事件处理机制处理请求,使得在高负载下也能提供更可靠的性能。
Nginx 模块化体系
Nginx
的内部结构是由核心部分和一系列的功能模块所组成。Nginx Core
实现底层的通讯协议,为其他模块构建了基本的运行时环境,并且构建了其他各模块的协作基础。除此之外,应用相关的功能都是在一系列的功能模块中完成。
Nginx
将各功能模块组织成一条链,当有请求到达的时候,请求依次经过这条链上的部分或者全部模块进行处理。每个模块实现特定的功能,例如,实现对请求解压缩的模块,实现与上游服务器(upstream
模块)进行通讯的模块,实现与 FastCGI
服务进行通讯的模块等等。
有两个模块比较特殊,他们居于 Nginx Core
和各功能模块的中间,这两个模块就是 HTTP
模块和 MAIL
模块。它们用于处理与 HTTP 协议和 email 相关协议(SMTP/POP3/IMAP)有关的事件,并且确保这些事件能被以正确的顺序来调用其他的一些功能模块。功能模块分类:
-
event module
:搭建了独立于操作系统的事件处理机制的框架,及提供了各具体事件的处理 -
phase handler
:主要负责处理客户端请求并产生待响应内容 -
output filter
:主要是负责对输出的内容进行处理,例如,对输出的图片的 URL 进行替换之类的工作 -
upstream
:实现负载均衡的功能 -
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
—— 快速停止 Nginxnginx -s quit
—— 平滑停止 Nginxnginx -s reload
—— 重载配置文件(用新的配置文件启动新 worker 进程,并平滑的关闭旧的 worker 进程)nginx -t
—— 检测配置文件是否正确
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。