Nginx 是一款轻量级的 Web 服务器、反向代理服务器,由于它的内存占用少,启动极快,高并发能力强,在互联网项目中广泛应用。
Nginx的特性
- 模块化设计,较好的扩展性;
- 高可靠性 基于master/worker架构设计 支持热部署;
- 可在线升级 不停机更新配置文件、更好日志文件、更新服务器查询版本
- 较低的内存消耗
- 1万个keep-alive连接模式下的非活动连接仅消耗2.5M内存
- event-driven机制:支持aio,mmap(内存映射)
Nginx基本功能:
- 静态资源的web服务器
- 可作为http协议的反向代理服务器
- pop3/imap4协议反向代理服务器
- 支持FastCGI(lnmp)、uWSGI等协议
- 模块化(非DSO机制)机制,著名模块zip,SSL,…
web服务器相关的功能:
支持虚拟主机、keepalive、访问日志、url rewrite重写、路径别名、基于ip即用户的访问控制,支持速率限制及并发数限制,…
Nginx的程序架构
一个master进程,可生成一个或多个worker进程
- master:负责加载分析配置文件、管理worker进程、平滑升级、…
- worker:处理并响应用户请求
一个master有多个worker,每个worker可响应n个请求,每个worker有核心模块core和外围的诸多模块modules组成,为了实现http功能有http协议的ht_core模块,为了功能完善还有很多其它模块,如实现负载均衡的ht_upstream模块,ht_proxy反代模块,Fastcgi模块ht_fastcgi模块;
从完整视角看Nginx的功能
worker进程接收客户端的请求,如果使用缓存功能,可把后端服务器的内容缓存到本地,还负责从缓存中加载数据,直接响应给客户端;如果客户端请求的内容没有,还代理客户端到后端服务器上取资源,如果后端服务器是http就使用http模块进行,如果是php服务器就使用FastCGI模块进行;即向客户端提供服务、向后端提供反代、又能将后端服务器内容在本地缓存下来以提高性能,能够基于kv结构在本地将数据存下来,检索性能是O1的恒定不变,把key(键)缓存在内存中,检索起来非常快;
mmap内存映射,如何文件要想被访问,都要先从磁盘载入(布置到)内存才能被访问;而内存映射指的是,在内存空间中找一段空间,并没有把数据复制过来,是可以直接通过这段内存加载数据,在有些场景中,为了避免打开文件复制内存中这个复制过程,直接把文件映射一下,能够完成某个文件被访问到;