NGINX 项目架构概览

64 阅读4分钟

项目简介

NGINX 是世界上最流行的Web服务器、高性能负载均衡器、反向代理、API网关和内容缓存。它是免费的开源软件,采用简化的2条款BSD许可证分发。

核心架构特点

1. 多进程架构

  • Master进程: 维护worker进程,读取和评估配置文件
  • Worker进程: 处理数据(如HTTP请求)
  • Cache Manager进程: 管理缓存相关操作
  • Cache Loader进程: 加载缓存数据

2. 事件驱动模型

  • 基于事件驱动的异步非阻塞架构
  • 支持epoll、kqueue、select等多种事件通知机制
  • 高效的连接处理和内存管理

3. 模块化设计

  • 核心模块(Core Modules)
  • HTTP模块(HTTP Modules)
  • Mail模块(Mail Modules)
  • Stream模块(Stream Modules)
  • 第三方模块支持

目录结构分析

nginx/
├── src/                    # 源代码目录
│   ├── core/              # 核心模块
│   │   ├── nginx.h        # 版本信息和基本定义
│   │   ├── ngx_cycle.h    # 生命周期管理
│   │   ├── ngx_module.h   # 模块系统
│   │   ├── ngx_conf_file.h # 配置文件解析
│   │   └── ngx_connection.h # 连接管理
│   ├── event/             # 事件处理模块
│   │   ├── modules/       # 事件处理模块实现
│   │   └── quic/          # QUIC协议支持
│   ├── http/              # HTTP模块
│   │   ├── modules/       # HTTP功能模块
│   │   ├── v2/            # HTTP/2支持
│   │   └── v3/            # HTTP/3支持
│   ├── mail/              # 邮件代理模块
│   ├── stream/            # 流处理模块
│   ├── misc/              # 杂项模块
│   └── os/                # 操作系统相关
│       ├── unix/          # Unix/Linux实现
│       └── win32/         # Windows实现
├── auto/                  # 构建配置脚本
├── conf/                  # 配置文件示例
├── contrib/               # 贡献的工具和脚本
└── docs/                  # 文档

image.png

image.png

核心组件详解

1. 核心系统 (Core System)

生命周期管理 (ngx_cycle_t)

  • 管理整个nginx实例的生命周期
  • 包含配置上下文、连接池、模块列表等
  • 支持配置重载和平滑重启

模块系统 (ngx_module_t)

  • 统一的模块接口定义
  • 支持静态和动态模块加载
  • 模块初始化和清理机制

配置系统 (ngx_conf_t)

  • 灵活的配置文件解析
  • 指令(Directive)系统
  • 配置上下文管理

2. 事件处理系统

事件循环

  • 非阻塞I/O处理
  • 定时器管理
  • 信号处理

连接管理

  • 连接池管理
  • 连接复用
  • 内存池分配

3. HTTP处理系统

请求处理流程

  1. 连接建立
  2. 请求解析
  3. 模块处理链
  4. 响应生成
  5. 连接清理

HTTP模块类型

  • Handler模块: 处理请求内容
  • Filter模块: 过滤响应内容
  • Upstream模块: 反向代理和负载均衡
  • Load Balancer模块: 负载均衡算法

4. 协议支持

HTTP/1.x

  • 标准HTTP/1.0和HTTP/1.1支持
  • Keep-alive连接
  • 分块传输编码

HTTP/2

  • 多路复用
  • 服务器推送
  • 头部压缩

HTTP/3 (QUIC)

  • 基于UDP的传输
  • 内置加密
  • 连接迁移

5. 扩展功能

负载均衡

  • Round Robin
  • IP Hash
  • Least Connections
  • Consistent Hash

缓存系统

  • 文件缓存
  • 内存缓存
  • 缓存键管理

SSL/TLS

  • SSL终端
  • SNI支持
  • OCSP装订

关键特性

1. 高性能

  • 事件驱动架构
  • 零拷贝技术
  • 内存池管理
  • 高效的数据结构

2. 高可用性

  • 平滑重启
  • 配置热重载
  • 健康检查
  • 故障转移

3. 可扩展性

  • 模块化架构
  • 动态模块加载
  • 第三方模块支持
  • 插件系统

4. 安全性

  • 访问控制
  • 速率限制
  • DDoS防护
  • 安全头部

构建系统

auto/ 目录

  • configure脚本生成
  • 平台检测
  • 依赖库检测
  • 编译选项配置

编译流程

  1. 运行 auto/configure
  2. 生成 Makefile
  3. 执行 make 编译
  4. 执行 make install 安装

配置管理

配置文件结构

  • 主配置文件 (nginx.conf)
  • 包含文件支持
  • 上下文层次结构
  • 指令继承机制

配置指令类型

  • 简单指令
  • 块指令
  • 条件指令
  • 变量指令

运行时架构

进程模型

  • Master-Worker模式
  • 进程间通信
  • 信号处理
  • 资源共享

内存管理

  • 内存池分配
  • 垃圾回收
  • 内存对齐
  • 缓存友好设计

网络处理

  • 异步I/O
  • 事件通知
  • 连接复用
  • 流量控制

总结

NGINX采用了高度模块化和事件驱动的架构设计,通过Master-Worker进程模型实现了高性能和高可用性。其灵活的模块系统支持各种功能扩展,从简单的静态文件服务到复杂的反向代理和负载均衡都能胜任。配置系统的设计使得NGINX既强大又易于使用,是现代Web基础设施的重要组成部分。