1 問題
公司服務(wù)器用的Apache,后臺(tái)是php語(yǔ)言,然后服務(wù)端用的linux C/C++,會(huì)經(jīng)常聽到Apache服務(wù)器,然后之前實(shí)習(xí)的公司服務(wù)端用的java,然后依稀記得使用了nginx反向代理服務(wù)器和tomcat,請(qǐng)求先經(jīng)過(guò)nginx然后再去通過(guò)tomcat轉(zhuǎn)發(fā)請(qǐng)求,然后對(duì)Apache服務(wù)器和tomcat和nginx理解就有點(diǎn)模糊了,然后今天查閱相關(guān)資料對(duì)使用場(chǎng)景和進(jìn)行對(duì)比
2 Apache、Tomcat 、Nginx名詞解釋
1 ) Apache
Apache HTTP服務(wù)器是一個(gè)模塊化的服務(wù)器,可以運(yùn)行在幾乎所有廣泛使用的計(jì)算機(jī)平臺(tái)上,Linux、Unix、Windows等,屬于應(yīng)用服務(wù)器。
Apache支持模塊多,性能穩(wěn)定,Apache本身是靜態(tài)解析,適合靜態(tài)HTML、圖片等,比如我之前用過(guò)freemarker,也是靜態(tài)的,但可以通過(guò)擴(kuò)展腳本、模塊等支持動(dòng)態(tài)頁(yè)面等。
Apache可以支持PHP、cgi、perl,但是要使用Java的話,你需要Tomcat在Apache后臺(tái)支撐,將Java請(qǐng)求由Apache轉(zhuǎn)發(fā)給Tomcat處理.
缺點(diǎn):配置相對(duì)復(fù)雜,自身不支持動(dòng)態(tài)頁(yè)面,需要插件擴(kuò)展來(lái)輔助支持動(dòng)態(tài)頁(yè)面解析,如FastCGI、Tomcat,搞j2ee的小伙伴知道我們動(dòng)態(tài)頁(yè)面需要使用到j(luò)sp,所以我們是需要Tomcat來(lái)解析動(dòng)態(tài)頁(yè)面的,Tomcat就是servlet容器,當(dāng)然它可以獨(dú)立于Apache,直接把tomcat作為服務(wù)器
2 ) Tomcat
Tomcat是應(yīng)用(Java)服務(wù)器,它只是一個(gè)Servlet(JSP也翻譯成Servlet)容器,可以認(rèn)為是Apache的擴(kuò)展,但是可以獨(dú)立于Apache運(yùn)行,也就是說(shuō)沒有Apache,只有Tomcat也可以解析靜態(tài)頁(yè)面和動(dòng)態(tài)頁(yè)面(jsp),
3 ) Nginx
Nginx是俄羅斯人編寫的十分輕量級(jí)的HTTP服務(wù)器,是一個(gè)高性能的HTTP和反向代理服務(wù)器,同時(shí)也是一個(gè)IMAP/POP3/SMTP 代理服務(wù)器。
3 對(duì)比
1) Apache 與 Tomcat 比較
相同點(diǎn):
都是Apache組織開發(fā)的,都有HTTP服務(wù)的功能,兩者都是開源、免費(fèi)的。
不同點(diǎn):
a) Apache是專門用了提供HTTP服務(wù)的,以及相關(guān)配置的(例如虛擬主機(jī)、URL轉(zhuǎn)發(fā)等等),而Tomcat是Apache組織在符合Java EE的JSP、Servlet標(biāo)準(zhǔn)下開發(fā)的一個(gè)JSP服務(wù)器
b) Apache是一個(gè)Web服務(wù)器環(huán)境程序,啟用他可以作為Web服務(wù)器使用,不過(guò)只支持靜態(tài)網(wǎng)頁(yè)如ASP、PHP,F(xiàn)reemarker,你要搞java服務(wù)端用到動(dòng)態(tài)語(yǔ)言比如jsp,就需要Tomcat這個(gè)解釋器,用來(lái)解析jsp,Apache是不能解析的,切記。
c) Apache 側(cè)重于HTTP Server,Tomcat 側(cè)重于Servlet容器,支持JSP,但對(duì)靜態(tài)網(wǎng)頁(yè)不太理想,也就是說(shuō)Apache和Tomcat這個(gè)2個(gè)服務(wù)器,Apache對(duì)靜態(tài)文件處理能力強(qiáng)于Tomcat,Tomcat實(shí)用于解析動(dòng)態(tài)語(yǔ)言(jsp),我們可以用Apache處理靜文件,用Tomcat處理動(dòng)態(tài)文件
d) Apache是Web服務(wù)器,Tomcat是應(yīng)用(Java)服務(wù)器,可以認(rèn)為是Apache的擴(kuò)展,但是可以獨(dú)立于Apache運(yùn)行
實(shí)際使用:
Apache+Tomcat(如果是java服務(wù)端)
戶端請(qǐng)求的是靜態(tài)頁(yè)面,則只需要Apache服務(wù)器響應(yīng)請(qǐng)求。
客戶端請(qǐng)求動(dòng)態(tài)頁(yè)面,則是Tomcat服務(wù)器響應(yīng)請(qǐng)求,JSP是服務(wù)器端解釋代碼的,這樣整合就可以減少Tomcat的服務(wù)開銷。
可以理解 Tomcat為Apache的一種擴(kuò)展。
2)Nginx 與 Apache 比較
1 Nginx 優(yōu)點(diǎn)
a)輕量級(jí),同樣是web 服務(wù),比apache占用更少的內(nèi)存及資源 。
b)抗并發(fā),nginx 處理請(qǐng)求是異步非阻塞的,多個(gè)連接(萬(wàn)級(jí)別)可以對(duì)應(yīng)一個(gè)進(jìn)程,而apache 則是同步阻塞型的,同步多進(jìn)程模型,一個(gè)連接對(duì)應(yīng)一個(gè)進(jìn)程
c)高度模塊化的設(shè)計(jì),編寫模塊相對(duì)簡(jiǎn)單。
d)提供負(fù)載均衡
e)配置簡(jiǎn)潔
f ) Nginx 靜態(tài)處理性能比 Apache 高 3倍以上
e ) nginx只適合靜態(tài)和反向代理
反向代理的理解:
反向代理(Reverse Proxy)方式是指以代理服務(wù)器來(lái)接受internet上的連接請(qǐng)求,然后將請(qǐng)求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器處理,其本身并不做處理,
并將從服務(wù)器上得到的結(jié)果返回給internet上請(qǐng)求連接的客戶端,此時(shí)代理服務(wù)器對(duì)外就表現(xiàn)為一個(gè)web服務(wù)器,實(shí)際只做了轉(zhuǎn)發(fā),沒有做處理。
2 Apache 優(yōu)點(diǎn)
a)apache的 rewrite 比nginx 的強(qiáng)大。
b)支持動(dòng)態(tài)頁(yè)面。
c)支持的模塊多,基本涵蓋所有應(yīng)用。
d)性能穩(wěn)定。
e ) Apache 對(duì) PHP 支持比較簡(jiǎn)單
f ) 相比nginx,動(dòng)態(tài)請(qǐng)求由apache去做比較好。
3)Nginx 與 Tomcat 比較
我們知道Nginx一般處理靜態(tài)處理能力很強(qiáng),但是不能解析動(dòng)態(tài)語(yǔ)言比如(jsp)我們,還需要Tomcat進(jìn)行解釋jsp,所以動(dòng)態(tài)處理我們一般使用Tomcat,靜態(tài)處理使用Nginx,我之前實(shí)習(xí)的公司網(wǎng)站就是Nginx+Tomcat組合使用,Nginx起到反向代理的作用,如果是靜態(tài)處理通過(guò)Nginx處理,動(dòng)態(tài)請(qǐng)求才到后臺(tái)Tomcat進(jìn)行處理,這也就是Nginx的動(dòng)態(tài)分離機(jī)制,我之前還不是太理解,現(xiàn)在終于理解為什么要這么搭配了,說(shuō)到底就是Nginx的靜態(tài)處理能力比Tomcat強(qiáng),所以我們需要請(qǐng)求先經(jīng)過(guò)Nginx,這里就不需要用到Apache服務(wù)器。
4 小結(jié)
a ) 靜態(tài)處理能力:
Nginx(至少是Apache3倍)>Apache>Tomcat
b)Nginx優(yōu)點(diǎn):負(fù)載均衡、反向代理、處理靜態(tài)文件優(yōu)勢(shì),這也就是為啥java服務(wù)器Tomcat前面先要經(jīng)過(guò)Nginx服務(wù)器處理一波,(只轉(zhuǎn)發(fā)請(qǐng)求,不做其他操作,可以看下上面的反向代理的解釋),Nginx并發(fā)性比較好,CPU內(nèi)存占用低
c)Apache優(yōu)點(diǎn):相對(duì)于Tomcat服務(wù)器來(lái)說(shuō)處理靜態(tài)文件是它的優(yōu)勢(shì),速度快。Apache是靜態(tài)解析,適合靜態(tài)HTML、圖片,當(dāng)然讀寫能力比較強(qiáng),如果rewrite頻繁,那還是Apache較適合,比較穩(wěn)定,處理動(dòng)態(tài)有優(yōu)勢(shì)。前提是沒有Tomcat,也就是說(shuō)不是java服務(wù)端。
d)Tomcat:動(dòng)態(tài)解析容器,處理動(dòng)態(tài)請(qǐng)求,是編譯JSP、Servlet的容器,Nginx有動(dòng)態(tài)分離機(jī)制,靜態(tài)請(qǐng)求直接就可以通過(guò)Nginx處理,動(dòng)態(tài)請(qǐng)求才轉(zhuǎn)發(fā)請(qǐng)求到后臺(tái)交由Tomcat進(jìn)行處理。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接