Nginx系列一:Nginx介绍与Nginx工作原理分析
一:Nginx概述
Nginx ("engine x") 是一個高性能的輕量級的 HTTP 和反向代理、負(fù)載平衡web服務(wù)器。
nginx 的并發(fā)能力在同類型的網(wǎng)頁服務(wù)器中表現(xiàn)較好市場占用率很高,中國大陸使用 nginx網(wǎng)站用戶有:百度、京東、新浪、網(wǎng)易、騰訊、淘寶等。
Nginx以事件驅(qū)動的方式編寫(整個事件驅(qū)動機(jī)制基本框架就是linux下的select,poll,epoll這幾個IO多路復(fù)用模式),所以有非常好的性能,有報告表明能支持高達(dá) 50,000 個并發(fā)連接數(shù)。
Nginx因為它的穩(wěn)定性高、豐富的模塊庫、靈活的配置和低系統(tǒng)資源的消耗而聞名。
業(yè)界一致認(rèn)為它是Apache2.2+mod_proxy_balancer的輕量級代替者,不僅是因為響應(yīng)靜態(tài)頁面的速度非常快,而且它的模塊數(shù)量達(dá)到Apache的近2/3。對proxy和rewrite模塊的支持很徹底,同時還支持 CGI 協(xié)議的動態(tài)語言,比如 perl、php等。但是不支持 java,Java 程序只能通過與 tomcat 配合完成。
?
二:Nginx基本特性與功能
?
- 靜態(tài)資源的web服務(wù)器,能緩存打開的文件描述符
- 支持緩存加速、負(fù)載均衡機(jī)制
- http、smtp、pop3協(xié)議的反向代理服務(wù)器;
- 模塊化的結(jié)構(gòu)。包括gzipping, byte ranges, chunked responses,以及 SSI-filter等filter。
- 支持SSL 和 TLSSNI.
- 支持熱部署
Nginx具有很高的穩(wěn)定性。其它HTTP服務(wù)器,當(dāng)遇到訪問的峰值,或者有人惡意發(fā)起慢速連接時,也很可能會導(dǎo)致服務(wù)器物理內(nèi)存耗盡頻繁交換,失去響應(yīng),只能重啟服務(wù)器。例如當(dāng)前apache一旦上到200個以上進(jìn)程,web響應(yīng)速度就明顯非常緩慢了。而Nginx采取了分階段資源分配技術(shù),使得它的CPU與內(nèi)存占用率非常低。nginx官方表示保持10,000個沒有活動的連接,它只占2.5M內(nèi)存,所以類似DOS這樣的攻擊對nginx來說基本上是毫無用處的。就穩(wěn)定性而言,nginx比lighthttpd更勝一籌。
Nginx支持熱部署。它的啟動特別容易, 并且?guī)缀蹩梢宰龅?*24不間斷運行,即使運行數(shù)個月也不需要重新啟動。你還能夠在不間斷服務(wù)的情況下,對軟件版本進(jìn)行進(jìn)行升級。
Nginx采用master-slave模型,能夠充分利用SMP的優(yōu)勢,且能夠減少工作進(jìn)程在磁盤I/O的阻塞延遲。當(dāng)采用select()/poll()調(diào)用時,還可以限制每個進(jìn)程的連接數(shù)。
Nginx代碼質(zhì)量非常高,代碼很規(guī)范,手法成熟, 模塊擴(kuò)展也很容易。特別值得一提的是強(qiáng)大的Upstream與Filter鏈。Upstream為諸如reverse proxy,與其他服務(wù)器通信模塊的編寫奠定了很好的基礎(chǔ)。而Filter鏈最酷的部分就是各個filter不必等待前一個filter執(zhí)行完畢。它可以把前一個filter的輸出做為當(dāng)前filter的輸入,這有點像Unix的管線。這意味著,一個模塊可以開始壓縮從后端服務(wù)器發(fā)送過來的請求,且可以在模塊接收完后端服務(wù)器的整個請求之前把壓縮流轉(zhuǎn)向客戶端。
Nginx采用了一些os提供的最新特性如對sendfile (Linux2.2+),accept-filter (FreeBSD4.1+),TCP_DEFER_ACCEPT (Linux 2.4+)的支持,從而大大提高了性能。
?
三:Nginx工作原理分析
Nginx啟動后以daemon的方式在后臺運行,Nginx會啟動一個master進(jìn)程和多個worker進(jìn)程。
master進(jìn)程主要用來管理worker進(jìn)程,包含:接收來自外界的信號,向各worker進(jìn)程發(fā)送信號,監(jiān)控worker進(jìn)程的運行狀態(tài),當(dāng)worker進(jìn)程退出后(異常情況下),會自動重新啟動新的worker進(jìn)程
那worker是如何工作的呢?
當(dāng)master發(fā)出通知有新的任務(wù)了,空閑的worker通過爭搶的方式去獲取任務(wù)!
nginx設(shè)計一個 master 和多個 woker 有好處
總結(jié)
以上是生活随笔為你收集整理的Nginx系列一:Nginx介绍与Nginx工作原理分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何在Win Server 2008R2
- 下一篇: Nginx - 原理机制