溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

nginx有哪些特點

發(fā)布時間:2021-12-10 16:13:08 來源:億速云 閱讀:139 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容主要講解“nginx有哪些特點”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“nginx有哪些特點”吧!

1.Nginx是什么?

    Nginx就是反向代理服務(wù)器。首先我們先來看看什么是代理服務(wù)器,代理服務(wù)器一般是指局域網(wǎng)內(nèi)部的機(jī)器通過代理服務(wù)發(fā)送請求到互聯(lián)網(wǎng)上的服務(wù)器,代理服務(wù)器一般作用于客戶端。比如GoAgent,F(xiàn)Q神器。

2.Nginx有哪些特點?

    (1)跨平臺:Nginx 可以在大多數(shù) Unix like OS編譯運行,而且也有Windows的移植版本。

    (2)配置異常簡單,非常容易上手。配置風(fēng)格跟程序開發(fā)一樣,神一般的配置

    (3)非阻塞、高并發(fā)連接:數(shù)據(jù)復(fù)制時,磁盤I/O的第一階段是非阻塞的。官方測試能夠支撐5萬并發(fā)連接,在實際生產(chǎn)環(huán)境中跑到2~3萬并發(fā)連接數(shù).(這得益于Nginx使用了最新的epoll模型)

    (4)事件驅(qū)動:通信機(jī)制采用epoll模型,支持更大的并發(fā)連接。

    (5)master/worker結(jié)構(gòu):一個master進(jìn)程,生成一個或多個worker進(jìn)程

    (6)內(nèi)存消耗小:處理大并發(fā)的請求內(nèi)存消耗非常小。在3萬并發(fā)連接下,開啟的10個Nginx 進(jìn)程才消耗150M內(nèi)存(15M*10=150M) 

    (7)成本低廉:Nginx為開源軟件,可以免費使用。而購買F5 BIG-IP、NetScaler等硬件負(fù)載均衡交換機(jī)則需要十多萬至幾十萬人民幣

    (8)內(nèi)置的健康檢查功能:如果 Nginx Proxy 后端的某臺 Web 服務(wù)器宕機(jī)了,不會影響前端訪問。

    (9)節(jié)省帶寬:支持 GZIP 壓縮,可以添加瀏覽器本地緩存的 Header 頭。

    (10)穩(wěn)定性高:用于反向代理,宕機(jī)的概率微乎其微

3.Nginx是如何處理一個請求?

    首先,nginx在啟動時,會解析配置文件,得到需要監(jiān)聽的端口與ip地址,然后在nginx的master進(jìn)程里面,先初始化好這個監(jiān)控的socket(創(chuàng)建socket,設(shè)置addrreuse等選項,綁定到指定的ip地址端口,再listen),然后再fork(一個現(xiàn)有進(jìn)程可以調(diào)用fork函數(shù)創(chuàng)建一個新進(jìn)程。由fork創(chuàng)建的新進(jìn)程被稱為子進(jìn)程 )出多個子進(jìn)程出來,然后子進(jìn)程會競爭accept新的連接。此時,客戶端就可以向nginx發(fā)起連接了。當(dāng)客戶端與nginx進(jìn)行三次握手,與nginx建立好一個連接后,此時,某一個子進(jìn)程會accept成功,得到這個建立好的連接的socket,然后創(chuàng)建nginx對連接的封裝,即ngx_connection_t結(jié)構(gòu)體。接著,設(shè)置讀寫事件處理函數(shù)并添加讀寫事件來與客戶端進(jìn)行數(shù)據(jù)的交換。最后,nginx或客戶端來主動關(guān)掉連接,到此,一個連接就完成了自己的使命.

    當(dāng)然,nginx也是可以作為客戶端來請求其它server的數(shù)據(jù)的(如upstream模塊),此時,與其它server創(chuàng)建的連接,也封裝在ngx_connection_t中。作為客戶端,nginx先獲取一個ngx_connection_t結(jié)構(gòu)體,然后創(chuàng)建socket,并設(shè)置socket的屬性( 比如非阻塞)。然后再通過添加讀寫事件,調(diào)用connect/read/write來調(diào)用連接,最后關(guān)掉連接,并釋放ngx_connection_t。


說明:

    nginx在實現(xiàn)時,是通過一個連接池來管理的,每個worker進(jìn)程都有一個獨立的連接池,連接池的大小是worker_connections。這里的連接池里面保存的其實不是真實的連接,它只是一個worker_connections大小的一個ngx_connection_t結(jié)構(gòu)的數(shù)組。并且,nginx會通過一個鏈表free_connections來保存所有的空閑ngx_connection_t,每次獲取一個連接時,就從空閑連接鏈表中獲取一個,用完后,再放回空閑連接鏈表里面。 

    在這里,很多人會誤解worker_connections這個參數(shù)的意思,認(rèn)為這個值就是nginx所能建立連接的最大值。其實不然,這個值是表示每個worker進(jìn)程所能建立連接的最大值,所以,一個nginx能建立的最大連接數(shù),應(yīng)該是worker_connections * worker_processes。當(dāng)然,這里說的是最大連接數(shù),對于HTTP請求本地資源來說,能夠支持的最大并發(fā)數(shù)量是worker_connections * worker_processes,而如果是HTTP作為反向代理來說,最大并發(fā)數(shù)量應(yīng)該是worker_connections * worker_processes/2。因為作為反向代理服務(wù)器,每個并發(fā)會建立與客戶端的連接和與后端服務(wù)的連接,會占用兩個連接


4.Nginx是做了哪些工作?

     Nginx本身做的工作實際很少,當(dāng)它接到一個HTTP請求時,它僅僅是通過查找配置文件將此次請求映射到一個location block,而此location中所配置的各個指令則會啟動不同的模塊去完成工作,因此模塊可以看做Nginx真正的勞動工作者。


    通常一個location中的指令會涉及一個handler模塊和多個filter模塊(當(dāng)然,多個location可以復(fù)用同一個模塊)。handler模塊負(fù)責(zé)處理請求,完成響應(yīng)內(nèi)容的生成,而filter模塊對響應(yīng)內(nèi)容進(jìn)行處理。 

    Nginx的模塊直接被編譯進(jìn)Nginx,因此屬于靜態(tài)編譯方式。啟動Nginx后,Nginx的模塊被自動加載,不像Apache,首先將模塊編譯為一個so文件,然后在配置文件中指定是否進(jìn)行加載。在解析配置文件時,Nginx的每個模塊都有可能去處理某個請求,但是同一個處理請求只能由一個模塊來完成。

到此,相信大家對“nginx有哪些特點”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI