'深入淺出反向代理服務器“Nginx”'

Nginx Tomcat 中央處理器 Java PHP Redis 閒水雜談 2019-08-30
"

首先我們先了解一下Nginx是什麼

Nginx ("engine x") 是一個高性能的HTTP和反向代理 服務器,特點是佔有內存少,併發能力強,事實上nginx的 併發能力確實在同類型的網頁服務器中表現較好,中國 大陸使用nginx網站用戶有:百度、京東、新浪、網易、 騰訊、淘寶等。

首先Nginx 不是web服務器 ,它最主要的功能有三個 “反向代理”,“負載均衡”,“動靜分離”,接下來我們會主要圍繞這三個功能講解。說道服務器,肯定有小夥伴能想到Tomcat,那麼Nginx和Tomcat是什麼關係? Tomcat服務器不是web服務器,Nginx是代理服務器,兩者功能不同,而且Nginx可以作為靜態頁面的web服務器,同時還支持CGI協 議的動態語言,比如perl、php等。但是不支持java。 Java程序只能通過與tomcat配合完成。所以Nginx和Tomcat算是合作關係。

下面我們主要講Nginx的三大功能:

一 反向代理(即代理服務端)

說道反向代理,那麼我麼先看什麼是正向代理。

"

首先我們先了解一下Nginx是什麼

Nginx ("engine x") 是一個高性能的HTTP和反向代理 服務器,特點是佔有內存少,併發能力強,事實上nginx的 併發能力確實在同類型的網頁服務器中表現較好,中國 大陸使用nginx網站用戶有:百度、京東、新浪、網易、 騰訊、淘寶等。

首先Nginx 不是web服務器 ,它最主要的功能有三個 “反向代理”,“負載均衡”,“動靜分離”,接下來我們會主要圍繞這三個功能講解。說道服務器,肯定有小夥伴能想到Tomcat,那麼Nginx和Tomcat是什麼關係? Tomcat服務器不是web服務器,Nginx是代理服務器,兩者功能不同,而且Nginx可以作為靜態頁面的web服務器,同時還支持CGI協 議的動態語言,比如perl、php等。但是不支持java。 Java程序只能通過與tomcat配合完成。所以Nginx和Tomcat算是合作關係。

下面我們主要講Nginx的三大功能:

一 反向代理(即代理服務端)

說道反向代理,那麼我麼先看什麼是正向代理。

深入淺出反向代理服務器“Nginx”

正向代理即代理客戶端,以圖為例,我們要訪問Google,因為有防火牆的存在,我們是不能訪問到的,但是我們可以通過代理服務器訪問。這種方式就是正向代理。

那什麼叫反向代理呢

"

首先我們先了解一下Nginx是什麼

Nginx ("engine x") 是一個高性能的HTTP和反向代理 服務器,特點是佔有內存少,併發能力強,事實上nginx的 併發能力確實在同類型的網頁服務器中表現較好,中國 大陸使用nginx網站用戶有:百度、京東、新浪、網易、 騰訊、淘寶等。

首先Nginx 不是web服務器 ,它最主要的功能有三個 “反向代理”,“負載均衡”,“動靜分離”,接下來我們會主要圍繞這三個功能講解。說道服務器,肯定有小夥伴能想到Tomcat,那麼Nginx和Tomcat是什麼關係? Tomcat服務器不是web服務器,Nginx是代理服務器,兩者功能不同,而且Nginx可以作為靜態頁面的web服務器,同時還支持CGI協 議的動態語言,比如perl、php等。但是不支持java。 Java程序只能通過與tomcat配合完成。所以Nginx和Tomcat算是合作關係。

下面我們主要講Nginx的三大功能:

一 反向代理(即代理服務端)

說道反向代理,那麼我麼先看什麼是正向代理。

深入淺出反向代理服務器“Nginx”

正向代理即代理客戶端,以圖為例,我們要訪問Google,因為有防火牆的存在,我們是不能訪問到的,但是我們可以通過代理服務器訪問。這種方式就是正向代理。

那什麼叫反向代理呢

深入淺出反向代理服務器“Nginx”

如果我們有一個電商網站,訪問併發量特別大,那麼只用一臺服務器處理請求時遠遠不夠的,所以就要用到Nginx ,代理我們的服務器,把請求分別發到幾臺服務器處理。這就是所謂的反向代理。

二 負載均衡

我們的Nginx 會將請求發到幾臺服務器,那麼Nginx 對應幾臺服務器,怎麼給這幾臺服務器分配請求呢,這就要提到負載均衡了,為了保證每臺服務器都正常運轉,我們要做負載均衡,負載均衡有很多種策略,Nginx 選擇的是輪詢,即按照順序分配,分配給服務器1,分配給服務器2,分配給服務器3,分配給服務器1,以此類推。

三 動靜分離

大家都知道我們編寫程序要儘可能的解耦,假設我們的程序中靜態資源域與代碼都耦合在一起,我們每改一個圖片,一個樣式都需要改代碼,這時我們的Nginx 就派上了用場,Nginx 可以 將靜態資源與動態資源分離。

