深入理解Nginx 閱讀筆記 一

2021-08-24 20:47:57 字數 2548 閱讀 7005

眾所周知,apache、lighttpd、tomcat、 jetty、iis等都是著名的web伺服器(這裡就不詳細介紹這幾個伺服器了,有興趣的可以自己查資料),那為什麼我要特意學習nginx呢?最重要的原因當然是——網際網路公司(尤其是杭州的某個電商公司)面試的時候可以瞎xx吹一波,顯得自己很叼(開玩笑的,最重要的原因還是其效能的優越性,我們下面細談)

nginx是乙個跨平台的web伺服器,可執行在linux、freebsd、solaris、aix、mac os、 windows等作業系統上,並且它還可以使用當前作業系統特有的一些高效api來提高自己的效能。例如,對於高效處理大規模併發連線,它支援linux上的epoll、solaris上的event ports和freebsd上的kqueue等(我只了解epoll i/o復用技術,剩下的並不了解,有興趣的可以一起**epoll的實現和使用之類的)。

nginx的效能優越性體現在幾個方面(直接參照書):

(1) 更快

這表現在兩個方面:一方面,在正常情況下,單次請求會得到更快的響應;另一方面,在高峰期(如有數以萬計的併發請求), nginx可以比其他web伺服器更快地響應請求。

(2) 高擴充套件性

nginx的設計極具擴充套件性,它完全是由多個不同功能、不同層次、不同型別且耦合度極低的模組組成。因此,當對某乙個模組修復bug或進行公升級時,可以專注於模組自身,無須在意其他。而且在http模組中,還設計了http過濾器模組:乙個正常的http模組在處理完請求後,會有一串http過濾器模組對請求的結果進行再處理。這樣,當我們開發乙個新的http模組時,不但可以使用諸如http核心模組、events模組、log模組等不同層次或者不同型別的模組,還可以原封不動地復用大量已有的http過濾器模組。這種低耦合度的優秀設計,造就了nginx龐大的第三方模組,當然,公開的第三方模組也如官方發布的模組一樣容易使用nginx的模組都是嵌入到二進位制檔案中執行的,無論官方發布的模組還是第三方模組都是如此。這使得第三方模組一樣具備極其優秀的效能,充分利用nginx的高併發特性。

(3) 高可靠性

這個就不談了

(4) 低記憶體消耗

一般情況下,10000個非活躍的http keep-alive連線在nginx中僅消耗2.5mb的記憶體,這 是nginx支援高併發連線的基礎。

(5) 單機支援10萬以上的併發連線

這是乙個非常重要的特性!隨著網際網路的迅猛發展和網際網路使用者數量的成倍增長,各大公司、**都需要應付海量併發請求,而nginx作為乙個能夠在峰值期頂住10萬以上併發請求的server,你覺得你需不需要學習。

(6) 熱部署

master管理程序與worker工作程序的分離設計,使得nginx能夠提供熱部署功能,即可以 在7×24小時不間斷服務的前提下,公升級nginx的可執行檔案。當然,它也支援不停止服務就更新配置項、更換日誌檔案等功能。

(7) 最自由的bsd許可協議

這是nginx可以快速發展的強大動力。bsd許可協議不只是允許使用者免費使用nginx,它還允許使用者在自己的專案中直接使用或修改nginx原始碼,然後發布。這吸引了無數開發者繼 續為nginx貢獻自己的智慧型。

既然nginx這麼優秀,我們便來準備一下nginx的使用環境,然後開始nginx的探索之旅吧。

首先我們需要乙個核心為linux 2.6及以上版本的作業系統,因為linux 2.6及以上核心才 支援epoll,而在linux上使用select或poll來解決事件的多路復用,是無法解決高併發壓力問題的。

linux中我們可以通過命令uname -a來檢視我們系統的一些資訊,包括核心版本,比如下面顯示我使用的的阿里雲伺服器的核心版本為4.4.0

如何在 ubuntu 中公升級到最新核心

此外,你還需要安裝一些軟體

(1) gcc和g++

這是編譯nginx模組源**的必備工具,直接在命令列中輸入gcc -v(gcc --version也行)或者g++ -v你就可以知道自己的系統中有沒有安裝gcc或者g++了(如下所示,表明已經安裝)

如果沒有安裝gcc或者g++,那麼一般直接

sudo apt-get install build-essential

sudo apt-get install gcc

sudo apt-get install g++

就好了,當然有時候有可能出問題,這時候你們自己解決吧。

(2) pcre庫

這東西如果用不到正規表示式的話是不用裝的

安裝命令如下:

sudo apt-get install libpcre3 libpcre3-dev 即可

(3)zlib庫

zlib庫用於對http包的內容做gzip格式的壓縮,如果我們在nginx.conf裡配置了gzip on,並指定對於某些型別(content-type)的http響應使用gzip來進行壓縮以減少網路傳輸量,那 麼,在編譯時就必須把zlib編譯進nginx。

安裝命令如下:

sudo apt-get install zlib1g-dev

(4)openssl庫

安裝命令如下:

sudo apt-get install openssl libssl-dev

深入理解nginx

1.檢視核心版本 因為2.6以上的核心才支援epoll,nginx的高併發的特性依賴epoll uname a linux com.guang 3.10.0 514.16.1.el7.x86 64 1 smp wed apr 12 15 04 24 utc 2017 x86 64 x86 64 x8...

《深入理解nginx》總結

一些指標 和nginx有關的核心調優 可以修改 etc sysctl.conf來更改核心引數調優 nginx為訪問第三方服務做的優化 在用nginx開發模組時,如果需要訪問第三方服務,不能自己簡單的用套接字程式設計,會破壞nginx全非同步架構。nginx提供了兩種全非同步通訊方式 upstream...

深入理解網路技術內幕 閱讀筆記(一)

第一章 簡介 記憶體快取 核心分別使用kmalloc和kfree函式分配和釋放乙個記憶體塊。當分配和 經常發生時,相關的核心組建初始化函式通常會分配一塊特殊的記憶體快取,以作分配之用。當乙個記憶體塊被釋放時,實際上是返回到當初被分配的同乙個緩衝區中。核心維護的其專屬記憶體快取的一些網路資料結構的例子...