Nginx是一個高性能的HTTP和反向代理服務(wù)器,也是一個IMAP/POP3/SMTP服務(wù)器

創(chuàng)新互聯(lián)IDC提供業(yè)務(wù):成都服務(wù)器托管,成都服務(wù)器租用,成都服務(wù)器托管,重慶服務(wù)器租用等四川省內(nèi)主機托管與主機租用業(yè)務(wù);數(shù)據(jù)中心含:雙線機房,BGP機房,電信機房,移動機房,聯(lián)通機房。
Nginx是一款輕量級的Web服務(wù)器/反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器 目前使用的最多的web服務(wù)器或者代理服務(wù)器,像淘寶、新浪、網(wǎng)易、迅雷等都在使用
優(yōu)點:
跨平臺、配置簡單
非阻塞、高并發(fā)連接:處理2-3萬并發(fā)連接數(shù),官方監(jiān)測能支持5萬并發(fā)
內(nèi)存消耗小:開啟10個nginx才占150M內(nèi)存 成本低廉:開源
內(nèi)置的健康檢查功能:如果有一個服務(wù)器宕機,會做一個健康檢查,再發(fā)送的請求就不會發(fā)送到宕機的服務(wù)器了。重新將請求提交到其他的節(jié)點上。
節(jié)省寬帶:支持GZIP壓縮,可以添加瀏覽器本地緩存
穩(wěn)定性高:宕機的概率非常小
master/worker結(jié)構(gòu):一個master進程,生成一個或者多個worker進程
接收用戶請求是異步的:瀏覽器將請求發(fā)送到nginx服務(wù)器,它先將用戶請求全部接收下來,再一次性發(fā)送給后端web服務(wù)器,極大減輕了web服務(wù)器的壓力
一邊接收web服務(wù)器的返回數(shù)據(jù),一邊發(fā)送給瀏覽器客戶端
網(wǎng)絡(luò)依賴性比較低,只要ping通就可以負載均衡
可以有多臺nginx服務(wù)器
事件驅(qū)動:通信機制采用epoll模型
得益于它的事件處理機制: 異步非阻塞事件處理機制:運用了epoll模型,提供了一個隊列,排隊解決
service nginx start之后,然后輸入#ps -ef|grep nginx,會發(fā)現(xiàn)Nginx有一個master進程和若干個worker進程,這些worker進程是平等的,都是被master fork過來的。在master里面,先建立需要listen的socket(listenfd),然后再fork出多個worker進程。當用戶進入nginx服務(wù)的時候,每個worker的listenfd變的可讀,并且這些worker會搶一個叫accept_mutex的東西,accept_mutex是互斥的,一個worker得到了,其他的worker就歇菜了。而搶到這個accept_mutex的worker就開始“讀取請求--解析請求--處理請求”,數(shù)據(jù)徹底返回客戶端之后(目標網(wǎng)頁出現(xiàn)在電腦屏幕上),這個事件就算徹底結(jié)束。
nginx用這個方法是底下的worker進程搶注用戶的要求,同時搭配“異步非阻塞”的方式,實現(xiàn)高并發(fā)量。
因為線程創(chuàng)建和上下文的切換非常消耗資源,線程占用內(nèi)存大,上下文切換占用cpu也很高,采用epoll模型避免了這個缺點
首先,nginx在啟動時,會解析配置文件,得到需要監(jiān)聽的端口與ip地址,然后在nginx的master進程里面
先初始化好這個監(jiān)控的socket(創(chuàng)建socket,設(shè)置addrreuse等選項,綁定到指定的ip地址端口,再listen)
然后再fork(一個現(xiàn)有進程可以調(diào)用fork函數(shù)創(chuàng)建一個新進程。由fork創(chuàng)建的新進程被稱為子進程 )出多個子進程出來
然后子進程會競爭accept新的連接。此時,客戶端就可以向nginx發(fā)起連接了。當客戶端與nginx進行三次握手,與nginx建立好一個連接后
此時,某一個子進程會accept成功,得到這個建立好的連接的socket,然后創(chuàng)建nginx對連接的封裝,即ngx_connection_t結(jié)構(gòu)體
接著,設(shè)置讀寫事件處理函數(shù)并添加讀寫事件來與客戶端進行數(shù)據(jù)的交換。最后,nginx或客戶端來主動關(guān)掉連接,到此,一個連接就壽終正寢了
一個位于客戶端和原始服務(wù)器(origin server)之間的服務(wù)器,為了從原始服務(wù)器取得內(nèi)容,客戶端向代理發(fā)送一個請求并指定目標(原始服務(wù)器)
然后代理向原始服務(wù)器轉(zhuǎn)交請求并將獲得的內(nèi)容返回給客戶端。客戶端才能使用正向代理
正向代理總結(jié)就一句話:代理端代理的是客戶端
反向代理(Reverse Proxy)方式是指以代理服務(wù)器來接受internet上的連接請求,然后將請求,發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器
并將從服務(wù)器上得到的結(jié)果返回給internet上請求連接的客戶端,此時代理服務(wù)器對外就表現(xiàn)為一個反向代理服務(wù)器
反向代理總結(jié)就一句話:代理端代理的是服務(wù)端
動態(tài)資源、靜態(tài)資源分離是讓動態(tài)網(wǎng)站里的動態(tài)網(wǎng)頁根據(jù)一定規(guī)則把不變的資源和經(jīng)常變的資源區(qū)分開來,動靜資源做好了拆分以后
我們就可以根據(jù)靜態(tài)資源的特點將其做緩存操作,這就是網(wǎng)站靜態(tài)化處理的核心思路
動態(tài)資源、靜態(tài)資源分離簡單的概括是:動態(tài)文件與靜態(tài)文件的分離
在我們的軟件開發(fā)中,有些請求是需要后臺處理的(如:.jsp,.do等等),有些請求是不需要經(jīng)過后臺處理的(如:css、html、jpg、js等等文件)
這些不需要經(jīng)過后臺處理的文件稱為靜態(tài)文件,否則動態(tài)文件。因此我們后臺處理忽略靜態(tài)文件。這會有人又說那我后臺忽略靜態(tài)文件不就完了嗎
當然這是可以的,但是這樣后臺的請求次數(shù)就明顯增多了。在我們對資源的響應(yīng)速度有要求的時候,我們應(yīng)該使用這種動靜分離的策略去解決
動、靜分離將網(wǎng)站靜態(tài)資源(HTML,JavaScript,CSS,img等文件)與后臺應(yīng)用分開部署,提高用戶訪問靜態(tài)代碼的速度,降低對后臺應(yīng)用訪問
這里我們將靜態(tài)資源放到nginx中,動態(tài)資源轉(zhuǎn)發(fā)到tomcat服務(wù)器中
負載均衡即是代理服務(wù)器將接收的請求均衡的分發(fā)到各服務(wù)器中
負載均衡主要解決網(wǎng)絡(luò)擁塞問題,提高服務(wù)器響應(yīng)速度,服務(wù)就近提供,達到更好的訪問質(zhì)量,減少后臺服務(wù)器大并發(fā)壓力。
CPU太弱
worker數(shù)量比CPU核心數(shù)大太多,導(dǎo)致頻繁上下文切換
連接數(shù),包括最大連接數(shù),和當前是否由太多連接占著茅坑不拉屎
解決方案
CPU affinity
提高連接數(shù)
正確設(shè)置worker數(shù)
分享標題:面試官常問的Nginx的那幾個問題?
路徑分享:http://chinadenli.net/article38/jgjepp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、用戶體驗、網(wǎng)站維護、動態(tài)網(wǎng)站、微信公眾號、手機網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)