本文收录在Linux运维企业架构实战系列
今天想起当初研究nginx反向代理负载均衡时,nginx自身的upstream后端配置用着非常不舒服; 当时使用的淘宝基于nginx二次开发的Tengine,今天总结一下。
1、认识Tengine
1.1 介绍
- Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。它的目的是打造一个高效、安全的Web平台。
- Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。
- 它的最终目标是打造一个高效、稳定、安全、易用的Web平台。
- 从2011年12月开始,Tengine成为一个开源项目。
- 现在,它由Tengine团队开发和维护。Tengine团队的核心成员来自于淘宝、搜狗等互联网企业。
1.2 功能
- 继承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、java script文件的访问请求变成一个请求;
- 自动去除空白字符和注释从而减小页面的体积
- 自动根据CPU数目设置进程个数和绑定CPU亲缘性;
- 监控系统的负载和资源占用从而对系统进行保护;
- 显示对运维人员更友好的出错信息,便于定位出错机器;
- 更强大的防攻击(访问速度限制)模块;
- 更方便的命令行参数,如列出编译的模块列表、支持的指令等;
- 可以根据访问文件类型设置过期时间;
2、编译安装tengine
2.1 下载指定版本
官网:http://tengine.taobao.org/download.html
[root@along app]# wget http://tengine.taobao.org/download/tengine-2.2.3.tar.gz [root@along app]# tar -xvf tengine-2.2.3.tar.gz
2.2 创建用户,下载依赖的安装包
[root@along app]# groupadd nginx [root@along app]# useradd -s /sbin/nologin -g nginx -M nginx [root@along app]# yum -y install gc gcc gcc-c++ pcre-devel zlib-devel openssl-devel
2.3 编译安装
[root@along app]# cd tengine-2.2.3/ [root@along tengine]# ./configure --user=nginx --group=nginx --prefix=/app/tengine --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module [root@along tengine]# make && make install [root@along tengine]# chown -R nginx.nginx /app/tengine [root@along tengine]# ll /app/tengine total 8 drwxr-xr-x 2 nginx nginx 4096 Feb 20 14:55 conf drwxr-xr-x 2 nginx nginx 40 Feb 20 14:50 html drwxr-xr-x 2 nginx nginx 4096 Feb 20 14:50 include drwxr-xr-x 2 nginx nginx 6 Feb 20 14:50 logs drwxr-xr-x 2 nginx nginx 6 Feb 20 14:50 modules drwxr-xr-x 2 nginx nginx 35 Feb 20 14:50 sbin
注:
- #指定运行权限的用户 --user=nginx
- #指定运行的权限用户组 --group=nginx
- #指定安装路径 --prefix=/usr/local/nginx
- #支持nginx状态查询 --with-http_stub_status_module
- #开启ssl支持 --with-http_ssl_module
- #开启GZIP功能 --with-http_gzip_static_module
3、开启服务
3.1 配置开机启动脚本
[root@along nginx]# vim /usr/lib/systemd/system/nginx.service [Unit] Description=nginx - high performance web server Documentation=http://nginx.org/en/docs/ After=network.target remote-fs.target nss-lookup.target [Service] Type=forking PIDFile=/app/tengine/logs/nginx.pid ExecStartPre=/app/tengine/sbin/nginx -t -c /app/tengine/conf/nginx.conf ExecStart=/app/tengine/sbin/nginx -c /app/tengine/conf/nginx.conf ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s QUIT $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target
3.2 启动服务
[root@along ~]# systemctl start nginx [root@along ~]# ss -nutlp |