一、Tengine概述
Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。它的目的是打造一个高效、安全的Web平台。完全兼容Nginx。
首先介绍下Nginx,nginx [engine x]是Igor Sysoev编写的一个HTTP和反向代理服务器,另外它也可以作为邮件代理服务器。 它已经在众多流量很大的俄罗斯网站上使用了很长时间,这些网站包括Yandex、Mail.Ru、VKontakte,以及Rambler。它是一款轻量级,高性能http和反向代理以及电子邮箱的服务器。
在这里要重点说下正向代理和反向代理(之后的都是基于自己理解的可能有些偏差):
正向代理:是一个请求或者报文(里面不仅仅包含请求内容,还要所要访问的服务器的地址),发送到服务器上,该服务器按照请求,将请求转发到目标服务器中。这里服务器的功能不单一,每台服务器中都存储数据。性能比较差。
反向代理(分布式服务器):是一个请求或者报文(里面只包含请求内容,没有所要访问的服务器的地址),只能发送到一个代理服务器(该服务器只执行行请求),该服务根据请求自动找到该请求所需资源的服务器(每个服务器存储的数据不同(每个数据库存储的资源不同)),并将请求结果返回给代理服务器,请求给用户。性能比较优越,同时可以处理高并发的访问量,提高效率。
而淘宝的 Nginx,集成了 lua 模块,若要是使用官方的 Nginx,默认安装没有 lua模块,自己安装配置较为麻烦,所以我们选择 Tengine。Tengine 主要负责展示图片和调度 Lua 脚本。
它的简单介绍请参考网站:
http://tengine.taobao.org/documentation_cn.html
二、安装Tengine
本博客用的linux系统版本是centos7,网络配置也就不详细介绍了请参照博客
http://blog.csdn.net/qq_38776653/article/details/73550714
1、源码下载
源码是由github托管,下载地址如下:
https://github.com/alibaba/tengine
也可以用linux的下载命令行:
sudo yum install wget #安装wget
wget https://github.com/alibaba/tengine/archive/tengine-2.2.0.tar.gz #下载源文件
本博客以最新的版本来展示使用和安装:
tengine-tengine-2.2.0.tar.gz
2、编译环境和安装必须组件的搭建
2.1编译环境的搭建
编译时一定要确定linux系统里面有c和c++的编译器(编译环境),这里就不详细介绍了,本机子里面已经编译过别的软件,下面的命令可以参考一下:
sudo yum -y install make gcc gcc-c++ gcc-g77 flex bison file libtool libtool-libs autoconf kernel-devel libjpeg libjpeg-devel libpng libpng-devel libpng10 libpng10-devel gd gd-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glib2 glib2-devel bzip2 bzip2-devel libevent libevent-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel gettext gettext-devel ncurses-devel gmp-devel pspell-devel unzip libcap lsof build-essential cmake 1g-dev pkg-config libssl-dev lzo-devel fuse fuse-devel zlib1g-dev libprotobuf-dev protobuf-compiler snappy libbz2-dev libjansson-dev libfuse
sudo yum -y groupinstall "Development Tools"
查看其他博客也可以执行下面的命令来搭建编译环境:
sudo yum update
sudo yum install gcc gcc-c++ autoconf automake
2.2安装所必须的组件(这一步看tengine的功能来安装)
A、PCRE
PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。nginx rewrite依赖于PCRE库,所以在安装Tengine前一定要先安装PCRE,最新版本的PCRE可在官网(http://www.pcre.org/)获取。具体安装流程为:
cd /home/hadoop/app #指定下载地址
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.38.tar.gz#下载源文件
tar -zxvf pcre-8.38.tar.gz
cd pcre-8.38
./configure --prefix=/home/hadoop/soft/pcre
make && make install
cd /home/hadoop/soft/pcre
chown -R hadoop:hadoop pcre
#修改文件的所有者
在安装过程中会出现下面的错误:
libtool: install: /usr/bin/install -c .libs/libpcre.so.1.2.6 /home/hadoop/soft/pcre/lib/libpcre.so.1.2.6
libtool: install: (cd /home/hadoop/soft/pcre/lib && { ln -s -f libpcre.so.1.2.6 libpcre.so.1 || { rm -f libpcre.so.1 && ln -s libpcre.so.1.2.6 libpcre.so.1; }; })
libtool: install: (cd /home/hadoop/soft/pcre/lib && { ln -s -f libpcre.so.1.2.6 libpcre.so || { rm -f libpcre.so && ln -s libpcre.so.1.2.6 libpcre.so; }; })
libtool: install: /usr/bin/install -c .libs/libpcre.lai /home/hadoop/soft/pcre/lib/libpcre.la
libtool: warning: relinking 'libpcreposix.la'
libtool: install: (cd /home/hadoop/app/pcre-8.38; /bin/sh "/home/hadoop/app/pcre-8.38/libtool" --silent --tag CC --mode=relink gcc -fvisibility=hidden -g -O2 -version-info 0:3:0 -o libpcreposix.la -rpath /home/hadoop/soft/pcre/lib libpcreposix_la-pcreposix.lo libpcre.la )
mv: cannot move 'libpcreposix.so.0.0.3' to 'libpcreposix.so.0.0.3U': Permission denied
libtool: error: error: relink 'libpcreposix.la' with the above command before installing it
make[2]: *** [install-libLTLIBRARIES] 错误 1
make[2]: 离开目录“/home/hadoop/app/pcre-8.38”
make[1]: *** [install-am] 错误 2
make[1]: 离开目录“/home/hadoop/app/pcre-8.38”
make: *** [install] 错误 2
这是由于权限不够,必须切换到root用户下再进行上述操作。
B、OpenSSL
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。,安装OpenSSL(http://www.openssl.org/source/)主要是为了让tengine支持Https的访问请求。具体是否安装看需求。
复制代码 代码如下:
cd /home/hadoop/app
wget http://www.openssl.org/source/openssl-1.0.2.tar.gz
tar -zxvf openssl-1.0.2.tar.gz
cd openssl-1.0.2
./config --prefix=/home/hadoop/soft/openssl
su #切换root用户
make && make install
cd /home/hadoop/soft
chown -R hadoop:hadoop openssl
C、Zlib
Zlib是提供资料压缩之用的函式库,当Tengine想启用GZIP压缩的时候就需要使用到Zlib(http://www.zlib.net/)
cd /home/hadoop/app
wget http://zlib.net/zlib-1.2.11.tar.gz
tar -zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure --prefix=/home/hadoop/soft/zlib
su #切换root用户
make && make install
cd /home/hadoop/soft
chown -R hadoop:hadoop zlib
D、jemalloc
jemalloc(http://www.canonware.com/jemalloc/)是一个更好的内存管理工具,使用jemalloc可以更好的优化Tengine的内存管理。
cd /home/hadoop/app
wget https://github.com/jemalloc/jemalloc/releases/download/5.0.1/jemalloc-5.0.1.tar.bz2
tar -jxvf jemalloc-5.0.1.tar.bz2
cd jemalloc-5.0.1
./configure --prefix=/home/hadoop/soft/jemalloc
su #切换root用户
make && make install
cd /home/hadoop/soft
chown -R hadoop:hadoop jemalloc
3、将源码传到linux,解压,编译
tar -zxvf tengine-tengine-2.2.0.tar.gz -C /home/hadoop/app/
#把源文件解压到用户hadoop根目录下的app文件夹下
cd /home/hadoop/app #切换到目标目录
mv tengine-tengine-2.2.0 tengine #可以给文件夹取别名,改不改都可以
cd tengine #切换到文件的目录
./configure --prefix=/home/hadoop
#初始化文件夹,--prefix指的是文件的安装位置,可以不指定,默认将安装在/usr/local/nginx目录
make #编译文件
sudo make install #安装tengine,
在编译安装过程中会编译不上,重新执行./configure –prefix=/home/hadoop/soft/tengine就ok了。
4、配置Tengine,设置tengine自动启动
编辑启动文件
vi /etc/rc.d/init.d/nginx
添加下面内容
#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig: - 85 15
# description: Nginx is an HTTP(S) server, HTTP(S) reverse \
# proxy and IMAP/POP3 proxy server
# processname: nginx
# config: /etc/nginx/nginx.conf
# config: /etc/sysconfig/nginx
# pidfile: /var/run/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="/home/hadoop/tengine/sbin/nginx"
prog=$(basename $nginx)
NGINX_CONF_FILE="/home/hadoop/tengine/conf/nginx.conf"
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
lockfile=/var/lock/subsys/nginx
make_dirs() {
# make required directories
user=`$nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
if [ -z "`grep $user /etc/passwd`" ]; then
useradd -M -s /bin/nologin $user
fi
options=`$nginx -V 2>&1 | grep 'configure arguments:'`
for opt in $options; do
if [ `echo $opt | grep '.*-temp-path'` ]; then
value=`echo $opt | cut -d "=" -f 2`
if [ ! -d "$value" ]; then
# echo "creating" $value
mkdir -p $value && chown -R $user $value
fi
fi
done
}
start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
make_dirs
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 $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
configtest || return $?
stop
sleep 1
start
}
reload() {
configtest || return $?
echo -n $"Reloading $prog: "
killproc $nginx -HUP
RETVAL=$?
echo
}
force_reload() {
restart
}
configtest() {
$nginx -t -c $NGINX_CONF_FILE
}
rh_status() {
status $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
exit 2
esac
注意修改下面几处:前面是安装路径:
nginx=”/home/hadoop/tengine/sbin/nginx” 修改成nginx执行程序的路径。
NGINX_CONF_FILE=”/home/hadoop/tengine/conf/nginx.conf” 修改成配置文件的路径
chmod 775 /etc/rc.d/init.d/nginx #赋予文件执行权限
chkconfig –add /etc/rc.d/init.d/nginx
chkconfig nginx on #设置开机启动
systemctl restart nginx # 启动服务
“`