大家好卸耘,這是一個(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ò)請(qǐng)求從紅色的箭頭走下來,會(huì)先經(jīng)過Nginx再到應(yīng)用服務(wù)(比如:Tomcat庆锦、Django)晌该,然后再訪問Redis或者M(jìn)ySQL這樣的數(shù)據(jù)庫提供基本的數(shù)據(jù)功能。
反向代理服務(wù)
由于應(yīng)用服務(wù)要求開發(fā)效率高燕耿,所以運(yùn)行效率相對(duì)較低姜胖,QPS、TPS或并發(fā)都是受限的蚜锨。所以我們把很多這樣的應(yīng)用服務(wù)組成集群向用戶提供高可用性。而一旦很多應(yīng)用構(gòu)成集群的時(shí)候郭膛,就需要Nginx具有反向代理功能氛悬,可以把動(dòng)態(tài)請(qǐng)求傳導(dǎo)給應(yīng)用服務(wù)。很多應(yīng)用服務(wù)構(gòu)成集群一定會(huì)帶來兩個(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í)延會(huì)增加坚洽,所以我們?nèi)绻馨岩恍┧杏脩艨雌饋聿蛔兊幕蛘咴谝欢螘r(shí)間內(nèi)看起來不變的動(dòng)態(tài)內(nèi)容緩存在Nginx部分,由Nginx直接向用戶提供訪問那么這樣的時(shí)延就會(huì)減少很多鞍盗。所以反向代理會(huì)衍生出緩存功能跳昼,加速訪問。
靜態(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功能气破。