上篇文章主要讲述了有关Nginx的主配置文件,为何须要很是关注Nginx的主配置文件呢?这是由于它是咱们与nginx的核心,这里的核心不是说nginx的内核部分,而是人机交互的核心,除非基于nginx作二次开发,例如开发第三方模块,通常咱们只须要使用nginx实现咱们的业务需求。不管是web网站、负载均衡仍是反向代理,都须要对其主配置文件熟悉,这样才能玩好其优化。nginx
本文就接着来说述有关nginx模块的相关内容。web
Nginx由内核和各类模块组成。Nginx自己的工做实际不多,当它响应一个HTTP请求时,是经过配置文件将请求映射到一个location block,根据定位中所配置的各个指令启动不一样的模块完成工做,因此这就是为何说模块是Nginx的核心工做者。编程
固然,Nginx的核心部分也不能够忽略,由于它实现了底层的通信协议,为其余模块和Nginx进程构建了基本的运行时环境,且构建了其余模块之间的协做的基础。后端
通常一个location中的指令会涉及一个handler模块和多个filter模块(多个location能够复用同一个模块)。handler模块负责处理请求,完成响应内容的生成,而filter模块对响应内容进行处理。用户根据本身的须要所二次开发的模块都是第三方模块。这也是nignx功能能够如此强大而经久不衰的主要缘由。服务器
首先,模块和功能对应,通常一个模块对应一个或多个功能(通常不会不少,并且同一个模块中,功能相似,能够类比面向对象编程中的重载)。其实这样的作法也是人性化的体现,一方面支持模块扩展,一方面便于开发和维护。这也是解耦思想的应用之一。网络
那究竟什么是Nginx模块呢?负载均衡
模块能够简单理解为一个个封装好的函数,每一个函数实现一个或几个相似的功能,Nginx将这些功能模块组织为一个链,用来应对请求。当一个请求到达的时候,会依次通过这条链上的部分或所有功能模块,进行处理。实现的功能例如:实现对请求解压缩的模块,实现 SSI 的模块,实现与上游服务器进行通信的模块,实现与 FastCGI 服务进行通信的模块。ide
比较特殊的两个模块分别是http模块和mail模块,它们两个居于核心功能部分和各个功能模块之间,从而处理与HTTP协议和email协议有关的事件,同时确保这些事件被以正确的顺序调用其余的一些功能模块。函数
(1)、Nginx的模块基于其结构分为核心模块、基础模块和第三方模块优化
由HTTP模块、EVENT模块和MAIL模块构成。
由HTTP Access 模块、HTTP FastCGI模块、HTTP Proxy模块和HTTP Rewrite 模块构成。
由HTTP Upstream Request Hash模块、Notice 模块和 HTTP Access Key模块构成。
(2)、Nginx的模块基于其功能分为Handlers模块、Filters模块和Proxies模块
Nginx的处理器模块——直接处理请求,而且进行输出内容和修改headers信息等操做,通常状况下Handlers处理器模块只能有一个。
Handlers 模块处理的结果一般有三种状况: 处理成功,处理失败(处理的时候发生了错误)或者是拒绝处理。在拒绝处理的状况下,这个 location 的处理就会由默认的 handler 模块来进行处理。例如,当请求一个静态文件的时候,若是关联到这个 location 上的一个 handler 模块拒绝处理,就会由默认的 ngx_http_static_module 模块进行处理,该模块是一个典型的 handler 模块。
Nginx的过滤器模块——主要对其余处理器模块输出的内容进行修改操做,最后由Nginx输出。它的处理时间在获取回复内容以后,向用户发送响应以前。它的处理过程分为两个阶段,过滤 HTTP 回复的头部和主体,在这两个阶段能够分别对头部和主体进行修改。
Nginx的代理类模块——相似于HTTP Upstream 的模块,这类模块主要与后端一些服务如Fastcgi等进行交互,实现服务代理和负载均衡(load-balancer)等功能。upstream 这类的模块将使得Nginx跨越单机完成网络数据的接收、处理和转发。这也是在云时代,Nginx能够做为有能力的中间件(作转发)的关键网络应用组件。
负载均衡模块用于从upstream指令定义的后端主机列表中选取一台主机。Nginx 先使用负载均衡模块找到一台主机,再使用 upstream 模块实现与这台主机的交互。
这三类功能模块也是基本上做为第三方开发者最可能开发的三种类型的模块