1. Nginx简介以及特点
Nginx简介:
Nginx (engine x) 是一个高性能的web服务器和反向代理服务器,也是一个IMAP/POP3/SMTP服务器- 俄罗斯程序员Igor Sysoev于2002年开始- Nginx是增长最快的Web服务器,市场份额已达33.3%- 全球使用量排名第二2011年成立商业公司
Nginx社区分支:- Openresty作者@agentzh(章宜春)开发的,最大特点是引入了ngx_lua模块,支持使用lua开发插件,并且集合了很多丰富的模块,以及lua库。- Tengine主要是淘宝团队开发。特点是融入了因淘宝自身的一些业务带来的新功能。 - Nginx官方版本,更新迭代比较快,并且提供免费版本和商业版本。
Nginx源码结构:
-
代码量大约11万行C代码
-
源代码目录结构
-
core (主干和基础设置)
-
event (事件驱动模型和不同的IO复用模块)
-
http (HTTP服务器和模块)
-
mail (邮件代理服务器和模块)
-
os (操作系统相关的实现)
-
misc (杂项)
Nginx特点:
-
反向代理,负载均衡器
-
高可靠性、单master多worker模式
-
高可扩展性、高度模块化
-
非阻塞
-
事件驱动
-
低内存消耗
-
热部署
2. Nginx应用场景
场景如下:
-
静态文件服务器
-
反向代理,负载均衡
-
安全防御
-
智能路由(企业级灰度测试、地图POI一键切流)
-
灰度发布
-
静态化
-
消息推送
-
图片实时压缩
-
防盗链
3. Nginx框架模型及流程介绍
进程组件角色:
-
master进程
-
监视工作进程的状态
-
当工作进程死掉后重启一个新的
-
处理信号和通知工作进程
-
worker进程
-
处理客户端请求
-
从主进程处获得信号做相应的事情
-
cache loader进程
-
加载缓存索引文件信息,然后退出
-
cache manager进程
-
管理磁盘的缓存大小,超过预定值大小后最少使用数据将被删除
框架模型:
框架模型流程:
框架模型流程:

核心流程图:

核心流程图:

http请求流程:

Upstream设计:
-
访问第三方Server服务器
-
底层HTTP通信非常完善
-
异步非阻塞
-
上下游内存零拷贝,节省内存
-
支持自定义模块开发

upstream流程:

4. Nginx定制化模块开发
Nginx的模块化设计特点:
-
高度抽象的模块接口
-
模块接口非常简单,具有很高的灵活性
-
配置模块的设计
-
核心模块接口的简单化
-
多层次、多类别的模块设计

核心模块:
handler模块:- 接受来自客户端的请求并构建响应头和响应体。
filter模块:- 过滤(filter)模块是过滤响应头和内容的模块,可以对回复的头和内容进行处理。它的处理时间在获取回复内容之后,向用户发送响应之前。 
upstream模块:- 使nginx跨越单机的限制,完成网络数据的接收、处理和转发,纯异步的访问后端服务。 
load_balance:- 负载均衡模块,实现特定的算法,在众多的后端服务器中,选择一个服务器出来作为某个请求的转发服务器。 
ngx_lua模块:
-
脚本语言
-
内存开销小
-
运行速度快
-
强大的 Lua 协程
-
非阻塞
-
业务逻辑以自然逻辑书写
