备注:随着版本的不同Nginx的版本也会有所不同,比如STREAM模块的出现。具体情况可以参考《Nginx源码初探 -之数据结构 - 模块数据结构》当理解了Nginx模块的设计之后,再看Nginx的结构体系就会有种豁然明朗的感觉。
相比传统Web服务器,Nginx表现的更具有专业性。在架构上Nginx受到各种操作系统中高级事件机制处理模式的启发,Nginx实现了整体基于master/slave的核心框架,形成了模块化,事件驱动(event-driver)机制,异步处理,单线程非阻塞的架构模式。
以Nginx1.17.7参考,Nginx的内部结构由基础框架,核心模块,HTTP模块,邮件模块,事件模块,配置模块,STREAM模块,第三方模块构成。模块间是分层次,分类别Nginx的核心框架代码只管NGX_CORE_MODULE模块,核心模块对应的类型管理器管理下一层级类型的模块,比如HTTP模块(ngx_http_module)管理NGX_HTTP_MODULE类型模块;事件模块(ngx_event_module)管理NGX_EVENT_MODULE类型模块;邮件模块(ngx_mail_module)管理NGX_MAIL_MODULE类型的模块;STREAM模块(ngx_stream_module)管理NGX_STREAM_MODULE类型的模块。基础功能之外的统称第三方模块,第三方模块是用户根据自己需要所添加的专属功能模块。模块结构详细如下图。
核心模块
核心部分主要负责系统的运行和基础数据结构定义。负责Nginx的启动关闭,日志管理,线程池管理,内存分配等。此外还定义了很多统一的数据结构,比如数组(ngx_array_t),模块(ngx_module_t),线程池(ngx_pool_t),队列(ngx_queue_t)等。其次核心包里定义了一系列的配置管理工具,这些对应系统监控,调优都非常有帮助。
Nginx 核心功能模块详情:
英文链接http://nginx.org/en/docs/ngx_core_module.html
中文链接http://tengine.taobao.org/nginx_docs/cn/docs/ngx_core_module.html
Nginx 基础功能模块
事件模块、http模块、mail模块的共性是:他们在核心模块中各有一个模块作为自己的代理,并在同类模块中有1个作为核心业务与管理功能的模块。例如事件模块在核心模块的代理模块是ngx_events_module,核心模块定义,所有事件模块的加载操作不是有Nginx框架完成的,而是有ngx_event_core_module模块负责。Http模块的代理是ngx_http_module,业务的核心逻辑对于具体请求选用哪一个HTTP模块处理这样的工作,则是由ngx_http_core_module模块决定。
Nginx HTTP模块
Nginx HTTP模块详情
英文链接http://nginx.org/en/docs/
中文链接http://tengine.taobao.org/nginx_docs/cn/docs/
Nginx 事件模块
备注:这里需要提的一个问题是配置模块的变迁,在早期的版本中,配置功能是作为一个独立的模块存在的,Nginx1.17中发现配置功能模块已经不单独存在了。核心包定义了配置模块的数据结构,标准接口,具体实现分散在每个具体的功能模块,巧妙的实现了核心模块和功能模块的解耦。