大家好,這是一個(gè)關(guān)于Nginx的系列,將從零開始學(xué)習(xí)Nginx,希望能為你帶來幫助。
Nginx (engine x) 是一個(gè)高性能的HTTP和反向代理web服務(wù)器,同時(shí)也提供了IMAP/POP3/SMTP服務(wù)。Nginx是由伊戈?duì)枴べ愃饕驗(yàn)槎砹_斯訪問量第二的Rambler.ru站點(diǎn)(俄文:Рамблер)開發(fā)的,第一個(gè)公開版本0.1.0發(fā)布于2004年10月4日。
一個(gè)網(wǎng)絡(luò)請求從紅色的箭頭走下來,會先經(jīng)過Nginx再到應(yīng)用服務(wù)(比如:Tomcat、Django),然后再訪問Redis或者M(jìn)ySQL這樣的數(shù)據(jù)庫提供基本的數(shù)據(jù)功能。
反向代理服務(wù)
由于應(yīng)用服務(wù)要求開發(fā)效率高,所以運(yùn)行效率相對較低,QPS、TPS或并發(fā)都是受限的。所以我們把很多這樣的應(yīng)用服務(wù)組成集群向用戶提供高可用性。而一旦很多應(yīng)用構(gòu)成集群的時(shí)候,就需要Nginx具有反向代理功能,可以把動態(tài)請求傳導(dǎo)給應(yīng)用服務(wù)。很多應(yīng)用服務(wù)構(gòu)成集群一定會帶來兩個(gè)需求:第一是需要?jiǎng)討B(tài)擴(kuò)容,其次有些服務(wù)出問題需要容災(zāi)。這樣反向代理必須具備負(fù)載均衡功能,其次在這樣的鏈路中Nginx處在企業(yè)內(nèi)網(wǎng)的邊緣節(jié)點(diǎn),隨著網(wǎng)絡(luò)鏈路的增長用戶體驗(yàn)到的時(shí)延會增加,所以我們?nèi)绻馨岩恍┧杏脩艨雌饋聿蛔兊幕蛘咴谝欢螘r(shí)間內(nèi)看起來不變的動態(tài)內(nèi)容緩存在Nginx部分,由Nginx直接向用戶提供訪問那么這樣的時(shí)延就會減少很多。所以反向代理會衍生出緩存功能,加速訪問。
靜態(tài)資源服務(wù)
很多時(shí)候像訪問CSS、JS或圖片等靜態(tài)資源是沒有必要由應(yīng)用服務(wù)提供訪問的。只要通過本地文件系統(tǒng)上放置資源,直接由Nginx提供訪問就可以了。
API服務(wù)
由于應(yīng)用服務(wù)本身的性能存在很多問題,但是數(shù)據(jù)庫服務(wù)要比應(yīng)用服務(wù)好得多因?yàn)樗臉I(yè)務(wù)場景比較簡單,并發(fā)性能和TPS都要遠(yuǎn)高于應(yīng)用服務(wù)。所以由Nginx直接訪問數(shù)據(jù)庫或者應(yīng)用服務(wù),利用其強(qiáng)大的并發(fā)性能實(shí)現(xiàn)(如:Web防火墻)這樣復(fù)雜的業(yè)務(wù)功能來提供給用戶。這要求API服務(wù)有非常強(qiáng)大的業(yè)務(wù)處理功能,所以如OpenResty或Nginx集成的JS、Lua腳本語言及相關(guān)工具庫來提供完整的API功能。