日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
淺談OpenResty在Web應(yīng)用防火墻中的應(yīng)用

1、OpenResty起源

OpenResty是一個(gè)基于Nginx與Lua的高性能Web平臺(tái),其內(nèi)部集成了大量精良的Lua庫(kù)、第三方模塊以及大多數(shù)的依賴項(xiàng)。用于方便地搭建能夠處理超高并發(fā)、擴(kuò)展性極高的動(dòng)態(tài)Web應(yīng)用、Web服務(wù)和動(dòng)態(tài)網(wǎng)關(guān)。Nginx由俄羅斯工程師Igor Sysoev于2002年基于C語(yǔ)言開始開發(fā),并于2004年開源,目的是解決Apache HTTP服務(wù)器不能滿足C10K(單個(gè)HTTP服務(wù)器處理10000并發(fā)連接)的問題。隨著Web的快速發(fā)展普及,Nginx因?yàn)槠溟_源、跨平臺(tái)、可支持百萬(wàn)級(jí)別的TCP并發(fā)連接、高穩(wěn)定性等優(yōu)點(diǎn)迅速傳播開來,當(dāng)前全球有近三分之一的HTTP服務(wù)器使用的是Nginx。

創(chuàng)新互聯(lián)建站基于成都重慶香港及美國(guó)等地區(qū)分布式IDC機(jī)房數(shù)據(jù)中心構(gòu)建的電信大帶寬,聯(lián)通大帶寬,移動(dòng)大帶寬,多線BGP大帶寬租用,是為眾多客戶提供專業(yè)服務(wù)器托管報(bào)價(jià),主機(jī)托管價(jià)格性價(jià)比高,為金融證券行業(yè)四川服務(wù)器托管,ai人工智能服務(wù)器托管提供bgp線路100M獨(dú)享,G口帶寬及機(jī)柜租用的專業(yè)成都idc公司。

Nginx生態(tài)的豐富性歸功于由于它高內(nèi)聚、低耦合的模塊化設(shè)計(jì)。Nginx提供的主要模塊包括Core模塊、Event模塊、Http模塊、Mail模塊、Stream模塊等。開發(fā)者根據(jù)Nginx模塊開發(fā)規(guī)范很容易能擴(kuò)展Nginx的功能。

Nginx存在局限性:對(duì)于一般的業(yè)務(wù)系統(tǒng)使用Nginx,業(yè)務(wù)變動(dòng)僅需要改動(dòng)Nginx相關(guān)配置文件重啟即可,但如果需要開發(fā)或者更新第三方模塊則需要重新編譯安裝Nginx,這個(gè)對(duì)于線上系統(tǒng)是不太友好的,重新編譯安裝Nginx是個(gè)操作程度較麻煩和變更風(fēng)險(xiǎn)性較高的過程。由此Nginx對(duì)腳本語(yǔ)言的支持是有必要的,Perl、Python、Js、Lua都有C的API,這幾年從開發(fā)者的應(yīng)用來看,Lua這種天然就是C的腳本語(yǔ)言使用最廣泛。Lua腳本可以很容易的被C/C++ 代碼調(diào)用,也可以反過來調(diào)用C/C++的函數(shù),一個(gè)完整的Lua解釋器不過200k,在所有腳本引擎中,Lua的速度是最快的。

OpenResty應(yīng)運(yùn)而生:基于Nginx,OpenResty通過LuaJIT擴(kuò)展支持,讓開發(fā)者可以使用Lua腳本語(yǔ)言調(diào)動(dòng)Nginx支持的各種C以及Lua模塊,大大提高了Nginx模塊開發(fā)的生產(chǎn)力。

2、OpenResty工作原理

OpenResty本質(zhì)是基于Nginx的單Master多Worker進(jìn)程模型,將LuaVM嵌入到進(jìn)程中,通過LuaVM來執(zhí)行Lua代碼獲得高性能,同時(shí)LuaVM的自動(dòng)內(nèi)存管理也提高了開發(fā)者的開發(fā)效率。OpenResty的兩大技術(shù)特點(diǎn):(1)多階段處理;(2)Lua協(xié)程與Nginx event的高效NIO結(jié)合。下面分別介紹。

2.1 OpenResty的多階段處理

OpenResty的多階段處理基于Nginx的HTTP多階段處理。如前介紹,Nginx對(duì)Http的處理也是一個(gè)個(gè)HTTP模塊協(xié)作完成的,對(duì)于HTTP模塊,數(shù)據(jù)的流轉(zhuǎn),銜接等管理,Nginx將它劃分成11個(gè)處理階段,每個(gè)處理階段由多個(gè)HTTP模塊進(jìn)行流水線處理:

typedef enum {
NGX_HTTP_POST_READ_PHASE = 0, //讀取請(qǐng)求體階段
NGX_HTTP_SERVER_REWRITE_PHASE, //server URI重寫階段
NGX_HTTP_FIND_CONFIG_PHASE, //location查找階段
NGX_HTTP_REWRITE_PHASE, //location URI重寫階段
NGX_HTTP_POST_REWRITE_PHASE, //檢查是否發(fā)生了URI重寫
NGX_HTTP_PREACCESS_PHASE, //訪問限制階段
NGX_HTTP_ACCESS_PHASE, //訪問權(quán)限控制階段
NGX_HTTP_POST_ACCESS_PHASE, //檢查請(qǐng)求權(quán)限處理階段
NGX_HTTP_TRY_FILES_PHASE, //try_file配置處理靜態(tài)文件階段
NGX_HTTP_CONTENT_PHASE, //返回內(nèi)容生成階段
NGX_HTTP_LOG_PHASE //日志記錄階段
} ngx_http_phases;

