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