Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行 。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆几乎所有top级公司都是nginx用户:百度、京东、新浪、网易、腾讯、淘宝等 。我们先来了解一下它的工作原理 。
欢迎关注笔者,优质文章都在这里等你 。一. Nginx的模块与工作原理Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(location是Nginx配置中的一个指令,用于URL匹配),而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作 。
Nginx的模块从结构上分为核心模块、基础模块和第三方模块:
- 核心模块:HTTP模块、EVENT模块和MAIL模块
- 基础模块:HTTP Access模块、HTTP FastCGI模块、HTTP Proxy模块和HTTP Rewrite模块,
- 第三方模块:HTTP Upstream Request Hash模块、Notice模块和HTTP Access Key模块 。
Nginx的模块从功能上分为如下三类 。
- Handlers(处理器模块) 。此类模块直接处理请求,并进行输出内容和修改headers信息等操作 。Handlers处理器模块一般只能有一个 。
- Filters (过滤器模块) 。此类模块主要对其他处理器模块输出的内容进行修改操作,最后由Nginx输出 。
- Proxies (代理类模块) 。此类模块是Nginx的HTTP Upstream之类的模块,这些模块主要与后端一些服务比如FastCGI等进行交互,实现服务代理和负载均衡等功能 。

文章插图
Nginx本身做的工作实际很少,当它接到一个HTTP请求时,它仅仅是通过查找配置文件将此次请求映射到一个location block,而此location中所配置的各个指令则会启动不同的模块去完成工作,因此模块可以看做Nginx真正的劳动工作者 。
通常一个location中的指令会涉及一个handler模块和多个filter模块(当然,多个location可以复用同一个模块) 。handler模块负责处理请求,完成响应内容的生成,而filter模块对响应内容进行处理 。
Nginx的模块直接被编译进Nginx,因此属于静态编译方式 。启动Nginx后,Nginx的模块被自动加载,不像Apache,首先将模块编译为一个so文件,然后在配置文件中指定是否进行加载 。在解析配置文件时,Nginx的每个模块都有可能去处理某个请求,但是同一个处理请求只能由一个模块来完成 。
二. Nginx的进程模型在工作方式上,Nginx分为单工作进程和多工作进程两种模式 。在单工作进程模式下,除主进程外,还有一个工作进程,工作进程是单线程的;在多工作进程模式下,每个工作进程包含多个线程 。Nginx默认为单工作进程模式 。
Nginx在启动后,会有一个master进程和多个worker进程 。
master进程主要用来管理worker进程,包含:接收来自外界的信号,向各worker进程发送信号,监控worker进程的运行状态,当worker进程退出后(异常情况下),会自动重新启动新的worker进程 。
master进程充当整个进程组与用户的交互接口,同时对进程进行监护 。它不需要处理网络事件,不负责业务的执行,只会通过管理worker进程来实现重启服务、平滑升级、更换日志文件、配置文件实时生效等功能 。
我们要控制nginx,只需要通过kill向master进程发送信号就行了 。比如kill -HUP pid,则是告诉nginx,从容地重启nginx,我们一般用这个信号来重启nginx,或重新加载配置,因为是从容地重启,因此服务是不中断的 。
master进程在接收到HUP信号后是怎么做的呢?首先master进程在接到信号后,会先重新加载配置文件,然后再启动新的worker进程,并向所有老的worker进程发送信号,告诉他们可以光荣退休了 。
新的worker在启动后,就开始接收新的请求,而老的worker在收到来自master的信号后,就不再接收新的请求,并且在当前进程中的所有未处理完的请求处理完成后,再退出 。当然,直接给master进程发送信号,这是比较老的操作方式,nginx在0.8版本之后,引入了一系列命令行参数,来方便我们管理 。比如,./nginx -s reload,就是来重启nginx,./nginx -s stop,就是来停止nginx的运行 。
推荐阅读
- 5分钟学会从此不违章! 交通图解
- 离职要懂得维权!一文让你彻底搞懂经济补偿的N、N+1、2N、2N+1
- 2步搞定抖音怎么把抖音标志去掉,简简单单
- 苹果手机照片彻底删除后怎么恢复?照片误删这样恢复
- 三个步骤帮你轻松搞定微信公众号平台!
- 6分钟教你彻底理解三原色的色彩原理,轻松模仿各路大神作品色调
- 简单直接。一文搞懂医疗险
- 是玉帝的女儿还是妹妹?《西游记》可能搞错了 二郎神的母亲
- 彻底弄懂UTF-8、Unicode、宽字符、locale
- 一文搞懂什么是 C# 计时器!
