高性能
Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务,使用C语言开发,因为它的稳定性、丰富的功能集和较低的系统资源消耗而闻名。
特性:
- C语言编写,高并发,相比Apache,使用更少的资源,支持5w+的并发连接;
- 采用IO多路复用机制,一个线程处理多个请求,异步非堵塞;
- 轻量级,代码模块化,根据需要添加编译模块;
- sendfile工作机制(内核空间直接到内核空间的传输,0拷贝传输模式);
Nginx 工作进程
Nginx启动后会以Daemon的方式在后台运行,有两类进程,一类是Master进程(完成初始化和管理Worker进程),一类是Worker进程(实际工作进程),启动方式有两种:
- 单进程启动,只有一个进程既充当Master又充当Worker进程;
- 多进程启动,此时只有一个Master进程,一个或多个Worker进程(接收客户端连接);
启动过程:
Nginx模块
- Handler模块
完成客户端请求处理,生成响应数据,如:url重写、静态页面请求、记录访问日志等; - Filter过滤器模块
对Handler产生的数据进行修改; - Proxy代理类模块
HTTP Upstream之类的模块,主要与后端服务交互,实现代理服务和负载均衡等;
Handler模块
| 序号 | 阶段 | 描述 |
|---|---|---|
| 1 | NGX_HTTP_POST_READ_PHASE | 请求头读完成后的阶段 |
| 2 | NGX_HTTP_SERVER_REWRITE_PHASE | Server内请求地址重写 |
| 3 | NGX_HTTP_FINF_CONFIG_PHASE | 配置查找 |
| 4 | NGX_HTTP_REWRITE_PHASE | Location内地址重写 |
| 5 | NGX_HTTP_POST_REWRITE_PHASE | 请求地址重写完成后的阶段 |
| 6 | NGX_HTTP_PREACCESS_PHASE | 访问权限准备检查 |
| 7 | NGX_HTTP_ACCESS_PHASE | 访问权限检查 |
| 8 | NGX_HTTP_POST_ACCESS_PHASE | 访问权限检查之后的阶段 |
| 9 | NGX_HTTP_TRY_FILES_PHASE | 配置项try_files处理 |
| 10 | NGX_HTTP_CONTENT_PHASE | 内容产生 |
| 11 | NGX_HTTP_LOG_PHASE | 日志记录 |
Filters模块
处理Handler产生的响应内容,进行过滤处理以实现功能增强与性能提升,Header与Body会分别经过两条过滤链:
Nginx常用功能
- HTTP服务
动静分离、Web缓存、GZIP压缩、HTTP认证、SSL、URL重写、虚拟主机、HTTP限流 - 负载均衡
- 反向代理:HTTP代理、TCP代理;
- 正向代理
- 邮件服务
- 与Lua脚本结合(使用OpenResty):可以实现动态负载均衡、访问(MySql、Redis)、权限过滤等;