nginx,why nginx?

Nginx是一款輕量級的Web服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,並在一個BSD-like協議下發行。由俄羅斯的程序設計師IgorSysoev所開發,供俄國大型的入口網站及搜索引擎Rambler(俄文:Рамблер)使用。其特點是佔有內存少,併發能力強,事實上nginx的併發能力確實在同類型的網頁服務器中表現較好。

 Nginx ("engine x") 是一個高性能的 HTTP 和 反向代理 服務器,也是一個IMAP/POP3/SMTP 代理服務器。 Nginx 是由 Igor Sysoev 爲俄羅斯訪問量第二的Rambler.ru 站點開發的,第一個公開版本 0.1.0 發佈於 2004 年 10 月 4 日。其將源代碼以類 BSD 許可證的形式發佈,因它的穩定性、豐富的功能集、示例配置文件和低系統資源的消耗而聞名。 

 它已經在衆多流量很大的俄羅斯網站上使用了很長時間,這些網站包括 Yandex、Mail.Ru、 VKontakte,以及 Rambler。據 Netcraft 統計,在 2012 年 8 月份,世界上最繁忙的網站中有 11.48%使用 Nginx 作爲其服務器或者代理服務器。目前互聯網主流公司360、百度、新浪、騰訊、阿里等,目前中國互聯網企業 70%以上公司都在使用 nginx 作爲自己的 web 服務器。Nginx 特點是佔有內存少,併發能力強,事實上 nginx 的併發能力確實在同類型的網頁服務器中表現較好。Nginx 由內核和模塊組成,其中,內核的設計非常微小和簡潔,完成的工作也非常簡單,僅僅通過配置文件將客戶端請求映射到一個 location block(location 是 Nginx配置中的一個指令,用於 URL 匹配),而在這個 location 中所配置的每個指令將會啓動不同的模塊去完成相應的工作。

 我們知道了nginx是一個代理服務,那就要問問,代理是什麼了。

 代理是什麼,代理就是一箇中間人,幫你去處理一些請求,你只要找到他就可以了,不用關心他會找誰幫你解決問題,這就是代理。比如有些房東,ta有好多好多房子,他可以找一箇中介去幫他出租房子,他不用關心房子租給了誰,每個月只管向中介要房租就可以了。其實代理就是一箇中間人中間的轉手人,你找他,他幫你。

  正向代理,正向代理可以看作一個跳板,代理訪問一些資源,比如有些資源你無法訪問,但是代理可以,那麼你就可以通過代理去訪問。比如客戶端無法訪問外網,但是代理服務器可以,並且客戶端可以訪那麼客戶端就可以通過代理服務器來訪問外網,如下圖:

image

正向代理的話,對於使用者是有感的,就是使用者是知道代理的存在的,並且需要做一些設置來達到使用代理訪問資源的目的。

那反向代理呢?反向代理(ReverseProxy)實際運行方式是指以代理服務器來接受internet上的連接請求,然後將請求轉發給內部網絡上的服務器,並將從服務器上得到的結果返回給internet上請求連接的客戶端,此時代理服務器對外就表現爲一個服務器。

和正向代理的區別就是,使用者是無感的,使用者去請求資源,其實是向代理請求的,使用者並不知道自己是向代理請求的,在使用者看來,他還是在向服務端請求,其實這裏有代理幫他去找資源給他。

作用

①保護網站安全

②通過配置緩存功能加速Web請求

③實現負載均衡

image

nginx常常被用作反向代理服務器。

WhyNginx?

Nginx 是一個高性能的 Web 和反向代理服務器, 它具有有很多非常優越的特性:

作爲 Web 服務器:相比 Apache,Nginx 使用更少的資源,支持更多的併發連接,體現更高的效率,這點使 Nginx 尤其受到虛擬主機提供商的歡迎。能夠支持高達 50,000 個併發連接數的響應,感謝 Nginx 爲我們選擇了 epoll and kqueue 作爲開發模型.

作爲負載均衡服務器:Nginx 既可以在內部直接支持 Rails 和 PHP,也可以支持作爲 HTTP代理服務器 對外進行服務。Nginx 用 C編寫, 不論是系統資源開銷還是 CPU 使用效率都比 Perlbal 要好的多。

作爲郵件代理服務器: Nginx 同時也是一個非常優秀的郵件代理服務器(最早開發這個產品的目的之一也是作爲郵件代理服務器),Last.fm 描述了成功並且美妙的使用經驗。

Nginx 安裝非常的簡單,配置文件非常簡潔(還能夠支持perl語法),Bugs非常少的服務器: Nginx 啓動特別容易,並且幾乎可以做到7*24不間斷運行,即使運行數個月也不需要重新啓動。你還能夠在不間斷服務的情況下進行軟件版本的升級。

採用IO多路複用epoll

 io多路複用

 多個描述符的I/O操作都能在一個線程內併發交替的順序完成,這就叫做I/O多路複用,這裏的“複用”指的是複用同一個線程。

select:

image

select是線性遍歷維護的fd列表,當發現有活躍的fd會喚醒進程處理。有缺點:1)能夠監視文件描述符的數量存在最大限制。1024

   2)線性掃描效率低下

 epoll

當有FD就緒時,採用系統回調函數將fd放入,效率更高。

沒有連接數量的限制

輕量級

 功能模塊少

 代碼模塊化

Cpu 親和

就是把cpu的核心和Nginx工作進程綁定方式,把每個worker進程固定在一個cpu上,減少切換cpu的cachemiss,獲取更好的性能。

image

Sendfile

處理靜態文件,靜態文件可以不經過用戶空間,直接通過內核空間響應給nginx,這樣效率就得到了提升。

image

直接不經過用戶態,直接在內核態實現文件的copy傳輸

image

關於nginx還遠遠不止這些,等後面有時間再寫一寫​。

這裏是一個遠離軟紅香土,尋找寧靜致遠的小空間,歡 迎大家一起交流。分享故事,分享心境。

相識,必然知味;相知,必然知心;相處,必然知情。

我的訂閱號

我的服務號

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章