Tengine 是由淘宝网发起的 Web 服务器项目。它在 Nginx 的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine 的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。
1.Tengine源码获取
Tengine 使用 Tengine 2.3.2演示,据其官网介绍,该版本继承了 Nginx 1.17.3 版本的所有特性,并兼容了 Nginx 的配置参数。Tengine 开发了很多自有模块,同时也集成了很多优秀的第三方模块,源代码可以通过 Tengine 的官方网站获得,获取命令如下:
mkdir -p /opt/data/source cd /opt/data/source wget http://tengine.taobao.org/download/tengine-2.3.2.tar.gz tar zxmf tengine-2.3.2.tar.gz
2.编译配置参数
Tengine 比开源版 Nginx 增加了一些编译配置参数。Tengine 增加的编译配置参数如下表所示。
编译配置参数 | 默认编译状态 | 参数说明 |
--without-procs | 编译 | 不编译 Procs 模块 |
--without-http_ssl_module | 编译 | 不编译 HTTP SSL 支持模块 |
--without-http_stub_status_module | 编译 | 不编译运行状态模块 |
--without-http-upstream-rbtree | 编译 | 不使用红黑树(RBTree)方式进行上游服务器的查找 |
--with-http_lua_module | 不编译 | 编译 Lua 脚本模块 |
--with-stream_sni | 不编译 | 编译 TCP 代理时基于 SSL 的 SNI 支持 |
--with-jemalloc | 不编译 | 启用 jemalloc 内存管理 |
对于上表,有以下两点说明。
-
- jemalloc 是 Facebook 开源的一个内存管理分配器;
- Nginx 原有编译配置参数参见《Nginx源码编译安装》一节。
3.代码编译
代码编译过程如下。
# 安装编译依赖 yum -y install gcc pcre-devel zlib-devel openssl-devel libxml2-devel \ libxslt-devel gd-devel GeoIP-devel yajl-devel jemalloc-devel \ libatomic_ops-devel luajit luajit-devel perl-devel perl-ExtUtils-Embed # 执行编译配置 ./configure # 代码编译及安装 make & make install
安装 Lua 或 LuaJIT 都可以,LuaJIT 是 Lua 的高效版本,推荐安装 LuaJIT。编译完成后,默认安装目录为 /usr/local/nginx。
4.Tengine 集成的模块
Tengine 自带的模块都存储在源码目录的 modules 文件中,用户可根据需要通过编译配置参数--add-module
进行选择。模块说明如下表所示。
模块文件夹名 | 模块说明 |
mod_dubbo | 提供对与后端 Dubbo 服务体系对接的支持 |
ngx_backtrace_module | 该模块可用于在工作进程异常退出时转储 Nginx 的回溯信息,如在接收到某些信号(sigabr、sigbus、sigfpe、sigill、sigiot、sigsegv)时。它非常便于调试 |
ngx_debug_pool | 该模块可以提供 Nginx/Tengine 内存池占用内存的状态信息 |
ngx_debug_timer | 该模块可以提供 Nginx/Tengine 定时器的状态信息 |
ngx_http_concat_module | 类似于 Apache 中的 mod_concat 模块,用于将多个文件合并在一个响应报文中 |
ngx_http_footer_filter_module | 在请求的响应末尾输出一段内容 |
ngx_http_lua_module | Lua 脚本集成模块 |
ngx_http_proxy_connect_module | 提供对 HTTP 的 CONNECT 方法的支持 |
ngx_http_reqstat_module | 监控模块 |
ngx_http_slice_module | 文件切片模块 |
ngx_http_sysguard_module | 该模块监控内存(含 SWAP 分区)、CPU 和请求的响应时间,当某些监控指标达到设定的阈值时,跳转到指定的 URL |
ngx_http_tfs_module | 该模块实现了 TFS 的客户端,为 TFS 提供了 RESTful API。TFS 的全称是 Taobao File System,是淘宝的一个开源分布式文件系统 |
ngx_http_trim_filter_module | 该模块用于删除 HTML、内嵌在 JavaScript 和 CSS 中的注释以及重复的空白符 |
ngx_http_upstream_check_module | 该模块可以为 Tengine 提供主动式后端服务器健康检查功能 |
ngx_http_upstream_consistent_hash_module | 该模块提供一致性 hash 作为负载均衡算法 |
ngx_http_upstream_dynamic_module | 此模块可在运行时动态解析 upstream 中 Server 域名 |
ngx_http_upstream_dyups_module | upstream 动态修改模块 |
ngx_http_upstream_session_sticky_module | 该模块是一个负载均衡模块,通过 cookie 实现客户端与后端服务器的会话保持,在一定条件下可以保证同一个客户端访问的是同一个后端服务器 |
ngx_http_upstream_vnswrr_module | 该模块是一个高效的负载均衡算法,同 Nginx 官方的加权轮询算法 SWRR 相比,VNSWRR 具备平滑、散列和高性能特征 |
ngx_http_user_agent_module | 该模块可以分析 HTTP 消息头属性字段“User-Agent”中的内容 |
ngx_multi_upstream_module | Dubbo 服务的多路复用连接支持模块 |
ngx_slab_stat | 该模块可以提供 Nginx/Tengine 共享内存的状态信息 |
上述模块功能说明来源于源码中的说明文档,具体使用方法可参照源码中的说明文档。
Tengine 编译完成后,可使用nginx -m
命令查看所有已经加载的模块,static 标识是静态编译的,shared 标识是动态编译的。