WEB服务器 - Apache、Nnginx、Lighttpd的比较和择优(转)
Apache服務器和nginx的優缺點:?
我們之前大量使用Apache來作為HTTPServer。 Apache具有很優秀的性能,而且通過模塊可以提供各種豐富的功能。
優點:
缺點:
解決方法:
- 目前來說出現了另一種WebServer,在并發方面表現更加優越,叫做asynchronous servers異步服務器。最有名的為Nginx和Lighttpd。?所謂的異步服務器是事件驅動程序模式的event-driven,除了用戶的并發請求通常只需要一個單一的或者幾個線程。因此占用系統資源就非常少。這幾 種又被稱為lightweight web server。
舉例,對于10,000的并發連接請求,nginx可能僅僅使用幾M的內存;而Apache可能需要使用幾百M的內存資源。
實際中單一的使用
1)關于單一使用Apache來作為HTTPServer的情況我們不用再多做介紹,非常常見的應用;
上面我們介紹到Apache對于PHP等服務器端腳本的支持是通過自己的模塊來實現的,而且性能優越。
?
2)我們同樣可以單單使用 nginx或者lighttpd來作為HTTPServer來使用。
nginx和lighttpd和Apache類似都通過各種模塊可以對服務器的功能進行豐富的擴展,同樣都是通過conf配置文件對各種選項進行配置。
對于PHP等,nginx和lighttpd都沒有內置的 模塊來對PHP進行支持,而是通過FastCGI來支持的。
Lighttpd 通過模塊可以提供CGI, FastCGI和SCGI等服務,nginx則沒有自己提供處理PHP的功能,需要通過第三方的模塊來提供對PHP進行FastCGI方式的集成。
?
Lighttpd vs nginx?:http://www.wikivs.com/wiki/Lighttpd_vs_nginx
?
?
反向代理Reverse Proxy?
1) 代理服務器的概念proxy server:?
代理服務器?的概念很容易理解,就是通常作為兩臺機器中間的機器,需要提供的功能往往有:
所謂的負載均衡就是,很多機器使用一個代理的時候,代理服務器需要對各個服務器進行均衡。
我們常見的代理是正向的代理,例如我們機房有20臺電腦要上網,現在只有一個電腦可以上網,那么可以使用這臺電腦作為代理服務器,所有通過網絡的數據傳輸 都要經過該代理服務器。
而反向代理,是和正向代理相反的?,正向代理針對服務接收方用戶來說,反向代理或者叫做服務器端代理是針對服務器端的,意思是有多臺服務器,反向代理服務器對用戶的請求代理發送給其中的一 臺服務器進行處理。
Proxy server?:http://en.wikipedia.org/wiki/Proxy_server
?
2)?實際中對于一個大型網站,我們通常使用很多臺sever來構成一個cluster來對用戶的各種請求進行響應。因此通常需要一臺或者多臺反向代理服務器來對多臺Server進行服務。?
這個反向代理服務器需要提供的功能一般都包括:
Reverse proxy?:http://en.wikipedia.org/wiki/Reverse_proxy
(需要注意反向代理服務器和防火墻優點類似,但是防火墻一般只有安全方面的考慮,沒有緩存和負載均衡方面的功能。)
?
3) 綜上,實際中Web服務器端的架構?
通常是多臺Web服務器運行并行地提 供服務;
同時還需要在Web服務器前段部署一臺或者多臺反向代理服務器,一方面緩存一些靜態數據,或者將Web服務器動態產生的一些內容緩存,另一方面通過負載均衡功能,可以均勻地將用戶的并發請求傳遞給多臺Web服務器進行處理。?
這樣一方面可以大大降低后面每臺Web服務器的負擔;另一方 面可以實現多臺服務器的負載均衡。?
?
nginx/lighttpd作為反向代理服務器
nginx或lighttpd在前端作為反向代理服務器,后臺布置多臺ApacheHTTPServer:?
- 上面說到,nginx和lighttpd的優點在于速度快,輕量級,在處理多用戶并發方面要大大優于Apache服務器。?
? ? ? ? ? ? ?因此我們通常可以把他們作為反向代理服務器放置到多臺的Apache Web服務器前段,來一方面緩存數據,另一方面實現多臺服務器的負載均衡。
- 當然了Apache本身通過mod_proxy和mod_cache也可以實現反向代理和緩存功能?,但是在處理高并發方面還是無法與nginx和lighttpd這種輕量的異步模式的服務器來比較。
- 另外,利用nginx和lighttpd的反響代理功能,我們可以通過設置其configuration文件,當客戶端請求的是靜態內容(例如一些圖片,js,html文件等)的話,直接由nginx或者 lighttpd進行響應;
- 如果需要訪問動態內容(通常需要實時從數據庫中讀取)的話,則通過反向代理,nginx等可以將請求發送給后臺等待的Apache進行響應,然后Apache將相應的結果返回給nginx,后者再響應用戶的時候還可以進行緩存。
- 有時候還可以使用一些緩存的工具,例如Squid。另外nginx也提供了對一些緩存功能的支持,例如memcache?等。
因此如果從圖形來分析的話,nginx作為最前端的web cache系統,通常的架構如下:
這個結構的優點:
?
nginx和squid配合搭建的web服務器前端系統架構:
前端的lvs和squid,按照安裝方法,把epoll打開,配置文件照搬,基本上問題不多。
這個架構和app_squid架構的區別,也是關鍵點就是:加入了一級中層代理,中層代理的好處實在太多了:
?
參考資料:
http://hudeyong926.javaeye.com/blog/813141
總結
以上是生活随笔為你收集整理的WEB服务器 - Apache、Nnginx、Lighttpd的比较和择优(转)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Struts2内置拦截器和自定义拦截器
- 下一篇: 学习socket nio 之 mina实