前言
Nginx 是一个 免费的 , 开源的 , 高性能 的 HTTP 服务器和 反向代理 , 以及 IMAP / POP3代理服务器 。Nginx 以其高性能 , 稳定性 , 丰富的功能 , 简单的配置和低资源消耗而闻名 。Nginx 是一个 Web 服务器 , 也可以用作 反向代理 , 负载均衡器 和 HTTP 缓存 。
很多高知名度的网站都使用 Nginx , 如: Netflix , GitHub , SoundCloud , MaxCDN 等 。
文章插图
正文
1. Nginx的整体架构
文章插图
1.1. 主进程
Nginx 启动时 , 会生成两种类型的 进程 * , 一个是 主进程 ( master ) , 一个 ( windows版本的目前只有一个)或 多个工作进程 ( worker ) 。 主进程 并不处理网络请求 , 主要负责 调度工作进程 , 也就是图示的 3 项: 加载配置 、 启动工作进程 及 非停升级 。所以 , Nginx 启动以后 , 查看操作系统的进程列表 , 我们就能看到 至少有两个 Nginx 进程 。
1.2. 工作进程
服务器实际 处理网络请求 及 响应 的是 工作进程 ( worker ) , 在类 unix 系统上 , Nginx可以配置 多个 worker , 而每个 worker 进程 都可以同时处理 数以千计 的 网络请求 。
1.3. 模块化设计
Nginx 的 worker 进程 , 包括 核心 和 功能性模块 , 核心模块 负责维持一个 运行循环 ( run-loop ) , 执行网络请求处理的 不同阶段 的模块功能 , 比如: 网络读写 、 存储读写 、 内容传输 、 外出过滤 , 以及 将请求发往上游服务器 等 。而其代码的 模块化设计 , 也使得我们可以根据需要对 功能模块 进行适当的 选择 和 修改 , 编译成具有 特定功能 的服务器 。
1.4. 事件驱动模型
基于 异步及非阻塞 的 事件驱动模型 , 可以说是 Nginx 得以获得 高并发 、 高性能 的关键因素 , 同时也得益于对 linux 、 Solaris 及类 BSD 等操作系统内核中 事件通知 及 I/O 性能增强功能 的采用 , 如 kqueue 、 epoll 及 event ports。
1.5. 代理(proxy)设计
代理设计 , 可以说是 Nginx 深入骨髓的设计 , 无论是对于 HTTP , 还是对于 FastCGI 、 Memcache 、 redis 等的网络请求或响应 , 本质上都采用了 代理机制 。所以 , Nginx 天生就是高性能的 代理服务器 。
2. Nginx的模块化设计
高度模块化的设计是 Nginx 的架构基础 。Nginx 服务器被分解为 多个模块 , 每个模块就是一个 功能模块 , 只负责自身的功能 , 模块之间严格遵循 “高内聚 , 低耦合” 的原则 。
文章插图
2.1. 核心模块
核心模块是 Nginx 服务器正常运行 必不可少 的模块 , 提供 错误日志记录 、 配置文件解析、 事件驱动机制 、 进程管理 等核心功能 。
2.2. 标准HTTP模块
标准 HTTP 模块提供 HTTP 协议解析相关的功能 , 比如: 端口配置 、 网页编码设置 、 HTTP响应头设置 等等 。
2.3. 可选HTTP模块
可选 HTTP 模块主要用于 扩展 标准的 HTTP 功能 , 让 Nginx 能处理一些特殊的服务 , 比如: Flash 多媒体传输 、解析 GeoIP 请求、 网络传输压缩 、 安全协议 SSL 支持等 。
2.4. 邮件服务模块
邮件服务模块主要用于支持 Nginx 的 邮件服务 , 包括对 POP3 协议、 IMAP 协议和 SMTP协议的支持 。
2.5. 第三方模块
第三方模块是为了扩展 Nginx 服务器应用 , 完成开发者自定义功能 , 比如: Json 支持、 Lua 支持等 。
3. Nginx的请求方式处理
推荐阅读
- 在Nginx服务器上安装SSL证书
- 是什么导致你的Java服务器内存和CPU占用过高呢
- 无监控不运维 云服务器靠什么稳定
- 只需几分钟安全配置Linux服务器
- DHCP服务器出现故障,导致整个公司断网!快部署第二台DHCP服务器
- nginx搭建静态网站
- 502 bad gateway nginx什么意思
- 服务器部署:php.ini 配置性能调优
- WIFI怎样用域用户认证?用Windows Server 2019搭建Radius服务器
- nginx怎么下载