本發(fā)明涉及網(wǎng)絡(luò)安全領(lǐng)域,特別是涉及一種Nginx上游代理服務(wù)系統(tǒng)及實現(xiàn)方法。
背景技術(shù):
多核時代的網(wǎng)絡(luò)安全設(shè)備一般區(qū)分管理面和數(shù)據(jù)面,管理面是提供給網(wǎng)絡(luò)管理人員使用Telnet、Web、SSH、SNMP等方式來管理設(shè)備,數(shù)據(jù)面的基本任務(wù)是處理和轉(zhuǎn)發(fā)不同端口上各種類型的數(shù)據(jù),例如L2/L3/ACL/Qos/組播/安全防護(hù)等各功能的具體執(zhí)行過程,都屬于數(shù)據(jù)轉(zhuǎn)發(fā)平面的任務(wù)范疇。
Nginx("engine x")是一個高性能的HTTP和反向代理服務(wù)器,也是一個IMAP/POP3/SMTP代理服務(wù)器。Nginx在Linux上使用epoll異步非阻塞模型高效的處理了TCP請求,是數(shù)據(jù)面實現(xiàn)HTTP請求的代理轉(zhuǎn)發(fā)首選。
現(xiàn)有技術(shù)中一般通過數(shù)據(jù)面Nginx服務(wù)器,監(jiān)聽到某一個或幾個端口提供Web服務(wù),客戶端通過數(shù)據(jù)面快速協(xié)議棧處理連接到Nginx。Nginx通過AF_INET域套接字和上游服務(wù)器進(jìn)行反向代理,Nginx和上游服務(wù)器的上下游報文都需要經(jīng)過系統(tǒng)協(xié)議棧。Nginx通過AF_INET域套接字和上游服務(wù)器進(jìn)行反向代理,Nginx和上游服務(wù)器的上下游報文都需要經(jīng)過系統(tǒng)協(xié)議棧?;蛘?,Nginx通過AF_LOCAL/AF_UNIX域套接字和上游服務(wù)器進(jìn)行反向代理,Nginx和上游服務(wù)器的上下游報文不需要經(jīng)過系統(tǒng)協(xié)議棧,經(jīng)過IPC(Inter-Process Communication,進(jìn)程間通信)機(jī)制進(jìn)行報文傳遞。
因此,現(xiàn)有技術(shù)存在如下缺陷:
1、上下游報文系統(tǒng)協(xié)議棧處理,會對報文的轉(zhuǎn)發(fā)產(chǎn)生性能影響。
2、由于技術(shù)限制某些情形下,數(shù)據(jù)面Nginx不能和管理面基于AF_INET域套接字進(jìn)行通信。
3、上下游報文需要通過內(nèi)核拷貝傳遞,多次拷貝影響效率且處理依賴內(nèi)核調(diào)度,應(yīng)用過濾控制困難。
4、由于技術(shù)限制某些情形下,數(shù)據(jù)面Nginx不能和管理面基于AF_LOCAL/AF_UNIX域套接字進(jìn)行通信。
技術(shù)實現(xiàn)要素:
為了克服上述現(xiàn)有技術(shù)的缺陷,本發(fā)明要解決的技術(shù)問題是提供一種Nginx上游代理服務(wù)系統(tǒng)及實現(xiàn)方法。
為解決上述技術(shù)問題,本發(fā)明中提供一種Nginx上游代理服務(wù)系統(tǒng)實現(xiàn)方法,所述代理服務(wù)系統(tǒng)包括管理面代理服務(wù)模塊和數(shù)據(jù)面Nginx模塊,所述方法包括:
對所述管理面代理服務(wù)模塊和所述數(shù)據(jù)面Nginx模塊建立共享內(nèi)存;
將所述共享內(nèi)存作為TCP連接載荷數(shù)據(jù)的承載通道;所述TCP連接載荷數(shù)據(jù)包括用戶的HTTP請求數(shù)據(jù)和上游服務(wù)器的HTTP響應(yīng)數(shù)據(jù)。
為解決上述技術(shù)問題,本發(fā)明還提供一種Nginx上游代理服務(wù)系統(tǒng),包括設(shè)置模塊、管理面代理服務(wù)模塊和數(shù)據(jù)面Nginx模塊;
所述設(shè)置模塊,用于對所述管理面代理服務(wù)模塊和所述數(shù)據(jù)面Nginx模塊建立共享內(nèi)存;
將所述共享內(nèi)存作為TCP連接載荷數(shù)據(jù)的承載通道;所述TCP連接載荷數(shù)據(jù)包括用戶的HTTP請求數(shù)據(jù)和上游服務(wù)器的HTTP響應(yīng)數(shù)據(jù)。
本發(fā)明有益效果如下:
本發(fā)明中方法及系統(tǒng),通過使用共享內(nèi)存作為TCP連接載荷數(shù)據(jù)的承載通道,有效提高了代理系統(tǒng)的數(shù)據(jù)轉(zhuǎn)發(fā)效率。
附圖說明
圖1是本發(fā)明實施例中Nginx上游代理服務(wù)系統(tǒng)的布局示意圖;
圖2是本發(fā)明實施例中具有多核心處理器的代理服務(wù)系統(tǒng)的結(jié)構(gòu)示意圖。
具體實施方式
為了解決現(xiàn)有技術(shù)的問題,本發(fā)明提供了一種Nginx上游代理服務(wù)系統(tǒng)及實現(xiàn)方法,以下結(jié)合附圖以及實施例,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實施例僅用以解釋本發(fā)明,并不限定本發(fā)明。
如圖1所示,本發(fā)明實施例中一種Nginx上游代理服務(wù)系統(tǒng)實現(xiàn)方法,所述代理服務(wù)系統(tǒng)包括管理面代理服務(wù)模塊和數(shù)據(jù)面Nginx模塊,所述方法包括:
對所述管理面代理服務(wù)模塊和所述數(shù)據(jù)面Nginx模塊建立共享內(nèi)存;
將所述共享內(nèi)存作為TCP連接載荷數(shù)據(jù)的承載通道;所述TCP連接載荷數(shù)據(jù)包括用戶的HTTP請求數(shù)據(jù)和上游服務(wù)器的HTTP響應(yīng)數(shù)據(jù)。
具體說,數(shù)據(jù)面Nginx模塊:運行于一個或多個數(shù)據(jù)面處理核心,提供用戶連接管理,代理數(shù)據(jù)轉(zhuǎn)發(fā)。
共享內(nèi)存:數(shù)據(jù)面Nginx模塊和管理面Proxy程序的共享內(nèi)存,負(fù)責(zé)代理數(shù)據(jù)緩存??蛻舳艘粋€TCP連接對應(yīng)于共享內(nèi)存中一個存儲區(qū)域。
管理面代理服務(wù)模塊即管理面Proxy程序:管理面Apache的客戶端,每一個TCP連接都有一個對應(yīng)的Proxy和Apache連接,從共享內(nèi)存獲取數(shù)據(jù),發(fā)送給Apache;將Apache響應(yīng)數(shù)據(jù)通過共享內(nèi)存返回數(shù)據(jù)面Nginx。
管理面上游服務(wù)器:為用戶提供接入Web Portal。其中,圖中數(shù)據(jù)平面與數(shù)據(jù)面意義相同,管理平面與管理面意義相同。
進(jìn)一步說,所述將所述共享內(nèi)存作為TCP連接載荷數(shù)據(jù)的承載通道,包括:
所述數(shù)據(jù)面Nginx模塊接收到用戶Portal請求時,從所述共享內(nèi)存中申請一條承載通道,并標(biāo)記為新連接;
所述管理面代理服務(wù)模塊掃描所述共享內(nèi)存,發(fā)現(xiàn)所述新連接的標(biāo)記時,創(chuàng)建與上游服務(wù)器的本地連接。
具體說,所述所述數(shù)據(jù)面Nginx模塊接收到用戶Portal請求,包括:
所述所述數(shù)據(jù)面Nginx模塊在接收到用戶TCP請求時,與所述用戶建立TCP連接;
通過所述TCP連接,接收到所述用戶的首次HTTP請求時,解析所述首次HTTP請求為所述用戶Portal請求。
在上述實施例的基礎(chǔ)上,進(jìn)一步提出上述實施例的變型實施例,在此需要說明的是,為了使描述簡要,在各變型實施例中僅描述與上述實施例的不同之處。
在本發(fā)明的一個實施例中,所述管理面代理服務(wù)模塊掃描所述共享內(nèi)存,發(fā)現(xiàn)所述新連接的標(biāo)記時,創(chuàng)建與上游服務(wù)器的本地連接之后,還包括:
所述數(shù)據(jù)面Nginx模塊接收到用戶的HTTP請求數(shù)據(jù),將所述HTTP請求數(shù)據(jù)寫入所述承載通道,并標(biāo)記為第一新數(shù)據(jù)到達(dá);
所述管理面代理服務(wù)模塊輪詢所述本地連接,發(fā)現(xiàn)所述第一新數(shù)據(jù)到達(dá)的標(biāo)記時,從所述承載通道中讀取所述HTTP請求數(shù)據(jù),并發(fā)送給上游服務(wù)器,以及接收所述上游服務(wù)器的HTTP響應(yīng)數(shù)據(jù),將所述HTTP響應(yīng)數(shù)據(jù)寫入所述承載通道,并標(biāo)記第二新數(shù)據(jù)到達(dá);
所述數(shù)據(jù)面Nginx模塊輪詢所述本地連接,發(fā)現(xiàn)所述第二新數(shù)據(jù)到達(dá)的標(biāo)記時,從所述承載通道中讀取所述HTTP響應(yīng)數(shù)據(jù),并發(fā)送給用戶。
在本發(fā)明的另一個實施例中,所述管理面代理服務(wù)模塊掃描所述共享內(nèi)存,發(fā)現(xiàn)所述新連接的標(biāo)記時,創(chuàng)建與上游服務(wù)器的本地連接之后,還包括:
所述管理面代理服務(wù)模塊探測到所述上游服務(wù)器關(guān)閉本地連接時,在所述承載通道上設(shè)置第一關(guān)閉連接標(biāo)記;
所述數(shù)據(jù)面Nginx模塊輪詢到所述第一關(guān)閉連接標(biāo)記時,關(guān)閉與所述用戶的socket;
所述數(shù)據(jù)面Nginx模塊Nginx探測到所述用戶關(guān)閉TCP連接時,在承載通道上設(shè)置第二關(guān)閉連接標(biāo)記;
所述管理面代理服務(wù)模塊輪詢到所述第二關(guān)閉連接標(biāo)記時,關(guān)閉與上游服務(wù)器的本地連接。
在本發(fā)明的又一個實施例中,如圖2所示,所述代理服務(wù)器設(shè)置在具有多核心處理器的硬件平臺;
其中每個核心對應(yīng)一個數(shù)據(jù)面Nginx模塊。
詳細(xì)說,本發(fā)明中方法使用共享內(nèi)存作為數(shù)據(jù)TCP連接數(shù)據(jù)傳輸通道,其處理包括三個處理過程即連接建立過程、HTTP請求、響應(yīng)代理過程、連接關(guān)閉過程。
一、連接建立過程:
用戶發(fā)起TCP請求,和數(shù)據(jù)面Nginx服務(wù)器建立TCP連接;
用戶發(fā)送首次HTTP請求到數(shù)據(jù)面Nginx;
數(shù)據(jù)面Nginx解析HTTP請求,解析為用戶Portal請求,則從共享內(nèi)存申請一條連接資源,并標(biāo)記為“新連接”;
管理面Proxy程序掃描共享內(nèi)存,發(fā)現(xiàn)有“新連接”則創(chuàng)建一條和上游服務(wù)器的本連接,并將HTTP請求發(fā)送給上游服務(wù)器;
上游處理HTTP請求,并產(chǎn)生HTTP響應(yīng),發(fā)送給Proxy代理程序;
Proxy代理程序收到HTTP響應(yīng),寫入該連接存儲區(qū)域,并標(biāo)記為“新數(shù)據(jù)到達(dá)”;
數(shù)據(jù)面Nginx通過定時器輪詢連接,發(fā)現(xiàn)有“新數(shù)據(jù)到達(dá)”標(biāo)記,獲取數(shù)據(jù)并發(fā)送給客戶端;
二、HTTP請求、響應(yīng)代理過程:
用戶在已建立的TCP連接上發(fā)送HTTP請求,數(shù)據(jù)面Nginx解析HTTP請求,并進(jìn)行完整性校驗,校驗成功則寫入該連接存儲區(qū)域,并標(biāo)記為“新數(shù)據(jù)到達(dá)”,校驗失敗,返回HTTP錯誤響應(yīng);
Proxy代理程序定時輪詢連接,發(fā)現(xiàn)有“新數(shù)據(jù)到達(dá)”標(biāo)記,獲取數(shù)據(jù)并發(fā)送給上游服務(wù)器;
上游服務(wù)器處理HTTP請求,并產(chǎn)生HTTP響應(yīng),發(fā)送給Proxy代理程序;
Proxy代理程序收到HTTP響應(yīng),寫入該連接存儲區(qū)域,并標(biāo)記為“新數(shù)據(jù)到達(dá)”;
數(shù)據(jù)面Nginx通過定時器輪詢連接,發(fā)現(xiàn)有“新數(shù)據(jù)到達(dá)”標(biāo)記,獲取數(shù)據(jù)并發(fā)送給客戶端。
三、連接關(guān)閉過程:
上游服務(wù)器關(guān)閉本地連接,Proxy程序探測到,釋放和上游服務(wù)器的本地連接資源,在連接存儲區(qū)域上設(shè)置“關(guān)閉連接”標(biāo)記,Nginx輪詢到“關(guān)閉連接”則關(guān)閉與用戶的socket,并釋放共享內(nèi)存中的連接資源;
同樣,用戶關(guān)閉與Nginx的TCP連接,Nginx探測到,釋放和客戶端的連接資源,在連接存儲區(qū)域上上設(shè)置“關(guān)閉連接”標(biāo)記,Proxy程序輪詢到“關(guān)閉連接”標(biāo)記則關(guān)閉與上游服務(wù)器的本地連接同時釋放共享內(nèi)存中的連接資源。
本發(fā)明通過使用共享內(nèi)存作為TCP連接載荷數(shù)據(jù)的承載通道,有效提高了代理系統(tǒng)的數(shù)據(jù)轉(zhuǎn)發(fā)效率。
Proxy代理程序可以靈活的和不同上游服務(wù)器進(jìn)行對接,比如Apache、Nginx、Lighthttpd等。
在多核處理器上每個核心上面可以啟動一個數(shù)據(jù)面Nginx代理進(jìn)程,有效提高連接并發(fā)數(shù)量。Nginx代理進(jìn)程運行在數(shù)據(jù)面協(xié)議棧之上,報文處理過程可繼承快速協(xié)議棧的性能優(yōu)勢。
通過數(shù)據(jù)面和管理面務(wù)配合為用戶接入提供WEB服務(wù),即利用了管理面全功能復(fù)雜業(yè)務(wù)處理的優(yōu)勢,也兼顧了數(shù)據(jù)面處理效率。
本發(fā)明進(jìn)一步提出一種Nginx上游代理服務(wù)器。
本發(fā)明實施例中一種Nginx上游代理服務(wù)系統(tǒng),包括設(shè)置模塊、管理面代理服務(wù)模塊和數(shù)據(jù)面Nginx模塊;
所述設(shè)置模塊,用于對所述管理面代理服務(wù)模塊和所述數(shù)據(jù)面Nginx模塊建立共享內(nèi)存;
將所述共享內(nèi)存作為TCP連接載荷數(shù)據(jù)的承載通道;所述TCP連接載荷數(shù)據(jù)包括用戶的HTTP請求數(shù)據(jù)和上游服務(wù)器的HTTP響應(yīng)數(shù)據(jù)。
進(jìn)一步說,所述數(shù)據(jù)面Nginx模塊,用于接收到用戶Portal請求時,從所述共享內(nèi)存中申請一條承載通道,并標(biāo)記為新連接;
所述管理面代理服務(wù)模塊,用于掃描所述共享內(nèi)存,發(fā)現(xiàn)所述新連接的標(biāo)記時,創(chuàng)建與上游服務(wù)器的本地連接。
具體說,所述所述數(shù)據(jù)面Nginx模塊接收到用戶Portal請求,包括:
所述所述數(shù)據(jù)面Nginx模塊在接收到用戶TCP請求時,與所述用戶建立TCP連接;
通過所述TCP連接,接收到所述用戶的首次HTTP請求時,解析所述首次HTTP請求為所述用戶Portal請求。
進(jìn)一步說,所述數(shù)據(jù)面Nginx模塊,還用于接收到用戶的HTTP請求數(shù)據(jù),將所述HTTP請求數(shù)據(jù)寫入所述承載通道,并標(biāo)記為第一新數(shù)據(jù)到達(dá);以及用于輪詢所述本地連接,發(fā)現(xiàn)所述第二新數(shù)據(jù)到達(dá)的標(biāo)記時,從所述承載通道中讀取所述HTTP響應(yīng)數(shù)據(jù),并發(fā)送給用戶;
所述管理面代理服務(wù)模塊,還用于輪詢所述本地連接,發(fā)現(xiàn)所述第一新數(shù)據(jù)到達(dá)的標(biāo)記時,從所述承載通道中讀取所述HTTP請求數(shù)據(jù),并發(fā)送給上游服務(wù)器,以及接收所述上游服務(wù)器的HTTP響應(yīng)數(shù)據(jù),將所述HTTP響應(yīng)數(shù)據(jù)寫入所述承載通道,并標(biāo)記第二新數(shù)據(jù)到達(dá)。
進(jìn)一步說,所述管理面代理服務(wù)模塊,還用于探測到所述上游服務(wù)器關(guān)閉本地連接時,在所述承載通道上設(shè)置第一關(guān)閉連接標(biāo)記;以及輪詢到所述第二關(guān)閉連接標(biāo)記時,關(guān)閉與上游服務(wù)器的本地連接;
所述數(shù)據(jù)面Nginx模塊,還用于輪詢到所述第一關(guān)閉連接標(biāo)記時,關(guān)閉與所述用戶的socket;以及探測到所述用戶關(guān)閉TCP連接時,在承載通道上設(shè)置第二關(guān)閉連接標(biāo)記。
其中,所述述代理服務(wù)系統(tǒng)設(shè)置在具有多核心處理器的硬件平臺;每個核心對應(yīng)一個數(shù)據(jù)面Nginx模塊。
本發(fā)明通過使用共享內(nèi)存作為TCP連接載荷數(shù)據(jù)的承載通道,有效提高了代理系統(tǒng)的數(shù)據(jù)轉(zhuǎn)發(fā)效率。
Proxy代理程序可以靈活的和不同上游服務(wù)器進(jìn)行對接,比如Apache、Nginx、Lighthttpd等。
在多核處理器上每個核心上面可以啟動一個數(shù)據(jù)面Nginx代理進(jìn)程,有效提高連接并發(fā)數(shù)量。Nginx代理進(jìn)程運行在數(shù)據(jù)面協(xié)議棧之上,報文處理過程可繼承快速協(xié)議棧的性能優(yōu)勢。
通過數(shù)據(jù)面和管理面務(wù)配合為用戶接入提供WEB服務(wù),即利用了管理面全功能復(fù)雜業(yè)務(wù)處理的優(yōu)勢,也兼顧了數(shù)據(jù)面處理效率。
雖然本申請描述了本發(fā)明的特定示例,但本領(lǐng)域技術(shù)人員可以在不脫離本發(fā)明概念的基礎(chǔ)上設(shè)計出來本發(fā)明的變型。
本領(lǐng)域技術(shù)人員在本發(fā)明技術(shù)構(gòu)思的啟發(fā)下,在不脫離本發(fā)明內(nèi)容的基礎(chǔ)上,還可以對本發(fā)明做出各種改進(jìn),這仍落在本發(fā)明的保護(hù)范圍之內(nèi)。