标题：Tengine
简介
Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上，针对大访问量网站的需求，添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网，天猫商城等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。
从2011年12月开始，Tengine成为一个开源项目。现在，它由Tengine团队开发和维护。Tengine团队的核心成员来自于淘宝、搜狗等互联网企业。
功能
以下沿引项目主页上的特性介绍：
继承Nginx-1.2.3 的所有特性，100%兼容Nginx的配置；
动态模块加载（DSO）支持。加入一个模块不再需要重新编译整个Tengine；
输入过滤器机制支持。通过使用这种机制Web应用防火墙的编写更为方便；
动态脚本语言Lua支持。扩展功能非常高效简单；
支持管道（pipe）和syslog（本地和远端）形式的日志以及日志抽样；
组合多个CSS、JavaScript文件的访问请求变成一个请求；
可以对后端的服务器进行主动健康检查，根据服务器状态自动上线下线；
自动根据CPU数目设置进程个数和绑定CPU亲缘性；
监控系统的负载和资源占用从而对系统进行保护；
显示对运维人员更友好的出错信息，便于定位出错机器；
更强大的防攻击（访问速度限制）模块；
更方便的命令行参数，如列出编译的模块列表、支持的指令等；
可以根据访问文件类型设置过期时间；
编译
tengine的编译参数与nginx基本一致，针对tengine的新增特性，可以在编译的时候增加一些参数，比如增加“ --with-http_concat_module”这一参数，就可以使将tengine的组合多个访问请求变为一个的功能打开。以下是一段tengine的编译参数实例：
./configure --prefix=/usr/local/nginx --conf-path=/usr/local/nginx/conf/nginx.conf --with-http_concat_module --with-http_realip_module --with-http_addition_module --with-http_gzip_static_module --with-http_random_index_module --with-http_stub_status_module --with-http_sub_module --with-http_dav_module --with-pcre=/usr/local/src/pcre-8.20
特性详解
CDN Combo这一功能可以组合Javascript 以及 Css文件
使用方法:
a)以两个问号(??)激活combo
b)多文件之间用半角逗号(,)分开
c)用一个?来便是时间戳
作用:
遵循Yahoo!前端优化准则第一条：减少HTTP请求发送次数强制gzip压缩默认开启的功能
作用：
Tengine会在用户浏览器没有在请求中带Accept-Encoding时通过下列方式判断是否gzip，保证只要支持gzip的浏览器中都会被覆盖到.
a)如果浏览器没有带有Accept-Encoding且cookie中没有gzip支持标识
b)通过User-Agent判断是否支持
c)发送一段js脚本，脚本中请求一个永远都gzip的url
d)如果该段内容被执行，则写入一个cookie值标识此浏览器支持gzip过载保护在http{}段添加
sysguard on; sysguard_load load=4 action=/high_load.html; #系统负载，超过设置值了就跳转到action设置的页面
sysguard_mem swapratio=10% action=/mem_high.html #内存负载，超过设置值了就跳转到action设置的页面
作用：
可以在系统超负载时友好提示用户，增强用户体验。
提示:
大家可以通过 top命令来查看当前系统负载，最好是借助第三方工具进行服务器负载监控，进行数天或1个月的监控，分析出准确适合的运营数据后再设置过载保护功能。
修改nginx默认使用的消息模型
添加方法：
在events {}段添加
use epoll;
作用:
使用linux内核最新支持的epoll句柄处理模型，对于大流量的网站这个配置开启提升会非常大。
(注:确定系统内核版本>=2.5.44 最好是2.6+, 查看方式uname -a)
隐藏webServerName
添加方法: 
在http{} 段内添加
server_tag off;
或
server_tag IIS/6.0;
作用:
隐藏真实web服务器名称，防止hacker有针对性的突破
nginx进程设置简化
添加方法：
修改配置文件中的worker_process为以下
worker_processes auto;worker_cpu_affinity auto;
作用：
在不同硬件环境下对于nginx本身的生产进程优化会由webserver自动调整，而无需专业知识进行调优。
扩展4xx,5xx错误提示
添加方法：
在http{} 段内添加
server_info on;server_admin xxx@xxx.xxx;
作用:
展示管理员联系方式以便用户反馈错误
扩展的nginx命令行参数
方法：
切换至 
/usr/local/nginx/sbin
列出当前已编译的模块
./nginx -m
列出当前支持的指令
./nginx -l
日志抽样支持
方法:
Example:access_log xxxx ratio=0.01;
作用:
减少日志数量。
版本发布
Tengine-1.4.3 [2013-01-21]
Feature：增加TFS模块，可以通过RESTful接口与TFS分布式文件系统通信 [zhcn381, monadbobo]
Feature：增加$sent_cookie_XXX系列变量，可以获取响应中Set-Cookie头的cookie值 [skoo87]
Feature：syslog指令的发送地址支持域名 [cfsego]
Change：upstream块中的server指令增加id属性 [yaoweibin]
Bugfix：DSO模块修正reload时可能失败的问题 [monadbobo]
Bugfix：修复upstream_check模块当超时时间长于检查时间可能导致段错误的问题 [yaoweibin]
Bugfix：修复user_agent模块在请求缺少User-Agent头会段错误的问题 [dinic]
Bugfix：修复sysguard模块在Mac OS下面不能工作的问题 [lizi]
Tengine-1.4.2 [2012-11-22]
Feature：增加--dso-tool-path配置选项，可以选择dso_tool脚本的安装目录 [monadbobo]
Feature：增加$unix_time变量，表示当前的时间戳秒数 [yaoweibin]
Feature：Makefile中增加test命令以便运行测试用例 [yaoweibin]
Feature：sysguard模块可在location里面配置 [lifeibo]
Change：合并Nginx-1.2.4和Nginx-1.2.5的更新 [zhuzhaoyuan]
Change：增加对input_filter函数返回值的检查，防止第三方模块调用出错 [cfsego]
Bugfix：修复limit_req指令不能使用4个参数的问题，感谢LazyZhu的报告 [monadbobo]
Bugfix：修复在cygwin下面编译sysinfo文件出错的问题，感谢Cao Peiran的报告 [lifeibo]
Bugfix：修复user-agent模块安装时需要拷贝browsers配置文件的问题，感谢Jianbin Xiao的报告 [monadbobo]
Bugfix：修复DSO模块RPM打包安装目录出错的问题，感谢Jianbin Xiao和Ren Xiaolei的报告 [monadbobo]
Tengine-1.4.1 [2012-10-10]
Feature： 添加jemalloc库的支持 [fanjizhao]
Feature： 加入$dollar变量, 它的值就是美元符号 [zhuzhaoyuan]
Feature： 为worker_cpu_affinity指令加入off选项 [cfsego]
Change： 当工作进程异常退出以后，新进程不会绑定CPU亲缘性 [cfsego]
Bugfix: 修正在Mac OS操作系统下，Lua模块与LuaJIT动态编译时出现的错误 [monadbobo]
Bugfix: 修正动态编译第三方filter模块时出现的模块执行顺序错误 [monadbobo]
Tengine-1.4.0 [2012-09-05]
Feature： 增加动态模块加载支持（DSO），要添加一个模块不再需要重新编译tengine了 [monadbobo]
Feature： 更新Lua模块到最新的稳定版本 [chaoslawful, agentzh, jinglong]
Feature： 为健康检查模块增加json和csv格式的输出 [yaoweibin]
Feature： 增加log_empty_request指令，可以用来关掉空请求日志——那些连接了但没发数据的连接 [zhuzhaoyuan]
Feature： 给concat模块增加concat_delimiter指令，设置文件间的间隔内容 [dinic]
Feature： 增加concat_ignore_file_error指令并允许concat的语法更宽松 [dinic]
Feature： 给error_page指令增加default选项，以恢复所有的错误页面为默认值 [jinglong]
Feature： 给proc模块增加priority指令，可设置proc进程的优先级 [yzprofile]
Feature： 给proc模块增加delay_start指令，可设置延迟加载时间 [yzprofile]
Change： 集成最新nginx稳定版本1.2.3的内容 [zhuzhaoyuan]
Bugfix： 修正一个geo模块设了range但是没有默认值时产生的段错误问题 [yzprofile]
Bugfix： 修正一个proc模块的空指针问题 [yzprofile]
Bugfix： 修正一个健康检查模块的socket泄漏问题 [yaoweibin]
Bugfix： 修正limit_req模块的若干问题 [monadbobo]
Bugfix： 修正若干日志输出类型错误的问题 [yaoweibin]
Bugfix： 修正perl模块和proc一起打开的一个编译错误 [yzprofile]
Tengine-1.3.0 [2012-05-25]
Feature：加入Lua模块，可以在配置中使用Lua语言 [chaoslawful, agentzh]
Feature：加入procs模块，可以更方便的开启独立进程 [yzprofile]
Change：user_agent模块中参数nongreedy改名为greedy [dinic]
Bugfix：修复syslog指令中因为指针未初始化引起的段错误 [cfsego]
Bugfix：修复syslog指令打开--with-ipv6选项引起的编译错误 [cfsego]
Tengine-1.2.5 [2012-05-09]
Feature：增加upstream_check模块，对后端服务器做主动健康检查，以自动的下线失效的服务器 [yaoweibin]
Feature：允许syslog输出日志时指定程序的标识（program identifier） [cfsego]
Change：合并nginx-1.0.14至nginx-1.0.15之间的修改 [zhuzhaoyuan]
Change：将accept_mutex_delay的默认值从500毫秒更改为100毫秒以提高性能 [zhuzhaoyuan]
Bugfix：修复syslog的一个在后端服务器连接不上导致端错误的bug [cfsego]
Bugfix：修复access_log可能和buffer参数冲突的bug [cfsego]
Tengine-1.2.4 [2012-03-30]
Feature：增加user_agent模块 [dinic]
Feature：增加log_escape指令 [agentzh, skoo87]
Change：合并nginx-1.0.12至nginx-1.0.14之间的修改 [zhuzhaoyuan]
Bugfix：修复limit_req模块的一个bug [liseen.wan]
Bugfix：修复subrequest的一个bug [lifeibo]
Tengine-1.2.3 [2012-02-27]
Feature：增加request_time_cache指令，用来控制是否启用精确的响应时间 [yzprofile]
Feature：增加slice模块，获得一个文件的一个片段，可以添加头和尾 [zhuzhaoyuan]
Change：合并nginx-1.0.11至nginx-1.0.12之间的修改 [zhuzhaoyuan]
Change：去掉无用的user-agent判断 [zhuzhaoyuan]
Bugfix：修复upstream中的一个process_header的bug [lifeibo]
Bugfix：修复expires_by_types的一个bug [lifeibo]
Tengine-1.2.2 [2012-01-11]
Feature：增加input body filter机制 [cfsego]
Feature：对mail部分支持ssl的dialog [cfsego]
Change：合并进nginx-1.0.10至nginx-1.0.11之间的修改 [zhuzhaoyuan]
Change：默认关掉lingering_close [zhuzhaoyuan]
Bugfix：修正日志管道时的bug [cfsego]
Bugfix：修正limit_req的forbid_action无效的bug [monadbobo]
Bugfix: 修正backtrace模块backtrace_max_stack_size的问题 [monadbobo]
Bugfix：修正内容为空footer模块输出不正确的问题 [dinic]
Bugfix：修正syslog时hostname最后一个字母丢失的问题 [cfsego]
Tengine-1.2.1 [2011-12-06]
Bugfix：修正默认错误日志和访问日志不存在时启动报错的bug [yzprofile]
Tengine-1.2.0 [2011-11-29]
Feature：错误日志和访问日志支持输出到syslog [cfsego]
Feature：错误日志和访问日志支持输出到管道的方式 [cfsego]
Feature：增加realloc相关的API，包括内存池 [gongyuan]
Feature：HTTP日志支持更多的有关时间的变量 [skoo87]
Feature：增加backtrace模块，在coredump时输出调用栈 [monadbobo]
Feature：limit_req功能增强，增加白名单，可以有多个条件 [monadbobo]
Feature：sysguard模块，load和内存占用偏高时进行保护 [lifeibo]
Feature：增加API（ngx_http_header_in/ngx_http_header_out），用来取输入和输出的HTTP头信息 [lifeibo]
Feature：增加两个变量$request_time_msec和$request_time_usec，分别是相应时间的毫秒表示和微秒表示 [jinglong]
Feature：增加footer模块，可以在HTML末尾添加内容（支持变量） [yunxing]
Feature：增加变量$conn_requests，记录当前request是连接上的第几个 [lieyuan]
Feature：增加变量$host_comment，插入注释功能，以说明哪台机器产生的请求 [yunxing]
Feature：访问日志增加ratio参数，抽样功能，可以减少日志的记录量 [cfsego]
Feature：增加server_admin、server_info指令，出错信息提示，更友好的错误页面 [lieyuan]
Feature：增加命令行参数-d，把配置文件的内容全部打印出来 [piaoliang]
Feature：增加指令expires_by_types，可以根据types来设置超时 [lifeibo]
Feature：增加命令行参数-l，可以列出所有的directives [dinic]
Feature：增加ngx_atoll的api，可以将字符串转换成64位整数，支持32位与64位系统 [lifeibo]
Feature：status line（302，405）现在采用RFC 2616的标准 [zhuzhaoyuan]
Feature：ngx_escape_uri/ngx_unescape_uri现在支持PHP/Java的编解码格式 [zhuzhaoyuan]
Feature：配置文件include多个文件时按照字母顺序进行包含 [zhuzhaoyuan]
Feature：error_page指令增强，支持default，可以把把上一级设置的error_page重新设定 [zhuzhaoyuan]
Feature：增加对每请求的响应时间的统计（cacti，tsar） [jinglong]
Feature：增加指令server_tag，更强大的控制HTTP服务器的Server头是否显示以及内容是什么 [jinglong]
Feature：自动调整worker进程的数目和绑定CPU亲缘性 [cfsego]
Feature：增加指令ssl_pass_phrase_dialog，SSL对key进行加密功能 [cfsego]
Feature：增加-s选项的start参数 [zhuzhaoyuan]
Feature：增加-m选项，可以把已编译的模块列出来 [zhuzhaoyuan]
Change：更改msie_padding的默认值为关掉 [zhuzhaoyuan]
Bugfix：修复open_file_cache在已经检测到缓存文件发生变化后，仍然返回过时的文件状态信息的问题 [cfsego]
Bugfix：修复upsteam在subrequest in memory且keepalive时会导致timeout的bug [lifeibo]
Bugfix：修复$sent_http_connection和$sent_http_keep_alive记录不正确的问题 [zhongsheng]
Bugfix：修正error_page不能发现重复的code的问题，不能正常继承上一级设置的问题 [zhuzhaoyuan]
Bugfix：修正Nginx在处理FastCGI时有重复HTTP头会core dump的bug [monadbobo]
Bugfix：修正Nginx对CPU亲缘性设置不正确的bug [cfsego]