跳到主要内容

二十、Nginx upstream 模块简介

upstream 模块简介

Nginx 模块一般被分成三大类:handler、filter 和 upstream。前面的章节中,读者已经了解了 handler、filter。利用这两类模块,可以使 Nginx 轻松完成任何单机工作。而本章介绍的 upstream 模块,将使 Nginx 跨越单机的限制,完成网络数据的接收、处理和转发。

数据转发功能,为 Nginx 提供了跨越单机的横向处理能力,使 Nginx 摆脱只能为终端节点提供单一功能的限制,而使它具备了网路应用级别的拆分、封装和整合的战略功能。在云模型大行其道的今天,数据转发是 Nginx 有能力构建一个网络应用的关键组件。当然,鉴于开发成本的问题,一个网络应用的关键组件一开始往往会采用高级编程语言开发。但是当系统到达一定规模,并且需要更重视性能的时候,为了达到所要求的性能目标,高级语言开发出的组件必须进行结构化修改。此时,对于修改代价而言,Nginx 的 upstream 模块呈现出极大的吸引力,因为它天生就快。作为附带,Nginx 的配置系统提供的层次化和松耦合使得系统的扩展性也达到比较高的程度。

言归正传,下面介绍 upstream 的写法。

upstream 模块接口

从本质上说,upstream 属于 handler,只是他不产生自己的内容,而是通过请求后端服务器得到内容,所以才称为 upstream(上游)。请求并取得响应内容的整个过程已经被封装到 Nginx 内部,所以 upstream 模块只需要开发若干回调函数,完成构造请求和解析响应等具体的工作。

这些回调函数如下表所示:

SN描述
create_request生成发送到后端服务器的请求缓冲(缓冲链),在初始化 upstream 时使用。
reinit_request在某台后端服务器出错的情况,Nginx会尝试另一台后端服务器。Nginx 选定新的服务器以后,会先调用此函数,以重新初始化 upstream 模块的工作状态,然后再次进行 upstream 连接。
process_header处理后端服务器返回的信息头部。所谓头部是与 upstreamserver 通信的协议规定的,比如 HTTP 协议的 header 部分,或者 memcached 协议的响应状态部分。