Tengine是由淘寶網發起的Web服務器項目。基於Nginx針對大訪問量網站的需求,添加了很多高級功能和特性,目前已開源。Tengine完全兼容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”就可看到:
下面我用echo模塊和realtime_request模塊作演示。如果你還不了解這兩個模塊怎么用,可以先“yum info tengine-echo tengine-realtime_request”一把:
在YUM提供的包信息里有模塊的基本信息,簡單的說明、網址等。
倉庫里的Tengine 使用jemalloc做了內存分配的加速,所以會自動安裝jemalloc。默認支持LUA,而且使用了luajit加速,安裝過程也會自動安裝luajit:
我們可以看到默認已經集成了哪些模塊“tengine -m。其中Static表示靜態編譯模塊,直接打在Tengine的二進制里。Shared則是動態模塊,可以動態加載或卸載。
Tengine的主配置文件為(/etc/tengine/tengine.conf):
其中的 dso {} 就是用於控制動態模塊的,和PHP模塊類似。我們先看一下(/etc/tengine/conf.d/tengine-standard-dso.ini):
這里就是我們已經打包的標准模塊,默認隨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”:
此時再查看Tengine的模塊及支持的指令“tengine -l”:
然后我們先驗證一下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訪問的統計信息:
然后再來驗證一下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打印的信息了:
是不是非常靈活、好用呢?