Nginx是什麼?能幹什麼?

2021-02-15 Java團長

來源:cnblogs.com/wcwnina/p/8728391.html

Nginx的產生

沒有聽過Nginx?那麼一定聽過它的"同行"Apache吧!Nginx同Apache一樣都是一種WEB伺服器。基於REST架構風格,以統一資源描述符(Uniform Resources Identifier)URI或者統一資源定位符(Uniform Resources Locator)URL作為溝通依據,通過HTTP協議提供各種網絡服務。

然而,這些伺服器在設計之初受到當時環境的局限,例如當時的用戶規模,網絡帶寬,產品特點等局限並且各自的定位和發展都不盡相同。這也使得各個WEB伺服器有著各自鮮明的特點。

Apache的發展時期很長,而且是毫無爭議的世界第一大伺服器。它有著很多優點:穩定、開源、跨平臺等等。它出現的時間太長了,它興起的年代,網際網路產業遠遠比不上現在。所以它被設計為一個重量級的。它不支持高並發的伺服器。在Apache上運行數以萬計的並發訪問,會導致伺服器消耗大量內存。作業系統對其進行進程或線程間的切換也消耗了大量的CPU資源,導致HTTP請求的平均響應速度降低。

這些都決定了Apache不可能成為高性能WEB伺服器,輕量級高並發伺服器Nginx就應運而生了。

俄羅斯的工程師Igor Sysoev,他在為Rambler Media工作期間,使用C語言開發了Nginx。Nginx作為WEB伺服器一直為Rambler Media提供出色而又穩定的服務。

然後呢,Igor Sysoev將Nginx代碼開源,並且賦予自由軟體許可證。

由於:

Nginx使用基於事件驅動架構,使得其可以支持數以百萬級別的TCP連接

高度的模塊化和自由軟體許可證是的第三方模塊層出不窮(這是個開源的時代啊~)

Nginx是一個跨平臺伺服器,可以運行在Linux,Windows,FreeBSD,Solaris, AIX,Mac OS等作業系統上

這些優秀的設計帶來的極大的穩定性

所以,Nginx火了!

Nginx的用武之地

Nginx是一款自由的、開源的、高性能的HTTP伺服器和反向代理伺服器;同時也是一個IMAP、POP3、SMTP代理伺服器;Nginx可以作為一個HTTP伺服器進行網站的發布處理,另外Nginx可以作為反向代理進行負載均衡的實現。

關於代理

說到代理,首先我們要明確一個概念,所謂代理就是一個代表、一個渠道;

此時就設計到兩個角色,一個是被代理角色,一個是目標角色,被代理角色通過這個代理訪問目標角色完成一些任務的過程稱為代理操作過程;如同生活中的專賣店~客人到adidas專賣店買了一雙鞋,這個專賣店就是代理,被代理角色就是adidas廠家,目標角色就是用戶。

正向代理

說反向代理之前,我們先看看正向代理,正向代理也是大家最常接觸的到的代理模式,我們會從兩個方面來說關於正向代理的處理模式,分別從軟體方面和生活方面來解釋一下什麼叫正向代理。

在如今的網絡環境下,我們如果由於技術需要要去訪問國外的某些網站,此時你會發現位於國外的某網站我們通過瀏覽器是沒有辦法訪問的,此時大家可能都會用一個操作FQ進行訪問,FQ的方式主要是找到一個可以訪問國外網站的代理伺服器,我們將請求發送給代理伺服器,代理伺服器去訪問國外的網站,然後將訪問到的數據傳遞給我們!

上述這樣的代理模式稱為正向代理,正向代理最大的特點是客戶端非常明確要訪問的伺服器地址;伺服器只清楚請求來自哪個代理伺服器,而不清楚來自哪個具體的客戶端;正向代理模式屏蔽或者隱藏了真實客戶端信息。來看個示意圖(我把客戶端和正向代理框在一塊,同屬於一個環境,後面我有介紹):

客戶端必須設置正向代理伺服器,當然前提是要知道正向代理伺服器的IP位址,還有代理程序的埠。如圖。

總結來說:正向代理,"它代理的是客戶端",是一個位於客戶端和原始伺服器(origin server)之間的伺服器,為了從原始伺服器取得內容,客戶端向代理髮送一個請求並指定目標(原始伺服器),然後代理向原始伺服器轉交請求並將獲得的內容返回給客戶端。客戶端必須要進行一些特別的設置才能使用正向代理。

