Openresty和Tengine基于 Nginx 的兩個(gè)衍生版本,某種意義上他們都和淘寶有關(guān)系,前者是前淘寶工程師agentzh主導(dǎo)開(kāi)發(fā)的,后者是淘寶的一個(gè)開(kāi)源項(xiàng)目;
Openresty的最大特點(diǎn)是引入了ngx_lua模塊,支持使用lua開(kāi)發(fā)插件;
Tengine的特點(diǎn)是融入了因淘寶自身的一些業(yè)務(wù)帶來(lái)的新功能;
Tengine 簡(jiǎn)介
tengine官方網(wǎng)站:http://tengine.taobao.org/index_cn.html
在 Nginx官方版本的基礎(chǔ)上增加的一些定制模塊如下:
1、支持動(dòng)態(tài)加載模塊:通過(guò)加載so文件實(shí)現(xiàn),不用再重新編譯整個(gè)項(xiàng)目了。
、ngx_proc_daytime_module模塊,這個(gè)模塊允許開(kāi)一個(gè)獨(dú)立的服務(wù)進(jìn)程,該模塊本身并未實(shí)現(xiàn)具體的業(yè)務(wù)邏輯,而是構(gòu)建了一個(gè)TCP Server框架,等待開(kāi)發(fā)者來(lái)實(shí)現(xiàn)自己的業(yè)務(wù);
3、ngx_http_concat_module模塊,用于合并多個(gè)文件的響應(yīng);
4、ngx_http_upstream_session_sticky_module模塊,該模塊是一個(gè)負(fù)載均衡模塊,通過(guò)cookie實(shí)現(xiàn)客戶(hù)端與后端服務(wù)器的會(huì)話(huà)保持, 在一定條件下可以保證同一個(gè)客戶(hù)端訪(fǎng)問(wèn)的都是同一個(gè)后端服務(wù)器。
5、ngx_http_upstream_check_module模塊,用于檢查upstream上游服務(wù)器的健康狀況。
6、trim filter模塊,用于刪除 html,內(nèi)嵌 javascript 和 css 中的注釋以及重復(fù)的空白符。
7、ngx_http_headers_module模塊,支持根據(jù)Content-Type來(lái)設(shè)置過(guò)期時(shí)間。
8、ngx_http_limit_req_module模塊,限制訪(fǎng)問(wèn)。
9、擴(kuò)展了ngx_http_log_module模塊,支持syslog和pipe;
Openresty 簡(jiǎn)介
openresty官方網(wǎng)站:http://openresty.org/cn/index.html
agentzh自己對(duì)openresty的介紹:http://blog.zoomquiet.org/pyblosxom/oss/openresty-intro-2012-03-06-01-13.html
agentzh(章亦春)的openresty開(kāi)源項(xiàng)目(基于nginx),通過(guò)各種插件、模塊,極大的擴(kuò)展了nginx能干的事情,而lua擴(kuò)展更是可以用來(lái)定制非常復(fù)雜的業(yè)務(wù)邏輯。作者給nginx賦予的這些新的特性,使openresty在業(yè)務(wù)開(kāi)發(fā)上變得更加簡(jiǎn)單,對(duì)程序員更加友好,開(kāi)發(fā)者可以在不需要對(duì)nginx源碼熟悉的情況下就直接使用一些高級(jí)特性,比如并發(fā)subrequest、dns異步解析、對(duì)第三方數(shù)據(jù)庫(kù)(如mysql、redis、memcached)等的訪(fǎng)問(wèn)。
先簡(jiǎn)單看一下openresty擴(kuò)展的模塊:
- ArrayVarNginxModule 支持?jǐn)?shù)組變量
- AuthRequestNginxModule 鑒權(quán)模塊
- CoolkitNginxModule 一些插件
- NginxDevelKit 封裝了一些面對(duì)開(kāi)發(fā)者的C接口
- EchoNginxModule 一堆類(lèi)似于shell命令的指令,支持(串行/并行)子請(qǐng)求等,這個(gè)模塊很酷,也很實(shí)用
- EncryptedSessionNginxModule 會(huì)話(huà)加密
- FormInputNginxModule 解析POST請(qǐng)求中的參數(shù)
- HeadersMoreNginxModule http頭處理
- IconvNginxModule 設(shè)置響應(yīng)編碼集
- MemcNginxModule 支持對(duì)Memcached的訪(fǎng)問(wèn)
- DrizzleNginxModule 支持對(duì)mysql的訪(fǎng)問(wèn)
- PostgresNginxModule 支持對(duì)Postgres數(shù)據(jù)庫(kù)的訪(fǎng)問(wèn)
- RdsCsvNginxModule filter模塊,將Drizzle和Postgres兩個(gè)模塊的響應(yīng)格式化為csv輸出
- RdsJsonNginxModule filter模塊,將Drizzle和Postgres兩個(gè)模塊的響應(yīng)格式化為json輸出
- RedisNginxModule 支持對(duì)redis的訪(fǎng)問(wèn)(只支持select和get命令)
- Redis2NginxModule 支持對(duì)redis的訪(fǎng)問(wèn)(支持所有redis命令)
- SetMiscNginxModule 一堆set命令,用于設(shè)置變量
- SrcacheNginxModule 通過(guò)子請(qǐng)求進(jìn)行cache
- XssNginxModule 防跨站攻擊
- LuaJIT luaJIT解釋器
- StandardLuaInterpreter 標(biāo)準(zhǔn)lua解釋器
- LuaCjsonLibrary json庫(kù)
- LuaNginxModule lua接口庫(kù) (該模塊本身用C實(shí)現(xiàn))
- LuaRdsParserLibrary rds格式解析
- LuaRedisParserLibrary redis響應(yīng)解析庫(kù)
- LuaRestyCoreLibrary LuaNginxModule模塊的lua實(shí)現(xiàn)
- LuaRestyDNSLibrary dns解析庫(kù)
- LuaRestyLockLibrary
- LuaRestyLrucacheLibrary LRU cache庫(kù)
- LuaRestyMemcachedLibrary memcached訪(fǎng)問(wèn)接口
- LuaRestyMySQLLibrary mysql訪(fǎng)問(wèn)接口
- LuaRestyRedisLibrary redis訪(fǎng)問(wèn)接口
- LuaRestyStringLibrary 一些hash函數(shù)的接口
- LuaRestyUploadLibrary
- LuaRestyUpstreamHealthcheckLibrary
- LuaRestyWebSocketLibrary ws協(xié)議解析庫(kù)
- LuaUpstreamNginxModule 擴(kuò)展了對(duì)upstream的支持
瀏覽一下上述模塊,有幾個(gè)特點(diǎn):
1、通過(guò)upstream機(jī)制已經(jīng)可以支持對(duì)mysql、redis、postgreSQL、memcached 等數(shù)據(jù)庫(kù)的訪(fǎng)問(wèn)(全都是異步無(wú)阻塞的);
2、跟lua擴(kuò)展有關(guān)的模塊,提供給lua腳本調(diào)用的庫(kù),api非常豐富,涉及各種的操作;


