Nginx专题(4) - Nginx原理

本文最后更新于:2021年4月15日 上午

事件驱动异步非阻塞

epoll

如果这篇文章说不清epoll的本质,那就过来掐死我吧!(1)-罗培羽

模块

Nginx 由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个 location block(location 是 Nginx 配置中的一个指令, 用于 URL 匹配),而在这个 location 中所配置的每个指令将会启动不同的模块去完成相应的工作。

Ngxinx的模块从结构上分为核心模块、基础模块和第三方模块

  1. 核心模块:HTTP模块、EVENT模块、MAIL模块
  2. 基础模块:HTTP Access 模块、HTTP FastCGI 模块、HTTP Proxy 模块、HTTP Rewrite 模块
  3. 第三方模块:HTTP Upstream Request Hash 模块、Notice 模块、 HTTP Access Key 模块等
    用户根据自己的需要开发的模块都属于第三方模块。正是有了这么多模块的支撑, Nginx 的功能才会如此强大。Directives placed in the configuration file outside of any contexts are considered to be in the main context. The events and http directives reside in the main context, server in http, and location in server.

Nginx模块从功能上分为如下三类:

1.Handlers(处理器模块):此类模块直接处理请求, 并进行输出内容和修改 headers 信息等操作。Handlers 处理器模块一般只能有一个。
2.Filters (过滤器模块):此类模块主要对其他处理器模块输出的内容进行修改操作, 最后由 Nginx 输出。
3.Proxies (代理类模块):此类模块是 Nginx 的 HTTP Upstream 之类的模块, 这些模块主要与后端一些服务比如 FastCGI 等进行交互, 实现服务代理和负载均衡等功能。

master-worker进程模型

Nginx相关的进程有两类:master和worker。

一个Nginx只能有一个master,但可以有多个worker(worker数量建议与CPU内核数量相同)

请求到达Nginx后由master管理,worker以争抢的方式去获取请求。

master进程负责接收信号,将信号分发给worker进程,监听worker进程工作状态,当worker进程非正常退出时启动新的worker进程。

由于master进程不会对用户请求提供服务,只用于管理真正提供服务的worker进程,所以master进程可以是唯一的,它仅专注于自己的纯管理工作,为管理员提供命令行服务,包括启动服务、停止服务、重载配置文件、平滑升级程序等。master进程需要拥有较大的权限,例如,通常利用root用户启动master进程。worker进程的权限要小于或等于master进程。

一个master进程管理多个worker进程

基本网络事件会交给worker进程处理。多个worker进程之间相互对等,同等竞争来自客户端的请求。各进程之间相互独立,所以不需要加锁,省去加锁带来的开销。

多个worker进程处理互联网请求不仅可以提高服务的健壮性(一个worker进程出错后,其他worker进程仍然可以正常提供服务),最重要的是,这样可以充分利用现在最常见的SMP多核架构,从而实现微观上真正的多核并发处理。

未完待续……

事件驱动机制

未完待续……

参考文档

Nginx 原理详解 - 与 IT 一起的日子 - 51CTO 博客


Nginx专题(4) - Nginx原理
https://muzing.top/posts/c8dc7532/
作者
muzing
发布于
2021年4月8日
更新于
2021年4月15日
许可协议