正向代理的用途:

反向代理

明白了什麼是正向代理,我們繼續看關於反向代理的處理方式,舉例如我大天朝的某寶網站,每天同時連接到網站的訪問人數已經爆表,單個伺服器遠遠不能滿足人民日益增長的購買慾望了,此時就出現了一個大家耳熟能詳的名詞:分布式部署;

也就是通過部署多臺伺服器來解決訪問人數限制的問題;某寶網站中大部分功能也是直接使用Nginx進行反向代理實現的,並且通過封裝Nginx和其他的組件之後起了個高大上的名字:Tengine。

有興趣的童鞋可以訪問Tengine的官網查看具體的信息:http://tengine.taobao.org/。那麼反向代理具體是通過什麼樣的方式實現的分布式的集群操作呢,我們先看一個示意圖(我把伺服器和反向代理框在一塊,同屬於一個環境,後面我有介紹):

通過上述的圖解大家就可以看清楚了,多個客戶端給伺服器發送的請求,Nginx伺服器接收到之後,按照一定的規則分發給了後端的業務處理伺服器進行處理了。此時~請求的來源也就是客戶端是明確的,但是請求具體由哪臺伺服器處理的並不明確了,Nginx扮演的就是一個反向代理角色。

客戶端是無感知代理的存在的,反向代理對外都是透明的,訪問者並不知道自己訪問的是一個代理。因為客戶端不需要任何配置就可以訪問。

反向代理,"它代理的是服務端",主要用於伺服器集群分布式部署的情況下,反向代理隱藏了伺服器的信息。

反向代理的作用:

項目場景

通常情況下,我們在實際項目操作時,正向代理和反向代理很有可能會存在在一個應用場景中,正向代理代理客戶端的請求去訪問目標伺服器,目標伺服器是一個反向單利伺服器,反向代理了多臺真實的業務處理伺服器。

具體的拓撲圖如下:

二者區別

截了一張圖來說明正向代理和反向代理二者之間的區別,如圖。

圖解:

在正向代理中,Proxy和Client同屬於一個LAN(圖中方框內),隱藏了客戶端信息;

在反向代理中,Proxy和Server同屬於一個LAN(圖中方框內),隱藏了服務端信息;

實際上,Proxy在兩種代理中做的事情都是替伺服器代為收發請求和響應,不過從結構上看正好左右互換了一下,所以把後出現的那種代理方式稱為反向代理了

負載均衡

我們已經明確了所謂代理伺服器的概念,那麼接下來,Nginx扮演了反向代理伺服器的角色,它是以依據什麼樣的規則進行請求分發的呢?不用的項目應用場景,分發的規則是否可以控制呢?

這裡提到的客戶端發送的、Nginx反向代理伺服器接收到的請求數量,就是我們說的負載量。請求數量按照一定的規則進行分發到不同的伺服器處理的規則,就是一種均衡規則。

所以~將伺服器接收到的請求按照規則分發的過程,稱為負載均衡。

負載均衡在實際項目操作過程中,有硬體負載均衡和軟體負載均衡兩種,硬體負載均衡也稱為硬負載,如F5負載均衡,相對造價昂貴成本較高,但是數據的穩定性安全性等等有非常好的保障,如中國移動中國聯通這樣的公司才會選擇硬負載進行操作;更多的公司考慮到成本原因,會選擇使用軟體負載均衡,軟體負載均衡是利用現有的技術結合主機硬體實現的一種消息隊列分發機制。

Nginx支持的負載均衡調度算法方式如下:

weight輪詢(默認):接收到的請求按照順序逐一分配到不同的後端伺服器,即使在使用過程中,某一臺後端伺服器宕機,Nginx會自動將該伺服器剔除出隊列,請求受理情況不會受到任何影響。這種方式下,可以給不同的後端伺服器設置一個權重值(weight),用於調整不同的伺服器上請求的分配率;權重數據越大,被分配到請求的機率越大;該權重值,主要是針對實際工作環境中不同的後端伺服器硬體配置進行調整的。