"

首先我們先了解一下Nginx是什麼

Nginx ("engine x") 是一個高性能的HTTP和反向代理 服務器,特點是佔有內存少,併發能力強,事實上nginx的 併發能力確實在同類型的網頁服務器中表現較好,中國 大陸使用nginx網站用戶有:百度、京東、新浪、網易、 騰訊、淘寶等。

首先Nginx 不是web服務器 ,它最主要的功能有三個 “反向代理”,“負載均衡”,“動靜分離”,接下來我們會主要圍繞這三個功能講解。說道服務器,肯定有小夥伴能想到Tomcat,那麼Nginx和Tomcat是什麼關係? Tomcat服務器不是web服務器,Nginx是代理服務器,兩者功能不同,而且Nginx可以作為靜態頁面的web服務器,同時還支持CGI協 議的動態語言,比如perl、php等。但是不支持java。 Java程序只能通過與tomcat配合完成。所以Nginx和Tomcat算是合作關係。

下面我們主要講Nginx的三大功能:

一 反向代理(即代理服務端)

說道反向代理,那麼我麼先看什麼是正向代理。

深入淺出反向代理服務器“Nginx”

正向代理即代理客戶端,以圖為例,我們要訪問Google,因為有防火牆的存在,我們是不能訪問到的,但是我們可以通過代理服務器訪問。這種方式就是正向代理。

那什麼叫反向代理呢

深入淺出反向代理服務器“Nginx”

如果我們有一個電商網站,訪問併發量特別大,那麼只用一臺服務器處理請求時遠遠不夠的,所以就要用到Nginx ,代理我們的服務器,把請求分別發到幾臺服務器處理。這就是所謂的反向代理。

二 負載均衡

我們的Nginx 會將請求發到幾臺服務器,那麼Nginx 對應幾臺服務器,怎麼給這幾臺服務器分配請求呢,這就要提到負載均衡了,為了保證每臺服務器都正常運轉,我們要做負載均衡,負載均衡有很多種策略,Nginx 選擇的是輪詢,即按照順序分配,分配給服務器1,分配給服務器2,分配給服務器3,分配給服務器1,以此類推。

三 動靜分離

大家都知道我們編寫程序要儘可能的解耦,假設我們的程序中靜態資源域與代碼都耦合在一起,我們每改一個圖片,一個樣式都需要改代碼,這時我們的Nginx 就派上了用場,Nginx 可以 將靜態資源與動態資源分離。

深入淺出反向代理服務器“Nginx”

Nginx可以將我們的靜態資源存在在一個文件系統中,我們需要靜態資源的時候,只需要將靜態資源的url填上,我們改變靜態資源的時候,也只需改變文件系統中的靜態資源,不需要改動我們的代碼。

講了Nginx的三大功能,我麼再接著講講Nginx的底層原理

Nginx採用了master-workers的機制

"

首先我們先了解一下Nginx是什麼

Nginx ("engine x") 是一個高性能的HTTP和反向代理 服務器,特點是佔有內存少,併發能力強,事實上nginx的 併發能力確實在同類型的網頁服務器中表現較好,中國 大陸使用nginx網站用戶有:百度、京東、新浪、網易、 騰訊、淘寶等。

首先Nginx 不是web服務器 ,它最主要的功能有三個 “反向代理”,“負載均衡”,“動靜分離”,接下來我們會主要圍繞這三個功能講解。說道服務器,肯定有小夥伴能想到Tomcat,那麼Nginx和Tomcat是什麼關係? Tomcat服務器不是web服務器,Nginx是代理服務器,兩者功能不同,而且Nginx可以作為靜態頁面的web服務器,同時還支持CGI協 議的動態語言,比如perl、php等。但是不支持java。 Java程序只能通過與tomcat配合完成。所以Nginx和Tomcat算是合作關係。

下面我們主要講Nginx的三大功能:

一 反向代理(即代理服務端)

說道反向代理,那麼我麼先看什麼是正向代理。

深入淺出反向代理服務器“Nginx”

正向代理即代理客戶端,以圖為例,我們要訪問Google,因為有防火牆的存在,我們是不能訪問到的,但是我們可以通過代理服務器訪問。這種方式就是正向代理。

那什麼叫反向代理呢

深入淺出反向代理服務器“Nginx”

如果我們有一個電商網站,訪問併發量特別大,那麼只用一臺服務器處理請求時遠遠不夠的,所以就要用到Nginx ,代理我們的服務器,把請求分別發到幾臺服務器處理。這就是所謂的反向代理。

二 負載均衡

我們的Nginx 會將請求發到幾臺服務器,那麼Nginx 對應幾臺服務器,怎麼給這幾臺服務器分配請求呢,這就要提到負載均衡了,為了保證每臺服務器都正常運轉,我們要做負載均衡,負載均衡有很多種策略,Nginx 選擇的是輪詢,即按照順序分配,分配給服務器1,分配給服務器2,分配給服務器3,分配給服務器1,以此類推。