OpenResty將這11個(gè)階段簡(jiǎn)化成Rewrite/Access Phase、Content Phase、 LogPhase,加上進(jìn)程啟動(dòng)初始化的Initialization Phase共四個(gè)大階段11個(gè)*_by_lua可重寫指令。

每個(gè)階段分工清晰,各個(gè)階段處理http請(qǐng)求不同階段的數(shù)據(jù),分層更易于理解和開發(fā)。

2.2 Lua協(xié)程與Nginx Event的NIO結(jié)合

對(duì)于Http請(qǐng)求的處理,性能消耗主要在網(wǎng)絡(luò)IO處理,Nginx相對(duì)于Apache Server多線程模型處理效率高的原因就是在于Nginx的Event處理機(jī)制。具體到Linux,Event處理機(jī)制基于Epoll實(shí)現(xiàn),所有讀寫事件不會(huì)阻塞主線程,而是注冊(cè)到epoll,主線程通過調(diào)用epoll_wait來獲取可讀寫事件,對(duì)準(zhǔn)備好的事件進(jìn)行相應(yīng)的回調(diào)處理,實(shí)現(xiàn)非阻塞IO?;氐絆penResty,每個(gè)Worker進(jìn)程有一個(gè)LuaVM,OpenResty通過LuaVM來執(zhí)行Lua代碼,每個(gè)外部請(qǐng)求都通過一個(gè)Lua協(xié)程來處理,每個(gè)協(xié)程互不影響,每當(dāng)Lua代碼需要處理IO時(shí),都會(huì)yield當(dāng)前協(xié)程,將IO事件交給Nginx的Event處理,這樣就不會(huì)阻塞Worker主線程,待Nginx的Event處理完畢,Resume協(xié)程繼續(xù)處理。協(xié)程僅在用戶態(tài)處理相對(duì)于多線程切換的開銷少。通過協(xié)程結(jié)合和Nginx的非阻塞I/O模型,不僅僅對(duì)HTTP客戶端請(qǐng)求,甚至于對(duì)遠(yuǎn)程后端諸如MySQL、PostgreSQL、Memcached以及Redis等都進(jìn)行一致的高性能響應(yīng)。

3、OpenResty在網(wǎng)站安全建設(shè)中的應(yīng)用

中國(guó)移動(dòng)貫眾安全云WAF是一款網(wǎng)站應(yīng)用防火墻產(chǎn)品,通過對(duì)Http/Https流量的分析檢測(cè),攔截惡意流量,為Web業(yè)務(wù)安全運(yùn)營(yíng)提供保障。截至目前,中國(guó)移動(dòng)貫眾安全云WAF已為超2000家站點(diǎn)提供網(wǎng)站安全防護(hù)服務(wù)。團(tuán)隊(duì)在研發(fā)之初做技術(shù)選型時(shí)就采用了OpenResty,主要考慮它的一下優(yōu)點(diǎn)

  • 降低開發(fā)門檻,Lua庫(kù)極其豐富,研發(fā)效率高,能適應(yīng)功能快速迭代的需求;
  • 很容易支持熱更新,研發(fā)、測(cè)試、發(fā)布效率高,對(duì)業(yè)務(wù)無(wú)感知;
  • 云原生支持,裸機(jī),容器等都可以部署維護(hù);
  • 高性能,基于Nginx的高性能Http應(yīng)用,對(duì)MySQL、Redis等也支持非阻塞IO。

貫眾安全云WAF部署架構(gòu)圖大致如下:

由于WAF節(jié)點(diǎn)是串接在系統(tǒng)內(nèi)的,這對(duì)WAF節(jié)點(diǎn)的性能和穩(wěn)定性有較高要求,如圖所示,我們通過DPVS+KeepAlived做四層負(fù)載均衡保障包的高速轉(zhuǎn)發(fā)和可靠性,后面直接通過OpenResty集群進(jìn)行流量的分析。經(jīng)過WAF的流量都經(jīng)過了十幾個(gè)步驟的檢測(cè),各個(gè)步驟相互獨(dú)立,互不影響,非阻塞的IO保障了檢測(cè)的性能。主要使用到的階段如下:

如上表所示,每個(gè)階段互相配合,分工明確,配置和云WAF配置中心實(shí)時(shí)同步,能熱更新業(yè)務(wù)配置、防護(hù)配置、規(guī)則庫(kù)等,運(yùn)維成本低。防護(hù)階段對(duì)性能要求高的檢測(cè)手段會(huì)用C寫成動(dòng)態(tài)庫(kù),Lua的ffi能很方便調(diào)用,和需要存儲(chǔ)、統(tǒng)計(jì)運(yùn)算的均采用cosocket和數(shù)據(jù)庫(kù)交互,非阻塞的特性保障和數(shù)據(jù)庫(kù)交互的高性能。

4、總結(jié)

OpenResty是一個(gè)基于Nginx和Lua的優(yōu)秀開源組件,保留了Nginx的高性能的同時(shí),引入Lua,降低了開發(fā)門檻,研發(fā)效率高,運(yùn)維成本低。對(duì)于有大量Web平臺(tái)需要治理的企業(yè)比較試用。可以基于OpenResty二次開發(fā)動(dòng)態(tài)路由、限流、緩存、權(quán)限控制、安全防護(hù)等能力,替代Nginx管理企業(yè)內(nèi)部站點(diǎn)。

參考文獻(xiàn)

[1]OpenResty.http://openresty.org/cn/.

[2]陶輝. 深入理解nginx:模塊開發(fā)與架構(gòu)解析[M]. 機(jī)械工業(yè)出版社. 2013-4.

[3]Lua Nginx Module. https://github.com/openresty/lua-nginx-module.


分享名稱:淺談OpenResty在Web應(yīng)用防火墻中的應(yīng)用
文章URL:http://www.dlmjj.cn/article/dhgdhhj.html