ip_hash:每個請求按照發起客戶端的ip的hash結果進行匹配,這樣的算法下一個固定ip地址的客戶端總會訪問到同一個後端伺服器,這也在一定程度上解決了集群部署環境下session共享的問題。

fair:智能調整調度算法,動態的根據後端伺服器的請求處理到響應的時間進行均衡分配,響應時間短處理效率高的伺服器分配到請求的概率高,響應時間長處理效率低的伺服器分配到的請求少;結合了前兩者的優點的一種調度算法。但是需要注意的是Nginx默認不支持fair算法,如果要使用這種調度算法,請安裝upstream_fair模塊。

url_hash:按照訪問的url的hash結果分配請求,每個請求的url會指向後端固定的某個伺服器,可以在Nginx作為靜態伺服器的情況下提高緩存效率。同樣要注意Nginx默認不支持這種調度算法,要使用的話需要安裝Nginx的hash軟體包。

幾種常用web伺服器對比對比項ApacheNginxLighttpdProxy代理非常好非常好一般Rewriter好非常好一般Fcgi不好好非常好熱部署不支持支持不支持系統壓力很大很小比較小穩定性好非常好不好安全性好一般一般靜態文件處理一般非常好好反向代理一般非常好一般

(完)

專注於Java乾貨分享

掃描上方二維碼獲取更多Java乾貨

