反向代理服務(wù)器“Nginx”是什么
發(fā)布時(shí)間:2019-10-10 點(diǎn)擊數(shù):1555
現(xiàn)在代理服務(wù)器的用戶是越來越多了,今天我們就來談?wù)撘幌?/span>反向代理服務(wù)器“Nginx”,下面我們來深入了解一下。
首先Nginx 不是web服務(wù)器 ,它最主要的功能有三個 “反向代理”,“負(fù)載均衡”,“動靜分離”,接下來我們會主要圍繞這三個功能講解。說道服務(wù)器,肯定有小伙伴能想到Tomcat,那么Nginx和Tomcat是什么關(guān)系? Tomcat服務(wù)器不是web服務(wù)器,Nginx是代理服務(wù)器,兩者功能不同,而且Nginx可以作為靜態(tài)頁面的web服務(wù)器,同時(shí)還支持CGI協(xié) 議的動態(tài)語言,比如perl、php等。但是不支持java。 Java程序只能通過與tomcat配合完成。所以Nginx和Tomcat算是合作關(guān)系。
下面我們主要講Nginx的三大功能:
正向代理即代理客戶端,以圖為例,我們要訪問Google,因?yàn)橛蟹阑饓Φ拇嬖?,我們是不能訪問到的,但是我們可以通過代理服務(wù)器訪問。這種方式就是正向代理。
那什么叫反向代理呢?
如果我們有一個電商網(wǎng)站,訪問并發(fā)量特別大,那么只用一臺服務(wù)器處理請求時(shí)遠(yuǎn)遠(yuǎn)不夠的,所以就要用到Nginx ,代理我們的服務(wù)器,把請求分別發(fā)到幾臺服務(wù)器處理。這就是所謂的反向代理。
Nginx可以將我們的靜態(tài)資源存在在一個文件系統(tǒng)中,我們需要靜態(tài)資源的時(shí)候,只需要將靜態(tài)資源的url填上,我們改變靜態(tài)資源的時(shí)候,也只需改變文件系統(tǒng)中的靜態(tài)資源,不需要改動我們的代碼。
講了Nginx的三大功能,我么再接著講講Nginx的底層原理。
Nginx采用了master-workers的機(jī)制:
首先,對于每個worker進(jìn)程來說,獨(dú)立的進(jìn)程,不需要加鎖, 所以省掉了鎖帶來的開銷,同時(shí)在編程以及問題查找時(shí),也會方 便很多。 其次,采用獨(dú)立的進(jìn)程,可以讓互相之間不會影響,一個進(jìn)程 退出后,其它進(jìn)程還在工作,服務(wù)不會中斷,master進(jìn)程則很快啟 動新的worker進(jìn)程。當(dāng)然,worker進(jìn)程的異常退出,肯定是程序有 bug了,異常退出,會導(dǎo)致當(dāng)前worker上的所有請求失敗,不過不 會影響到所有請求,所以降低了風(fēng)險(xiǎn)。
首先我們先了解一下Nginx是什么。
首先Nginx 不是web服務(wù)器 ,它最主要的功能有三個 “反向代理”,“負(fù)載均衡”,“動靜分離”,接下來我們會主要圍繞這三個功能講解。說道服務(wù)器,肯定有小伙伴能想到Tomcat,那么Nginx和Tomcat是什么關(guān)系? Tomcat服務(wù)器不是web服務(wù)器,Nginx是代理服務(wù)器,兩者功能不同,而且Nginx可以作為靜態(tài)頁面的web服務(wù)器,同時(shí)還支持CGI協(xié) 議的動態(tài)語言,比如perl、php等。但是不支持java。 Java程序只能通過與tomcat配合完成。所以Nginx和Tomcat算是合作關(guān)系。
下面我們主要講Nginx的三大功能:
一、反向代理(即代理服務(wù)端)
說道反向代理,那么我么先看什么是正向代理。正向代理即代理客戶端,以圖為例,我們要訪問Google,因?yàn)橛蟹阑饓Φ拇嬖?,我們是不能訪問到的,但是我們可以通過代理服務(wù)器訪問。這種方式就是正向代理。
那什么叫反向代理呢?
如果我們有一個電商網(wǎng)站,訪問并發(fā)量特別大,那么只用一臺服務(wù)器處理請求時(shí)遠(yuǎn)遠(yuǎn)不夠的,所以就要用到Nginx ,代理我們的服務(wù)器,把請求分別發(fā)到幾臺服務(wù)器處理。這就是所謂的反向代理。
二、負(fù)載均衡
我們的Nginx 會將請求發(fā)到幾臺服務(wù)器,那么Nginx 對應(yīng)幾臺服務(wù)器,怎么給這幾臺服務(wù)器分配請求呢,這就要提到負(fù)載均衡了,為了保證每臺服務(wù)器都正常運(yùn)轉(zhuǎn),我們要做負(fù)載均衡,負(fù)載均衡有很多種策略,Nginx 選擇的是輪詢,即按照順序分配,分配給服務(wù)器1,分配給服務(wù)器2,分配給服務(wù)器3,分配給服務(wù)器1,以此類推。三、動靜分離
大家都知道我們編寫程序要盡可能的解耦,假設(shè)我們的程序中靜態(tài)資源域與代碼都耦合在一起,我們每改一個圖片,一個樣式都需要改代碼,這時(shí)我們的Nginx 就派上了用場,Nginx 可以 將靜態(tài)資源與動態(tài)資源分離。Nginx可以將我們的靜態(tài)資源存在在一個文件系統(tǒng)中,我們需要靜態(tài)資源的時(shí)候,只需要將靜態(tài)資源的url填上,我們改變靜態(tài)資源的時(shí)候,也只需改變文件系統(tǒng)中的靜態(tài)資源,不需要改動我們的代碼。
講了Nginx的三大功能,我么再接著講講Nginx的底層原理。
Nginx采用了master-workers的機(jī)制:
首先,對于每個worker進(jìn)程來說,獨(dú)立的進(jìn)程,不需要加鎖, 所以省掉了鎖帶來的開銷,同時(shí)在編程以及問題查找時(shí),也會方 便很多。 其次,采用獨(dú)立的進(jìn)程,可以讓互相之間不會影響,一個進(jìn)程 退出后,其它進(jìn)程還在工作,服務(wù)不會中斷,master進(jìn)程則很快啟 動新的worker進(jìn)程。當(dāng)然,worker進(jìn)程的異常退出,肯定是程序有 bug了,異常退出,會導(dǎo)致當(dāng)前worker上的所有請求失敗,不過不 會影響到所有請求,所以降低了風(fēng)險(xiǎn)。
當(dāng)請求過來時(shí),會通知到我們的master,master會通知worker,所有worker會爭搶這個請求,所以Nginx效率很高。那么我們要設(shè)置多少個worker, Nginx 同redis類似都采用了io多路復(fù)用機(jī)制,每個 worker都是一個獨(dú)立的進(jìn)程,但每個進(jìn)程里只有一個主線 程,通過異步非阻塞的方式來處理請求, 即使是千上萬個 請求也不在話下。每個worker的線程可以把一個cpu的性 能發(fā)揮到極致。 所以worker數(shù)和服務(wù)器的cpu數(shù)相等是最為適宜的。設(shè) 少了會浪費(fèi)cpu,設(shè)多了會造成cpu頻繁切換上下文帶來的損耗。
想必看完大家對于代理服務(wù)器有了一個新的認(rèn)識,以上相信有全網(wǎng)數(shù)據(jù)小編整理提供,全網(wǎng)數(shù)據(jù)專業(yè)提供深圳服務(wù)器租用,深圳服務(wù)器托管,深圳主機(jī)租用,寬帶租用等,歡迎咨詢客服了詳情。