三 動靜分離

大家都知道我們編寫程序要儘可能的解耦,假設我們的程序中靜態資源域與代碼都耦合在一起,我們每改一個圖片,一個樣式都需要改代碼,這時我們的Nginx 就派上了用場,Nginx 可以 將靜態資源與動態資源分離。

深入淺出反向代理服務器“Nginx”

Nginx可以將我們的靜態資源存在在一個文件系統中,我們需要靜態資源的時候,只需要將靜態資源的url填上,我們改變靜態資源的時候,也只需改變文件系統中的靜態資源,不需要改動我們的代碼。

講了Nginx的三大功能,我麼再接著講講Nginx的底層原理

Nginx採用了master-workers的機制

深入淺出反向代理服務器“Nginx”

"

首先我們先了解一下Nginx是什麼

Nginx ("engine x") 是一個高性能的HTTP和反向代理 服務器,特點是佔有內存少,併發能力強,事實上nginx的 併發能力確實在同類型的網頁服務器中表現較好,中國 大陸使用nginx網站用戶有:百度、京東、新浪、網易、 騰訊、淘寶等。

首先Nginx 不是web服務器 ,它最主要的功能有三個 “反向代理”,“負載均衡”,“動靜分離”,接下來我們會主要圍繞這三個功能講解。說道服務器,肯定有小夥伴能想到Tomcat,那麼Nginx和Tomcat是什麼關係? Tomcat服務器不是web服務器,Nginx是代理服務器,兩者功能不同,而且Nginx可以作為靜態頁面的web服務器,同時還支持CGI協 議的動態語言,比如perl、php等。但是不支持java。 Java程序只能通過與tomcat配合完成。所以Nginx和Tomcat算是合作關係。

下面我們主要講Nginx的三大功能:

一 反向代理(即代理服務端)

說道反向代理,那麼我麼先看什麼是正向代理。

深入淺出反向代理服務器“Nginx”

正向代理即代理客戶端,以圖為例,我們要訪問Google,因為有防火牆的存在,我們是不能訪問到的,但是我們可以通過代理服務器訪問。這種方式就是正向代理。

那什麼叫反向代理呢

深入淺出反向代理服務器“Nginx”

如果我們有一個電商網站,訪問併發量特別大,那麼只用一臺服務器處理請求時遠遠不夠的,所以就要用到Nginx ,代理我們的服務器,把請求分別發到幾臺服務器處理。這就是所謂的反向代理。

二 負載均衡

我們的Nginx 會將請求發到幾臺服務器,那麼Nginx 對應幾臺服務器,怎麼給這幾臺服務器分配請求呢,這就要提到負載均衡了,為了保證每臺服務器都正常運轉,我們要做負載均衡,負載均衡有很多種策略,Nginx 選擇的是輪詢,即按照順序分配,分配給服務器1,分配給服務器2,分配給服務器3,分配給服務器1,以此類推。

三 動靜分離

大家都知道我們編寫程序要儘可能的解耦,假設我們的程序中靜態資源域與代碼都耦合在一起,我們每改一個圖片,一個樣式都需要改代碼,這時我們的Nginx 就派上了用場,Nginx 可以 將靜態資源與動態資源分離。

深入淺出反向代理服務器“Nginx”

Nginx可以將我們的靜態資源存在在一個文件系統中,我們需要靜態資源的時候,只需要將靜態資源的url填上,我們改變靜態資源的時候,也只需改變文件系統中的靜態資源,不需要改動我們的代碼。

講了Nginx的三大功能,我麼再接著講講Nginx的底層原理

Nginx採用了master-workers的機制

深入淺出反向代理服務器“Nginx”

深入淺出反向代理服務器“Nginx”

首先,對於每個worker進程來說,獨立的進程,不需要加鎖, 所以省掉了鎖帶來的開銷,同時在編程以及問題查找時,也會方 便很多。 其次,採用獨立的進程,可以讓互相之間不會影響,一個進程 退出後,其它進程還在工作,服務不會中斷,master進程則很快啟 動新的worker進程。當然,worker進程的異常退出,肯定是程序有 bug了,異常退出,會導致當前worker上的所有請求失敗,不過不 會影響到所有請求,所以降低了風險。

當請求過來時,會通知到我們的master,master會通知worker,所有worker會爭搶這個請求,所以Nginx效率很高。那麼我們要設置多少個worker, Nginx 同redis類似都採用了io多路複用機制,每個 worker都是一個獨立的進程,但每個進程裡只有一個主線 程,通過異步非阻塞的方式來處理請求, 即使是千上萬個 請求也不在話下。每個worker的線程可以把一個cpu的性 能發揮到極致。 所以worker數和服務器的cpu數相等是最為適宜的。設 少了會浪費cpu,設多了會造成cpu頻繁切換上下文帶來的 損耗。

"

相關推薦

推薦中...