8分钟带你深入浅出搞懂Nginx

Nginx 是一款轻量级的 Web 服务器、反向代理服务器,由于它的内存占用少,启动极快,高并发能力强,在互联网项目中广泛应用。

Nginx的特性

  1. 模块化设计,较好的扩展性;
  2. 高可靠性 基于master/worker架构设计 支持热部署;
  3. 可在线升级 不停机更新配置文件、更好日志文件、更新服务器查询版本
  4. 较低的内存消耗
  5. 1万个keep-alive连接模式下的非活动连接仅消耗2.5M内存
  6. event-driven机制:支持aio,mmap(内存映射)

Nginx基本功能:

  • 静态资源的web服务器
  • 可作为http协议的反向代理服务器
  • pop3/imap4协议反向代理服务器
  • 支持FastCGI(lnmp)、uWSGI等协议
  • 模块化(非DSO机制)机制,著名模块zip,SSL,…

web服务器相关的功能:

支持虚拟主机、keepalive、访问日志、url rewrite重写、路径别名、基于ip即用户的访问控制,支持速率限制及并发数限制,…

Nginx的程序架构

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内存映射,如何文件要想被访问,都要先从磁盘载入(布置到)内存才能被访问;而内存映射指的是,在内存空间中找一段空间,并没有把数据复制过来,是可以直接通过这段内存加载数据,在有些场景中,为了避免打开文件复制内存中这个复制过程,直接把文件映射一下,能够完成某个文件被访问到;