Nginx切换到Tengine,并安装http_concat_module

电脑知识 6736 Views 2 Comments

Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。

Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。

从2011年12月开始,Tengine成为一个开源项目。现在,它由Tengine团队开发和维护。Tengine团队的核心成员来自于淘宝、搜狗等互联网企业。

上面这段话是Tengine官方项目组给出的简介,无意间看见Tengine这个web引擎,然后闲着没事做,就把Nginx切换到Tengine了。

我用的是CentOS 7.0 64位镜像,环境用的是阿里Linux一键安装包,所以我的nginx路径是在/alidata/server/nginx/

#停止nginx服务
sudo systemctl stop nginx.service

#把原本的nginx重命名下 作为备份
cd /alidata/server/
mv nginx nginx.old

1.jpg

开始下载安装,官方下载地址:http://tengine.taobao.org/download_cn.html

#下载tengine
wget http://tengine.taobao.org/download/tengine-2.1.0.tar.gz

#解压
tar zxvf tengine-2.1.0.tar.gz

#进入 tengine-2.1.0
cd tengine-2.1.0

#开始安装
./configure --prefix=/alidata/server/nginx

#Tengine默认将安装在/usr/local/nginx目录,可以用'--prefix'来指定你想要的安装目录

make

make install

2.jpg

安装完成后,复制原来的nginx配置文件到Tengine,启动web服务

cd /alidata/server/

#复制nginx主配置文件
cp nginx.old/conf/nginx.conf nginx/conf/

#复制vhosts虚拟主机配置文件目录
cp -Rp nginx.old/conf/vhosts nginx/conf/

#复制rewrite伪静态配置文件目录
cp -Rp nginx.old/conf/rewrite nginx/conf/

然后检测下配置文件正确性,没问题的话就可以启动Tengine。

官方说Tengine完全100%兼容nginx的配置,而且路径一样,所以可以用原nginx的启动控制脚本来启动和停止Tengine。

启动完后可以看下是否安装成功

10.jpg

这里已经显示Tengine/2.1.0表示已经安装成功了

QQ截图20150608140253.jpg

随便访问一个不存在的页面,提示信息中也是显示Powered by Tengine/2.1.0

编译启用动态加载模块: http_concat_module

Tengine动态加载模块的编译安装方法,参考官方文档:http://tengine.taobao.org/document_cn/dso_cn.html

Tengine所有的HTTP功能模块,都可以在configure的时候,通过 --with-http_xxxx_module=shared 的形式编译为动态加载模块,如果不指定=shared 则会被静态编译到Tengine的核心中,安装动态加载模块用 make dso_install命令。

http_concat_module模块官方文档:http://tengine.taobao.org/document_cn/http_concat_cn.html

http_concat_module这个模块类似于apache中的mod_concat模块,用于合并多个文件在一个响应报文中

请求参数需要用两个问号('??')例如:http://g.alicdn.com/??kissy/k/1.4.4/seed-min.js,mui/seed/1.4.5/seed.js,mui/globalmodule/3.0.7/seed.js,mui/btscfg-g/3.0.0/index.js,mui/bucket/3.0.4/index.js,mui/globalmodule/3.0.7/global-mod-pc.js,mui/globalmodule/3.0.7/global-mod.js,mui/global/1.3.5/global-pc.js,mui/global/1.3.5/global.js,tm/fp/3.1.0/seed.js,tm/fp/3.1.0/init.js 这是天猫中的一个请求响应,一次请求11个文件

开始安装http_concat_module

cd ~/tengine-2.1.0

#编译http_concat模块为动态加载
./configure --prefix=/alidata/server/nginx --with-http_concat_module=shared

#编译		
make

#安装动态模块
make dso_install

编译安装完成后,ngx_http_concat_module.so文件会被安装到Tenginx安装目录下的modules目录内

编辑nginx.conf配置文件,添加如下代码,让Tengine启动时动态加载刚刚编译的ngx_http_concat_module.so

dso {
   load ngx_http_concat_module.so;    #加载动态加载模块
    }

6.jpg

接着重启Tengine

然后修改网站的nginx配置文件,使Tengine针对这个目录启用concat函数,在原有网站配置文件的server段中添加以下内容:

# /content/ 改成你自己的文件目录
location /content/ {
	concat on;    #启用concat函数
	concat_unique off; #允许返回不同类型的文件内容(js,css同时合并)
	concat_delimiter "\n";  #自动在返回每个文件内容的末尾添加换行符
	concat_ignore_file_error off;#不要忽略所合并的文件不存在等错误
}

11.jpg

然后重启Tengine

好了,来看一下效果,请求多个css文件:
https://www.hackhp.com/content/static/css/??css-1.css,css-2.css,css-3.css

可以加载多个css了,是不是也能直接加载多个js了?

一开始我也是这样想的,但是怎么测试都不行,会返回400错误。后来发现新版nginx中mime.types的js类型是application/javascript,但是ngx_http_concat的类型是application/x-javascript。

所以还得修改下,修改方法1.

修改ngx_http_concat_module.c源文件,添加一个类型ngx_string("application/javascript"),

5.jpg

然后重新编译nginx

修改方法2.

编辑nginx/conf/mime.types

application/javascript js; 修改为 application/x-javascript js;​

111.jpg

请求多个js文件:
http://hackhp.com/content/static/js/??js-1.js,js-2.js,js-3.js

好了,正常情况下是没有什么问题了,反正有问题我也不懂 0.0

标签: Linux, Centos, Nginx,

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
loading