簡單談?wù)刟pache與nginx
一、 關(guān)于Apache與Nginx的優(yōu)勢比較
不斷有人跟我說Nginx比Apache好、比Apache快之類。Nginx更主要是作為反向代理,而非Web服務(wù)器使用。我翻譯過一本關(guān)于反向代理的技術(shù)書籍,同時精通Apache API開發(fā),對Nginx和Apache的工作原理都略有了解,粗談一下看法。
不管是Nginx還是Squid這種反向代理,其網(wǎng)絡(luò)模式都是事件驅(qū)動。事件驅(qū)動其實(shí)是很老的技術(shù),早期的select、poll都是如此。后來基于內(nèi)核通知的更高級事件機(jī)制出現(xiàn),如libevent里的epoll,使事件驅(qū)動性能得以提高。事件驅(qū)動的本質(zhì)還是IO事件,應(yīng)用程序在多個IO句柄間快速切換,實(shí)現(xiàn)所謂的異步IO。事件驅(qū)動服務(wù)器,最適合做的就是這種IO密集型工作,如反向代理,它在客戶端與WEB服務(wù)器之間起一個數(shù)據(jù)中轉(zhuǎn)作用,純粹是IO操作,自身并不涉及到復(fù)雜計算。反向代理用事件驅(qū)動來做,顯然更好,一個工作進(jìn)程就可以run了,沒有進(jìn)程、線程管理的開銷,CPU、內(nèi)存消耗都小。
所以Nginx、Squid都是這樣做的。當(dāng)然,Nginx也可以是多進(jìn)程 + 事件驅(qū)動的模式,幾個進(jìn)程跑libevent,不需要Apache那樣動輒數(shù)百的進(jìn)程數(shù)。Nginx處理靜態(tài)文件效果也很好,那是因為靜態(tài)文件本身也是磁盤IO操作,處理過程一樣。至于說多少萬的并發(fā)連接,這個毫無意義。我隨手寫個網(wǎng)絡(luò)程序都能處理幾萬的并發(fā),但如果大部分客戶端阻塞在那里,就沒什么價值。
再看看Apache或者Resin這類應(yīng)用服務(wù)器,之所以稱他們?yōu)閼?yīng)用服務(wù)器,是因為他們真的要跑具體的業(yè)務(wù)應(yīng)用,如科學(xué)計算、圖形圖像、數(shù)據(jù)庫讀寫等。它們很可能是CPU密集型的服務(wù),事件驅(qū)動并不合適。例如一個計算耗時2秒,那么這2秒就是完全阻塞的,什么event都沒用。想想MySQL如果改成事件驅(qū)動會怎么樣,一個大型的join或sort就會阻塞住所有客戶端。這個時候多進(jìn)程或線程就體現(xiàn)出優(yōu)勢,每個進(jìn)程各干各的事,互不阻塞和干擾。當(dāng)然,現(xiàn)代CPU越來越快,單個計算阻塞的時間可能很小,但只要有阻塞,事件編程就毫無優(yōu)勢。所以進(jìn)程、線程這類技術(shù),并不會消失,而是與事件機(jī)制相輔相成,長期存在。
總結(jié)之,事件驅(qū)動適合于IO密集型服務(wù),多進(jìn)程或線程適合于CPU密集型服務(wù),它們各有各的優(yōu)勢,并不存在誰取代誰的傾向。再盲目的言之Nginx可以取代Apache的,該好好反思了。
二、nginx
基于nginx的tomcat負(fù)載均衡和集群(超簡單) 側(cè)重點(diǎn)簡單配置,缺點(diǎn)多人訪問時,session
使用基于Nginx集群策略后置模式避免Session復(fù)制
開啟Nginx的gzip壓縮功能詳解
Nginx 反向代理、負(fù)載均衡、頁面緩存、URL重寫及讀寫分離詳解
1 正向代理的概念
正向代理,也就是傳說中的代理,他的工作原理就像一個跳板,簡單的說,我是一個用戶,我訪問不了某網(wǎng)站,但是我能訪問一個代理服務(wù)器,這個代理服務(wù)器呢,他能訪問那個我不能訪問的網(wǎng)站,于是我先連上代理服務(wù)器,告訴他我需要那個無法訪問網(wǎng)站的內(nèi)容,代理服務(wù)器去取回來,然后分會給我。從網(wǎng)站的角度,只能在代理服務(wù)器來取內(nèi)容的時候有一條記錄,有時候并不知道是用戶的請求,也隱藏了用戶的資料,這取決于代理告不告訴網(wǎng)站。
結(jié)論就是,正向代理是一個位于客戶端和服務(wù)器(origin server)之間的服務(wù)器,為了從原始服務(wù)器取得內(nèi)容,客戶端向代理發(fā)送一個請求并制定目標(biāo)(原始服務(wù)器),然后代理向原始服務(wù)器轉(zhuǎn)交請求并將獲得的內(nèi)容返回給客戶端??蛻舳吮仨氁M(jìn)行一些特別的設(shè)置才能使用正向代理。
2 反向代理的概念
例如 用戶訪問 http://www.test.com/readme,但是www.test.com上并不存在readme頁面,他是偷偷從另外一臺服務(wù)器取回來,然后作為自己的內(nèi)容返回用戶,但用戶并不知情。這里所提到的www.test.com 這個域名對應(yīng)額服務(wù)器就設(shè)置了反向代理功能。
結(jié)論就是,反向代理正好相反,對于客戶端而言它就像是原始服務(wù)器,并且客戶端不需要進(jìn)行任何特別設(shè)置??蛻舳讼蚍聪虼淼拿臻g(name-space)中的內(nèi)容發(fā)送普通請求,接著反向代理將判斷向何處(原始服務(wù)器)轉(zhuǎn)交請求,并將獲得的內(nèi)容返回給客戶端,就像這些內(nèi)容元貝就是它自己的一樣。
3 兩者區(qū)別
從用途上來講:
正向代理的典型用途是為在防火墻內(nèi)的局域網(wǎng)客戶端提供訪問Internet的途徑。正向代理還可以使用緩存特性減少網(wǎng)絡(luò)使用率。
反向代理的典型用途是將防火墻后面的代理服務(wù)器提供給Internet用戶訪問。反向代理還可以為后端的多臺服務(wù)器提供負(fù)載平衡,或為后端較慢的服務(wù)器提供緩沖服務(wù)。另外反向代理還可以啟用高級URL策略和管理技術(shù),從而是處于不同web服務(wù)器系統(tǒng)的web頁面同時存在于同一個URL空間下。
從安全性來講:
正向代理允許客戶端通過訪問任意網(wǎng)站并且隱藏客戶自身,因此你必須采取安全措施以確保僅為經(jīng)過授權(quán)的客戶端提供服務(wù)。
反向代理對外都是透明的,訪問者并不自導(dǎo)自己訪問的是一個代理。
5. 看到一本關(guān)于nginx開發(fā)的書《深入理解Nginx:模塊開發(fā)與架構(gòu)解析》
阿里巴巴資深Nginx專家撰寫,透徹解析Nginx架構(gòu),詳解Nginx模塊開發(fā)方法和技巧。知道不適合我,但是很膜拜。
另外一直關(guān)注的一本書總是缺貨 叫《Web協(xié)議與實(shí)踐》o(╯□╰)o
相關(guān)文章
淺談ubuntu執(zhí)行.sh文件幾種方式區(qū)別
這篇文章主要介紹了淺談ubuntu執(zhí)行.sh文件幾種方式區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09使用?DataAnt?監(jiān)控?Apache?APISIX的原理解析
Apache?APISIX?是一個開源的云原生?API?網(wǎng)關(guān),作為?API?網(wǎng)關(guān),它兼具動態(tài)、實(shí)時、高性能等特點(diǎn),提供了負(fù)載均衡、動態(tài)上游、灰度發(fā)布、服務(wù)熔斷、身份認(rèn)證、可觀測性等豐富的流量管理功能,這篇文章主要介紹了如何使用?DataAnt?監(jiān)控?Apache?APISIX,需要的朋友可以參考下2022-06-06Linux 查看遠(yuǎn)程服務(wù)器文件狀態(tài)的方法
今天小編就為大家分享一篇Linux 查看遠(yuǎn)程服務(wù)器文件狀態(tài)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07Linux系統(tǒng)設(shè)置PATH環(huán)境變量(3種方法)
這篇文章主要介紹了Linux系統(tǒng)設(shè)置PATH環(huán)境變量(3種方法),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11