相關焦點

  • Ansible是什麼,Ansible能做什麼?
    最近,有很多的網工跟我諮詢一個問題, Ansible是什麼,Ansible能做什麼,我們該如何安裝部署?
  • vpn是什麼 vpn能幹什麼
    什麼是VPN呢?今天給大家講的是什麼是vpn?vpn對於我們他能幹些什麼?他有哪些優點?我們又如何來使用vpn?VPN叫虛擬專用網絡,vpn定義為通過公用網絡(通常是網際網路)建立的一個臨時的、安全的有效的連接,簡單地說就是利用公網鏈路架設私有網絡,是一條穿過混亂的公用網絡的安全、穩定隧道。使用這條隧道可以對數據進行幾倍加密達到安全使用網際網路的目的。
  • python是什麼?能幹什麼?
    第一:python是什麼?能幹什麼?能用到Python 的地方非常多。
  • Nginx到底能做什麼?這篇文章帶你全面了解
    所以還請見諒,同時歡迎留言交流Nginx能做什麼1、反向代理 2、[負載均衡] 3、HTTP伺服器(包含動靜分離) 4、正向代理以上就是我了解到的Nginx在不依賴第三方模塊能處理的事情,下面詳細說明每種功能怎麼做反向代理
  • 【詳細了解】Nginx 除了負載均衡,還能做什麼?
    本文只針對 Nginx 在不加載第三方模塊的情況能處理哪些事情,由於第三方模塊太多所以也介紹不完,當然本文本身也可能介紹的不完整,畢竟只是我個人使用過和了解到過的。Nginx能做什麼以上就是我了解到的 Nginx 在不依賴第三方模塊能處理的事情,下面詳細說明每種功能怎麼做。
  • iPad Pro 能幹什麼
    左邊看文檔,右邊練習Working Copy:可以寫寫簡單代碼,體驗一般。
  • 寫給小白的 Nginx 文章
    原文地址:Nginx concepts I wish I knew years ago原文作者:Aemie Jariwala(已授權)譯者 & 校正:HelloGitHub-小魚乾 & 滷蛋Nginx 是一個採用主從架構的 Web 伺服器,可用於反向代理、負載均衡器、郵件代理和 HTTP
  • 狐大盜他能幹什麼
    連巴大蝶都能掀起一番睡風粉雨。曾經我和大家一樣認為狐大盜他能幹什麼?得益於alan杯被暴打,讓我重新審視起狐大盜這隻精靈。首先是基本信息。種族值總和455,最高項速度90,87特攻有詭計,但是本系外只有打草結精神強念暗影球可堪一用。物攻技能一堆結果種族58。屬性純惡,飛機風妖精當道,看起來也沒他啥事。特性:逃跑/輕裝,蹲守。第一個特性忽略。
  • NAS能幹什麼?
    MzIwNjA5NjMyNg==&mid=2649748818&idx=1&sn=426c191cda094fc1be74856ff73bc1cd&scene=21#wechat_redirect作者:張輝公司:西安名世信息科技有限公司職務:高級培訓師NAS能幹什麼
  • Nginx到底能做什麼?
    本文只針對Nginx在不加載第三方模塊的情況能處理哪些事情,由於第三方模塊太多所以也介紹不完,當然本文本身也可能介紹的不完整,畢竟只是我個人使用過和了解到過得
  • Nginx 詳解:Nginx 是什麼? 能幹嘛?
    正向代理說反向代理之前,我們先看看正向代理,正向代理也是大家最常接觸的到的代理模式,我們會從兩個方面來說關於正向代理的處理模式,分別從軟體方面和生活方面來解釋一下什麼叫正向代理。正向代理的用途:•(1)訪問原來無法訪問的資源,如Google•(2) 可以做緩存,加速訪問資源•(3)對客戶端訪問授權,上網進行認證•(4)代理可以記錄用戶訪問記錄(上網行為管理),對外隱藏用戶信息反向代理明白了什麼是正向代理,我們繼續看關於反向代理的處理方式,舉例如我大天朝的某寶網站,每天同時連接到網站的訪問人數已經爆表
  • CMO 能幹什麼?CMO 該幹什麼?
    CMO到底能做什麼呢?破解之道:不同的商業模式,其組織結構的劃分是不一樣的。例如,可口可樂為什麼要撤銷CMO設立CGO崗位,就與其歷史背景和商業模式有很大的關係。很多具體的營銷增長操作,CMO並不需要知道那麼多細節,但需要知道所有能做的事是什麼,不能做的又有哪些。另外,在某一職位或行業上待久了很容易會產生路徑依賴的慣性,例如一個方法在一個地方獲得成功,在另一個地方就極可能失敗,但由於CMO長久形成的思維或行為慣性,讓其難以走出來,盲目的相信這個錯誤的方法。
  • 舊手機能拿來幹什麼有趣的事情?
    前陣子發了一篇《廢舊Android手機如何改造成Linux伺服器》的文章,整篇文章偏實操性,所以有讀者問有什麼其他有趣的應用沒有
  • 什麼是電子商務專業,我學了他可以幹什麼?
    如果你問學了電子商務能幹什麼,那麼得看你學到什麼,電子商務綜合性能力還是比較高的。
  • 雲伺服器有什麼作用,雲伺服器是幹什麼的
    ,租用到更便宜的雲伺服器,但是我忽略了一個問題,那就是很多新手並不了解雲伺服器,所以接下來我會跟大家講講:雲伺服器有什麼作用,雲伺服器是幹什麼的,等等關於雲伺服器的知識。雲伺服器是幹什麼的想要知道雲伺服器有什麼作用,那我們首先就應該先知道雲伺服器是幹什麼的
  • plecs裡的simulation script能幹什麼/怎麼用
    但熟練運用script能提高我們的仿真效率並節省大量的仿真工作時間。這篇文章算是個入門,主要告訴大家script是什麼,能幹什麼。這個功能有什麼用呢?對於一些比較簡單的模型,仿真一次可能只需要兩三分鐘,等一次仿真結束後修改參數再發起第二次仿真也用不了多長時間。
  • 別說了,來學習Nginx吧!
    Nginx 如何解決驚群現象什麼是驚群現象?常見問題Q1:Nginx 一般用作什麼?見上文中 Nginx 在架構體系中的作用,配合 Nginx 還能做什麼作答即可Q2:為什麼要用 Nginx?理解網關的必要性,以及 Nginx 保證高可用,負載均衡的能力Q3:為什麼 Nginx 這麼快?
  • Nginx+Lua服務端合併靜態文件
    ://github.com/grasses/nginx-lua-static-mergernginx-lua-static-merger是一個基於openresty的模塊,主要用於合併靜態文件,減少http請求,加快靜態文件訪問速度的模塊。
  • CPU閒著的時候在幹什麼?
    CPU在絕大部分時間是什麼都不幹的。大多數技術專家都知道這個事實,但對於CPU是如何從空閒狀態切換到工作狀態,忙完後又回到空閒狀態的相應機制,我們大多人或許並不太了解。對現代處理器來說,這種機制變得越來越重要。今天大部分晶片設計的一個目標是將處理器儘快地切換到低功率狀態。
  • Nginx原理及其使用
    一、Nginx基本概念1、什麼是nginx- Nginx