自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

淺談OpenResty在Web應(yīng)用防火墻中的應(yīng)用

開發(fā) 前端
隨著互聯(lián)網(wǎng)的興起,Web應(yīng)用也越來越多。企業(yè)Web應(yīng)用功能豐富性的增加必然帶來對應(yīng)用統(tǒng)一管理的需求,如路由、權(quán)限管控、安全、日志監(jiān)控分析等,這些管理需求由業(yè)務(wù)網(wǎng)關(guān)(API網(wǎng)關(guān))來實現(xiàn)。作為企業(yè)Web應(yīng)用的入口,這就要求網(wǎng)關(guān)具備高性能、高可靠性、開發(fā)和維護成本低等特性。

1、OpenResty起源

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

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

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

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

2、OpenResty工作原理

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

2.1 OpenResty的多階段處理

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

typedef enum {
NGX_HTTP_POST_READ_PHASE = 0, //讀取請求體階段
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, //檢查請求權(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個階段簡化成Rewrite/Access Phase、Content Phase、 LogPhase,加上進程啟動初始化的Initialization Phase共四個大階段11個*_by_lua可重寫指令。

圖片

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

圖片

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

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

圖片

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

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

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

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

圖片

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

圖片


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

4、總結(jié)

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

參考文獻

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

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

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

責任編輯:龐桂玉 來源: 移動Labs
相關(guān)推薦

2011-03-25 11:18:51

2010-10-25 12:07:51

2011-03-25 11:06:46

2011-05-10 09:17:01

2011-02-17 18:30:25

2011-02-15 18:38:49

2010-07-07 20:06:53

2010-07-12 11:33:52

2021-06-25 18:35:30

Web應(yīng)用防火墻

2010-08-30 10:18:24

2011-03-15 10:32:05

2010-12-21 18:04:26

2010-05-24 17:49:56

2010-07-12 11:41:55

2010-09-14 09:04:10

2009-04-28 09:12:35

Web應(yīng)用防火墻梭子魚

2009-04-29 14:51:18

2010-08-30 12:52:46

2011-12-05 11:20:42

2010-08-30 11:28:13

點贊
收藏

51CTO技術(shù)棧公眾號