沈陽建設(shè)銀行網(wǎng)站首頁上海網(wǎng)站建設(shè)公司排名
NGINX是什么?
NGINX是一款由俄羅斯人伊戈?duì)枴べ愃饕蚴褂肅語言開發(fā)的、支持熱部署的、輕量級的WEB服務(wù)器/反向代理服務(wù)器/電子郵件代理服務(wù)器,因?yàn)檎加脙?nèi)存較少,啟動極快,高并發(fā)能力強(qiáng),所以在互聯(lián)網(wǎng)項(xiàng)目中廣泛應(yīng)用??梢栽?UNIX、GNU/Linux、BSD、Mac OS X、Solaris,以及 Microsoft Windows 等操作系統(tǒng)中運(yùn)行。
- 官網(wǎng):NGINX官方網(wǎng)站
- 中文:NGINX中文網(wǎng)站
NGINX可以干什么?
NGINX可以作為靜態(tài)頁面的WEB服務(wù)器,同時(shí)還支持CGI協(xié)議的動態(tài)語言,比如Perl、PHP等。NGINX專為性能優(yōu)化而開發(fā),性能是其最重要的考量,實(shí)現(xiàn)上非常注重效率,能經(jīng)受高負(fù)載的考驗(yàn),NGINX在官方測試中,能夠支持五萬個平行鏈接,而在實(shí)際的運(yùn)作中,可以支持二萬至四萬個平行鏈接,總結(jié)如下:
- 靜態(tài)頁面的WEB服務(wù)器
- 動靜分離
- 客戶端的正向代理
- 服務(wù)端的反向代理
- 服務(wù)端的負(fù)載均衡
什么是簡單請求?
請求同時(shí)滿足以下兩個條件,稱為簡單請求,否則為復(fù)雜請求
- 請求方式是HEAD、GET、POST 三種之一;
- 請求頭包含但不超過這五個字段:Accept,Accept-Language,content-Language,Last-Event-ID,Content-Type。其中Content-Type的值只能是application/x-www-form-urlencoded,text/plain,multipart/form-data 三種之一。
什么是復(fù)雜請求?
凡是不簡單請求的,都屬于復(fù)雜請求,常見的復(fù)雜請求:
- 請求方法是 PUT 或 DELETE的請求;
- 請求頭的Content-Type 值為application/json的請求
什么是動靜分離?
動靜分離,其實(shí)就是使用NGINX的特性,將客戶端發(fā)來的請求分為動態(tài)請求和靜態(tài)請求。靜態(tài)請求直接從NGINX服務(wù)器所設(shè)定的根目錄去獲取對應(yīng)的資源,動態(tài)請求則轉(zhuǎn)發(fā)給真實(shí)的后端服務(wù)去處理。這樣不僅能夠減輕應(yīng)用服務(wù)器的壓力,將后臺API接口服務(wù)化,還能將前后端代碼分開并行開發(fā)和部署。一般常見于SPRINGBOOT + VUE的項(xiàng)目中。
那么,如何配置呢?
什么是正向代理?
正向代理隱藏了真實(shí)的客戶端,VPN其實(shí)就是一個正向代理工具。當(dāng)使用VPN訪問墻外網(wǎng)站是,VPN將訪問請求,代理到一個可以訪問該網(wǎng)站的代理服務(wù)器上,代理服務(wù)器把墻外服務(wù)器上獲取的請求結(jié)果,再轉(zhuǎn)發(fā)給客戶端,這就是正向代理。
什么是反向代理?
反向代理隱藏了真實(shí)的服務(wù)端,當(dāng)我們訪問百度時(shí),其實(shí)內(nèi)部會進(jìn)行一個轉(zhuǎn)發(fā),將請求代理到內(nèi)網(wǎng)去,但是具體是哪一臺,我們不知道,我們也不需要知道,這就是所謂的反向代理,即反向代理“代理”的是服務(wù)器端,且這個過程對于客戶端而言是透明的。
負(fù)載均衡采用的就是反向代理。
什么是負(fù)載均衡?
在互聯(lián)網(wǎng)項(xiàng)目中,當(dāng)遇到請求爆發(fā)式增長的情況時(shí),單個服務(wù)器無法處理客戶端請求,需要使用多個服務(wù)器來分?jǐn)倝毫?#xff0c;這就是負(fù)載均衡的初衷。
NGINX是如何工作的?
NGINX采用MASTER-WORKER的模式,NGINX在啟動后,會以守候進(jìn)程的方式在后臺運(yùn)行,啟動后包含一個MASTER進(jìn)程和多個WORKER進(jìn)程,WORKER進(jìn)程以非root用戶運(yùn)行,當(dāng)然也可以在配置文件中配置運(yùn)行 WORKER進(jìn)程的用戶。
WORKER進(jìn)程的個數(shù)由配置文件決定,一般和CPU個數(shù)相關(guān)(有利于進(jìn)程切換),配置幾個就有幾個WORKER進(jìn)程。
那么,如何配置WORKER的用戶以及進(jìn)程數(shù)呢?
NGINX的整體架構(gòu)
- MASTER進(jìn)程:不處理請求,主要負(fù)責(zé)加載和分析配置文件、分配請求給WORKER節(jié)點(diǎn)、管理WORKER進(jìn)程、平滑升級、服務(wù)重啟、熱加載、熱部署等;
- WORKER進(jìn)程:接收客戶端請求、將請求一次送入各模塊過濾、I/O 調(diào)用、數(shù)據(jù)緩存、發(fā)送響應(yīng);
- 緩存相關(guān)進(jìn)程:包括cache loader(緩存索引重建) 與 cache manager( 緩存索引管理) 兩部分:
- Cache loader ,在NGINX服務(wù)啟動后由主進(jìn)程生成,根據(jù)本地磁盤上緩存建立索引元數(shù)據(jù)庫后退出;
- Cache manager ,在元數(shù)據(jù)更新完成后,對元數(shù)據(jù)是否過期做出判斷。
NGINX是如何熱加載的?
所謂熱部署,就是配置文件nginx.conf修改后,不需要停止NGINX服務(wù),不需要中斷請求,就能讓配置文件生效!但是,NGINX必須重新加載一下nginx.conf,否則修改不生效。
使用如下命令,重新加載配置文件:
nginx -s reload
當(dāng)配置文件nginx.conf修改后,需要執(zhí)行重新加載配置的指令,此時(shí)NGINX接收到熱加載的信號后,會重新生成新的WORKER進(jìn)程,當(dāng)然也是以新的配置進(jìn)行請求處理的,而且新的請求一定會交給新的WORKER進(jìn)程。當(dāng)老的WORKER進(jìn)程處理完請求后,進(jìn)程會被殺死。