一、Tengine简介

Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台


二、功能描述

  • 继承Nginx-1.6.2的所有特性,兼容Nginx的配置;

  • 动态模块加载(DSO)支持。加入一个模块不再需要重新编译整个Tengine;

  • 支持SO_REUSEPORT选项,建连性能提升为官方nginx的三倍;

  • 支持SPDY v3协议,自动检测同一端口的SPDY请求和HTTP请求;

  • 流式上传到HTTP后端服务器或FastCGI服务器,大量减少机器的I/O压力;

  • 更加强大的负载均衡能力,包括一致性hash模块、会话保持模块,还可以对后端的服务器进行主动健康检查,根据服务器状态自动上线下线,以及动态解析upstream中出现的域名;

  • 输入过滤器机制支持。通过使用这种机制Web应用防火墙的编写更为方便;

  • 支持设置proxy、memcached、fastcgi、scgi、uwsgi在后端失败时的重试次数

  • 动态脚本语言Lua支持。扩展功能非常高效简单;

  • 支持管道(pipe)和syslog(本地和远端)形式的日志以及日志抽样;

  • 支持按指定关键字(域名,url等)收集Tengine运行状态;

  • 组合多个CSS、JavaScript文件的访问请求变成一个请求;

  • 自动去除空白字符和注释从而减小页面的体积

  • 自动根据CPU数目设置进程个数和绑定CPU亲缘性;

  • 监控系统的负载和资源占用从而对系统进行保护;

  • 显示对运维人员更友好的出错信息,便于定位出错机器;

  • 更强大的防攻击(访问速度限制)模块;

  • 更方便的命令行参数,如列出编译的模块列表、支持的指令等;

  • 可以根据访问文件类型设置过期时间;

三、下载并解压

tengine的下载地址:   http://tengine.taobao.org/

我们在linux下下载tengine:

# wget http://tengine.taobao.org/download/tengine-2.1.1.tar.gz

解压tengine-2.1.1.tar.gz:

# tar -zxvf tengine-2.1.1.tar.gz

进入解压后的目录:

cd tengine-2.1.1/

安装需要的依赖软件包:

# yum -y install gcc openssl openssl-devel pcre-devel pcre ngx_cache_purge


四、编译安装Tengine

调用configure编译

./configure --prefix=/usr/local/tengine-2.1.1 --dso-path=/usr/local/tengine-2.1.1/modules --with-http_realip_module --with-http_gzip_static_module --with-http_stub_status_module --with-http_concat_module --http-log-path=/var/log/tengine-2.1.1/access.log --error-log-path=/var/log/tengine-2.1.1/error.log

安装:

make && make install


五、启动Tengine

/usr/local/tengine-2.1.1/sbin/nginx

chown nobody.nobody -R /usr/local/tengine-2.1.1/html

chmod 700 -R /usr/local/tengine-2.1.1/html


六、编辑Tengine服务脚本


vi /etc/rc.d/init.d/tengine

#!/bin/sh

#

#nginx - this script starts and stops the nginx daemon

#

# chkconfig:   - 85 15

# processname: nginx

# config:      /usr/local/tengine-2.1.1/conf/nginx.conf

# pidfile:     /usr/local/tengine-2.1.1/logs/nginx.pid

# Source function library.

. /etc/rc.d/init.d/functions

# Source networking configuration.

. /etc/sysconfig/network

# Check that networking is up.

[ "$NETWORKING" = "no" ] && exit 0

nginx="/usr/local/tengine-2.1.1/sbin/nginx"

prog=$(basename $nginx)

lockfile="/var/lock/subsys/nginx"

pidfile="/usr/local/tengine-2.1.1/logs/${prog}.pid"

NGINX_CONF_FILE="/usr/local/tengine-2.1.1/conf/nginx.conf"

start() {

    [ -x $nginx ] || exit 5

    [ -f $NGINX_CONF_FILE ] || exit 6

    echo -n $"Starting $prog: "

    daemon $nginx -c $NGINX_CONF_FILE

    retval=$?

    echo

    [ $retval -eq 0 ] && touch $lockfile

    return $retval

}

stop() {

    echo -n $"Stopping $prog: "

    killproc -p $pidfile $prog

    retval=$?

    echo

    [ $retval -eq 0 ] && rm -f $lockfile

    return $retval

}

restart() {

    configtest_q || return 6

    stop

    start

}

reload() {

    configtest_q || return 6

    echo -n $"Reloading $prog: "

    killproc -p $pidfile $prog -HUP

    echo

}

configtest() {

    $nginx -t -c $NGINX_CONF_FILE

}

configtest_q() {

    $nginx -t -q -c $NGINX_CONF_FILE

}

rh_status() {

    status $prog

}

rh_status_q() {

    rh_status >/dev/null 2>&1

}

# Upgrade the binary with no downtime.

upgrade() {

    local oldbin_pidfile="${pidfile}.oldbin"

    configtest_q || return 6

    echo -n $"Upgrading $prog: "

    killproc -p $pidfile $prog -USR2

    retval=$?

    sleep 1

    if [[ -f ${oldbin_pidfile} && -f ${pidfile} ]];  then

        killproc -p $oldbin_pidfile $prog -QUIT

        success $"$prog online upgrade"

        echo 

        return 0

    else

        failure $"$prog online upgrade"

        echo

        return 1

    fi

}

# Tell nginx to reopen logs

reopen_logs() {

    configtest_q || return 6

    echo -n $"Reopening $prog logs: "

    killproc -p $pidfile $prog -USR1

    retval=$?

    echo

    return $retval

}

case "$1" in

    start)

        rh_status_q && exit 0

        $1

        ;;

    stop)

        rh_status_q || exit 0

        $1

        ;;

    restart|configtest|reopen_logs)

        $1

        ;;

    force-reload|upgrade) 

        rh_status_q || exit 7

        upgrade

        ;;

    reload)

        rh_status_q || exit 7

        $1

        ;;

    status|status_q)

        rh_$1

        ;;

    condrestart|try-restart)

        rh_status_q || exit 7

        restart

   ;;

    *)

        echo $"Usage: $0 {start|stop|reload|configtest|status|force-reload|upgrade|restart|reopen_logs}"

        exit 2

esac

;wq保存退出

赋予文件执行权限:

# chmod 775 /etc/rc.d/init.d/tengine

设置开机启动:

# chkconfig tengine on

重启Tengine:

# service tengine restart

七、隐藏Tengine版本信息

即在tengine配置文件nginx.conf中的


http{

    server_tokens off;

    server_info off;

    server_tag off;


}  中写入上面三句重启服务即可


到此,Tengine编译安装也就完成了,关于Tengine性能上的优化在这就不阐述了,可以参考自己的服务器配置信息及生产环境所需做必要的内核与其他相关参数的修改。