Nginx 最重要的功能是反向代理和负载均衡,反向代理将允许我们在端口 80 上托管多个域名,同时使用不同的语言编写后端服务,负载均衡可以把多个提供相同功能的后端服务配置成彼此冗余。
Nginx 负责访问日志、黑名单、负载平衡和提供静态文件访问,后台 Web 服务则可专注于业务逻辑处理,Nginx 是动静分离架构的入口程序。
Nginx 支持高并发,内存占用小。
Nginx 支持配置文件动态修改。
nginx 在启动后,会以 daemon 的方式在后台运行,后台进程包含一个 master 进程和多个 worker 进程,worker 进程以非 root 用户运行,可以在配置文件中配置运行 worker 进程的用户。
master 进程主要用来管理 worker 进程,包含:接收来自外界的信号,向各 worker 进程发送信号,监控 worker 进程的运行状态,当 worker 进程退出后(异常情况下),会自动重新启动新的 worker 进程。
worker 进程则是处理基本的网络事件。多个 worker 进程之间是对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的。一个请求,只可能在一个 worker 进程中处理,一个 worker 进程,不可能处理其它进程的请求。
总结其主要功能分别如下:
主进程(master process)的功能:
工作进程(woker process)的功能:
master 进程:负责加载和分析配置文件、管理 worker 进程,平滑升级
worker 进程:接收客户端请求、将请求一次送入各模块过滤、I/O 调用、数据缓存、发送响应
cache相关进程:cache loader (缓存索引重建)与 cache manager( 缓存索引管理)组成
--Cache loader 在 Nginx 服务启动后由主进程生成,根据本地磁盘上缓存建立索引元数据库后退出。
--Cache manager 在元数据更新完成后,对元数据是否过期做出判断。
Nginx 的各种功能和操作都由模块来实现。Nginx 由内核和一系列模块组成,内核提供web服务的基本功能,如启用网络协议,创建运行环境,接收和分配客户端请求,处理模块之间的交互。Nginx 的模块从结构上分为核心模块、基础模块和第三方模块。
核心模块: HTTP 模块、EVENT 模块和 MAIL 模块
基础模块: HTTP Access 模块、HTTP FastCGI 模块、HTTP Proxy 模块和 HTTP Rewrite 模块
第三方模块: HTTP Upstream Request Hash 模块、Notice 模块和 HTTP Access Key 模块及用户自己开发的模块。
这样的设计使 Nginx 方便开发和扩展,Nginx的模块默认编译进 nginx 中,如果需要增加或删除模块,需要重新编译 nginx,这一点不如 Apache 的动态加载模块方便,最新版本 Nginx 已经支持动态模块。