一聚教程网:一个值得你收藏的教程网站

热门教程

【图文】详解淘宝web服务器Tengine动态模块加载的使用方法

时间:2022-06-30 18:38:28 编辑:袖梨 来源:一聚教程网

本文我们来用图文并茂的方式讲解淘宝开源的web服务器(于Nginx)Tengine动态模块加载使用方法,作为淘宝网发起的web服务器项目,Tengine完全兼容Nginx,轻松无缝切换。

Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。目前已开源。它由Tengine团队开发和维护。Tengine团队的核心成员来自于淘宝、搜狗等互联网企业。Tengine继承Nginx的所有特性,100%兼容Nginx的配置。本文主要介绍它的“动态模块加载(DSO)”的基本使用方法。

什么是“动态模块加载”呢?打个简单的比:

默认Nginx没有echo功能,传统情况下,我们会下载echo模块,然后重新编译Nginx后再使用新编译的Nginx。如果需要用的模块很多,那么有两个情况:要么有很多Nginx的版本,不同版本带有不同功能,还有各种模块的排列组合;要么就有一种万能的Nginx,什么模块都有(好比 OpenResty)。

有没一种方法,即灵活又无需那么臃肿呢?答案就是“动态模块加载”了(类似Windows的动态链接库,DLL文件。在Linux下后缀一般是SO)。

如果你只安装了Tengine,那么你只能用它的基础功能。如果你需要echo模块,你只需要继续安装Tengine-echo,稍作配置就能使用echo模块。无需重新编译Tengine,而且各种模块随心组合。

Tengine默认编译安装就支持DSO功能,除非指定了配置“--without-dso”选项。目前我们的软件仓库里已经集成了一些常用的Tengine模块。使用“yum search tengine”就可看到:

【图文】详解淘宝web服务器Tengine动态模块加载的使用方法

 

下面我用echo模块和realtime_request模块作演示。如果你还不了解这两个模块怎么用,可以先“yum info tengine-echo tengine-realtime_request”一把:

【图文】详解淘宝web服务器Tengine动态模块加载的使用方法

 

在YUM提供的包信息里有模块的基本信息,简单的说明、网址等。

仓库里的Tengine 使用jemalloc做了内存分配的加速,所以会自动安装jemalloc。默认支持LUA,而且使用了luajit加速,安装过程也会自动安装luajit:

【图文】详解淘宝web服务器Tengine动态模块加载的使用方法

 

我们可以看到默认已经集成了哪些模块“tengine -m。其中Static表示静态编译模块,直接打在Tengine的二进制里。Shared则是动态模块,可以动态加载或卸载。

Tengine的主配置文件为(/etc/tengine/tengine.conf):

【图文】详解淘宝web服务器Tengine动态模块加载的使用方法

 

其中的 dso {} 就是用于控制动态模块的,和PHP模块类似。我们先看一下(/etc/tengine/conf.d/tengine-standard-dso.ini):

【图文】详解淘宝web服务器Tengine动态模块加载的使用方法

 

这里就是我们已经打包的标准模块,默认随Tengine一起安装并启用。我们可以按需使用或卸载。

安装第三方模块,直接“sudo yum -y install tengine-echo tengine-realtime_request”即可,安装完成后会生成“/usr/lib64/tengine/modules /ngx_http_echo_module.so”和 “/usr/lib64/tengine/modules/ngx_http_realtime_request_module.so”动态库文件。为了方便管理,我们将第三方库放里,对应配置文件“/etc/tengine/conf.d/tengine-3rdparty-dso.ini”:

【图文】详解淘宝web服务器Tengine动态模块加载的使用方法

 

此时再查看Tengine的模块及支持的指令“tengine -l”:

【图文】详解淘宝web服务器Tengine动态模块加载的使用方法

 

然后我们先验证一下realtime_request模块的正确性,添加配置文件(/etc/tengine/vhost.d/realtime_request-demo.conf):

 代码如下 复制代码
realtime_zonesize  16m;
server {
    listen       9081 backlog=8192;
    server_name  realtime.request.demo;
    charset utf-8;
 
    location / {
        realtime_request on;
        access_log off;
        log_not_found off;
    }
}

访问对应页面即可看到各个vhost访问的统计信息:

【图文】详解淘宝web服务器Tengine动态模块加载的使用方法

 

然后再来验证一下echo模块的正确性,配置文件(/etc/tengine/vhost.d/echo.tengine.conf):

 代码如下 复制代码
server {
    listen       9082 default_server;
    server_name  echo.tengine.org;
    charset utf-8;
 
    location / {
        echo "hello, world!";
        access_log off;
        log_not_found off;
    }
}

打开对应页面即可看到echo打印的信息了:

【图文】详解淘宝web服务器Tengine动态模块加载的使用方法

 

是不是非常灵活、好用呢?

淘宝果然在国内IT界走在前沿,Tengine在淘宝的团队开发和维护下,已经越来越强大了。

热门栏目