日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Nginx >内容正文

Nginx

Nginx面试题及基础

發(fā)布時(shí)間:2023/12/10 Nginx 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Nginx面试题及基础 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Nginx的作用

?

這個(gè)問(wèn)題是入門(mén)級(jí)知識(shí)點(diǎn),討論Nginx的用處。我覺(jué)得只要幾個(gè)重要的點(diǎn)都回答到位就可以了,可以考慮這樣的一個(gè)回答:Nginx是一個(gè)高性能web服務(wù)器和反向代理服務(wù)器,也是一個(gè)IMAP/POP3/SMTP服務(wù)器。不僅可以實(shí)現(xiàn)負(fù)載均衡,還可以做接口限流,緩存等功能。

?

使用Nginx的優(yōu)勢(shì)點(diǎn)

  • Nginx?由于使用了epollkqueue網(wǎng)路I/O模型,在實(shí)際生產(chǎn)環(huán)境能夠支撐3萬(wàn)左右并發(fā)連接。

  • Nginx?內(nèi)存消耗低。

  • Nginx?跨平臺(tái),而且配置相對(duì)來(lái)說(shuō)難度較低。

  • Nginx?內(nèi)置健康檢查功能,如果負(fù)載均衡其中一個(gè)服務(wù)器宕機(jī)了,則接受到的請(qǐng)求會(huì)發(fā)送給其他服務(wù)器去處理。

  • 支持Gzip壓縮,可以添加瀏覽器本地緩存的Header頭。

  • Nginx?支持熱部署,可以在不間斷服務(wù)的情況下平滑進(jìn)行配置的更改。

  • Nginx?異步接收用戶請(qǐng)求,減輕了Web服務(wù)器的壓力。

  • ?

    Nginx如何實(shí)現(xiàn)高并發(fā)

    這個(gè)問(wèn)題出來(lái)可能懂一點(diǎn)Nginx的朋友們都是浮現(xiàn)出5個(gè)字異步非阻塞。實(shí)際上Nginx就是異步非阻塞,使用了epoll模型并對(duì)底層代碼進(jìn)行大幅度優(yōu)化。之前其實(shí)有講過(guò)Nginx是采用1個(gè)master進(jìn)程,多個(gè)worker進(jìn)程的模式,每次接收到一個(gè)請(qǐng)求,master會(huì)將請(qǐng)求按照一定策略分發(fā)給一個(gè)worker進(jìn)程去進(jìn)行處理請(qǐng)求。worker進(jìn)程數(shù)一般設(shè)置為和CPU核心數(shù)一致,異步非阻塞模式就會(huì)使得worker線程在等待請(qǐng)求callback的空閑時(shí)間可以接收處理新的請(qǐng)求,當(dāng)接收到舊請(qǐng)求的callback時(shí)再回去繼續(xù)處理該請(qǐng)求,這樣就完成了少數(shù)幾個(gè)worker進(jìn)程卻實(shí)現(xiàn)了高并發(fā)的問(wèn)題。

    ?

    Nginx為何不使用多線程?

    眾所周知,沒(méi)創(chuàng)建一個(gè)新的線程,都需要為其分配cpu和內(nèi)存。當(dāng)然,創(chuàng)建進(jìn)程也是一樣,但是由于線程過(guò)多會(huì)導(dǎo)致內(nèi)存消耗過(guò)多。所以Nginx采用單線程異步處理用戶請(qǐng)求,這樣不需要不斷地為新的線程分配cpu和內(nèi)存,減輕服務(wù)器內(nèi)存消耗,所以使得Nginx性能方面更為高效。

    ?

    Nginx如何處理請(qǐng)求?

    Nginx啟動(dòng)后,首先進(jìn)行配置文件的解析,解析成功會(huì)得到虛擬服務(wù)器的ip和端口號(hào),在主進(jìn)程master進(jìn)程中創(chuàng)建socket,對(duì)addrreuse選項(xiàng)進(jìn)行設(shè)置,并將socket綁定到對(duì)應(yīng)的ip地址和端口并進(jìn)行監(jiān)聽(tīng)。然后創(chuàng)建子進(jìn)程worker進(jìn)程,當(dāng)客戶端和Nginx進(jìn)行三次握手,則可以創(chuàng)建成功與Nginx的連接。當(dāng)有新的請(qǐng)求進(jìn)入時(shí),空閑的worker進(jìn)程會(huì)競(jìng)爭(zhēng),當(dāng)某一個(gè)worker進(jìn)程競(jìng)爭(zhēng)成功,則會(huì)得到這個(gè)已經(jīng)成功建立連接的socket,然后創(chuàng)建ngx_connection_t結(jié)構(gòu)體,接下來(lái)設(shè)置讀寫(xiě)事件處理函數(shù)并添加讀寫(xiě)事件用來(lái)與客戶端進(jìn)行數(shù)據(jù)交換。當(dāng)請(qǐng)求結(jié)束Nginx或者客戶端主動(dòng)關(guān)閉連接,此時(shí)一個(gè)請(qǐng)求處理完畢。

    ?

    為什么要做動(dòng)靜分離?

    在日常開(kāi)發(fā)中,前端請(qǐng)求靜態(tài)文件比如圖片資源是不需要經(jīng)過(guò)后端服務(wù)器的,但是調(diào)用API這些類型的就需要后端進(jìn)行處理請(qǐng)求,所以為了提高對(duì)資源文件的響應(yīng)速度,我們應(yīng)該使用動(dòng)靜分離的策略去做架構(gòu)。我們可以將靜態(tài)文件放到Nginx中,將動(dòng)態(tài)資源的請(qǐng)求轉(zhuǎn)發(fā)到后端服務(wù)器去進(jìn)行進(jìn)一步的處理。

    ?

    Nginx負(fù)載均衡的幾種常用方式?

    輪詢方式:默認(rèn)情況下Nginx使用輪詢的方式實(shí)現(xiàn)負(fù)載均衡,每個(gè)新的請(qǐng)求按照時(shí)間順序逐一分配到不同的后端服務(wù)器去進(jìn)行處理,如果后端服務(wù)器宕機(jī),則Nginx的健康檢查功能會(huì)將這個(gè)后端服務(wù)器剔除。但是輪詢方式是顯而易見(jiàn)的:可靠性低而且負(fù)載分配不平衡,所以輪詢方式更適用于圖片服務(wù)器或者靜態(tài)資源服務(wù)器。

    weight:可以對(duì)不同的后端服務(wù)器設(shè)置不同的權(quán)重比例,這樣可以改變不同后端服務(wù)器處理請(qǐng)求的比例。可以給性能更優(yōu)的后端服務(wù)器配置更高的權(quán)重。

    ip_hash:這種方式會(huì)根據(jù)請(qǐng)求的ip地址的hash結(jié)果分配后端服務(wù)器來(lái)處理請(qǐng)求,這樣每個(gè)用戶發(fā)起的請(qǐng)求固定只會(huì)由同一個(gè)后端服務(wù)器處理,這樣可以解決session問(wèn)題。

    fail:這種方式有點(diǎn)類似于輪詢方式,主要是根據(jù)后端服務(wù)器的響應(yīng)時(shí)間來(lái)分配請(qǐng)求,響應(yīng)時(shí)間短的后端服務(wù)器優(yōu)先分配請(qǐng)求。

    url_hash:這種方式是按照請(qǐng)求urlhash結(jié)果來(lái)將不同請(qǐng)求分配到不同服務(wù)器,使用這種方式每個(gè)url的請(qǐng)求都會(huì)由同一個(gè)后端服務(wù)器進(jìn)行處理,后端服務(wù)器為緩存時(shí)效率會(huì)更高。

    ?

    Session不同步如何處理?

    上面其實(shí)提過(guò)了解決方案,負(fù)載均衡方式使用ip_hash方式,如果用戶已經(jīng)訪問(wèn)過(guò)某個(gè)后端器,則再次訪問(wèn)時(shí)會(huì)將這個(gè)請(qǐng)求的ip地址進(jìn)行哈希算法轉(zhuǎn)換,自動(dòng)定位到該服務(wù)器。當(dāng)然也可以通過(guò)redis緩存用戶session,一樣可以處理session不同步的問(wèn)題。

    ?

    Nginx常用優(yōu)化配置

    1. 調(diào)整worker_processes指定Nginx需要?jiǎng)?chuàng)建的worker進(jìn)程數(shù)量,剛才有提到worker進(jìn)程數(shù)一般設(shè)置為和CPU核心數(shù)一致。

    2. 調(diào)整worker_connections設(shè)置Nginx最多可以同時(shí)服務(wù)的客戶端數(shù)。結(jié)合worker_processes配置可以獲得每秒可以服務(wù)的最大客戶端數(shù)。

    3. 啟動(dòng)gzip壓縮,可以對(duì)文件大小進(jìn)行壓縮,減少了客戶端http的傳輸帶寬,可以大幅度提高頁(yè)面的加載速度。

    4. 啟用緩存,如果請(qǐng)求靜態(tài)資源,啟用緩存是可以大幅度提升性能的。

    ?

    Nginx正向代理

    正向代理也是大家最常接觸的到的代理模式,那究竟什么是正向代理呢?我們都知道Google在國(guó)內(nèi)是無(wú)法正常訪問(wèn)的,但是某些時(shí)候我們由于技術(shù)問(wèn)題需要去訪問(wèn)Google時(shí),我們會(huì)先找到一個(gè)可以訪問(wèn)Google的代理服務(wù)器,我們將請(qǐng)求發(fā)送到代理服務(wù)器,代理服務(wù)器去訪問(wèn)Google,然后將訪問(wèn)到的數(shù)據(jù)返回給我們,這樣的過(guò)程就是正向代理。正向代理最大的特點(diǎn)是客戶端需要明確知道要訪問(wèn)的服務(wù)器地址,Google服務(wù)器只清楚請(qǐng)求來(lái)自哪個(gè)代理服務(wù)器,而不清楚來(lái)自哪個(gè)具體的客戶端,正向代理可以隱藏真實(shí)客戶端的具體信息。

    ?

    ????????客戶端必須設(shè)置正向代理服務(wù)器,而且需要知道正向代理服務(wù)器的IP地址以及代理程序的端口。一句話來(lái)概括就是正向代理代理的是客戶端,是一個(gè)位于客戶端和Google服務(wù)器之間的服務(wù)器,為了從Google服務(wù)器取得數(shù)據(jù),客戶端向代理服務(wù)器發(fā)送一個(gè)請(qǐng)求并指定目標(biāo)(Google服務(wù)器),然后代理向原始服務(wù)器轉(zhuǎn)交請(qǐng)求并將獲得的數(shù)據(jù)返回給客戶端。總結(jié)正向代理的幾個(gè)作用:

    訪問(wèn)國(guó)外無(wú)法訪問(wèn)的網(wǎng)站做緩存,加速訪問(wèn)資源對(duì)客戶端訪問(wèn)授權(quán),上網(wǎng)進(jìn)行認(rèn)證代理可以記錄用戶訪問(wèn)記錄(上網(wǎng)行為管理),對(duì)外隱藏用戶信息


    Nginx反向代理

    多個(gè)客戶端給服務(wù)器發(fā)送的請(qǐng)求,Nginx服務(wù)器接收到請(qǐng)求以后,按照一定的規(guī)則轉(zhuǎn)發(fā)到不同的服務(wù)器進(jìn)行業(yè)務(wù)邏輯處理,也就是我們剛才講到的負(fù)載均衡的策略。此時(shí)請(qǐng)求來(lái)源于哪個(gè)客戶端是確定的,但是請(qǐng)求由哪臺(tái)服務(wù)器處理的并不明確,Nginx扮演的就是一個(gè)反向代理角色。可以這樣來(lái)理解,反向代理對(duì)外都是透明的,訪問(wèn)者并不知道自己訪問(wèn)的是一個(gè)代理。反向代理代理的是服務(wù)端,主要用于服務(wù)器集群分布式部署的情況下,反向代理隱藏了服務(wù)器的信息??偨Y(jié)下反向代理的兩個(gè)作用:

    ?

    保證內(nèi)網(wǎng)的安全,通常將反向代理作為公網(wǎng)訪問(wèn)地址,Web服務(wù)器是內(nèi)網(wǎng)
    負(fù)載均衡,通過(guò)反向代理服務(wù)器來(lái)優(yōu)化網(wǎng)站的負(fù)載

    ?

    Nginx中正向代理與反向代理的區(qū)別

    在正向代理中,隱藏了請(qǐng)求來(lái)源的客戶端信息;
    在反向代理中,隱藏了請(qǐng)求具體處理的服務(wù)端信息

    ?

    更多Nginx面試題關(guān)注+點(diǎn)贊,私信我獲取全文!

    總結(jié)

    以上是生活随笔為你收集整理的Nginx面试题及基础的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。