帶你簡單瞭解一下Nginx服務器

Nginx 其實就是一款輕量級的 Web 服務器、反向代理服務器,由於它的內存佔用少,啟動極快,高併發能力強,在互聯網項目中廣泛應用。

那麼你可能會問了:“不是說 Nginx 嗎?怎麼又扯出來一個 Web 服務器呢?啥是服務器?”。彆著急,在學習 Nginx 之前你還真得知道什麼是服務器這個概念,下面我們先來看下到底啥是服務器。

啥是服務器

服務器的英文叫 Server , 顧名思義就是為其他人服務的。我們可以把所有為其他用戶提供服務的機器或軟件都稱作服務器。

  • Server 可以指硬件,比如谷歌公司對用戶提供服務的主機,下圖是谷歌公司的一個數據中心圖片,走道兩側亮著紅黃藍顏色的笨重機器就是服務器。
  • Server 也可以是一個軟件。比如我們本次專欄要介紹的 Nginx,它就是一個對用戶提供 HTTP 服務的Server。又比如我們常聽到的網易郵箱服務器,它就是專門為用戶提供郵件服務的。這些軟件都運行在一個個物理機器上面,專門對外提供對應的服務。
帶你簡單瞭解一下Nginx服務器

WEB服務器

我們上面嘮叨了一下什麼是服務器。下面我們說一下啥是 Web 服務器,在上面我們也說了 Nginx 其實就是一個 輕量級的 Web 服務器,那麼什麼是 Web 服務器呢?

我們平時可以打開瀏覽器訪問微博的網站,獲取各種娛樂圈各種勁爆消息。這個看似簡單的行為,背後有隱藏了那些細節呢?

帶你簡單瞭解一下Nginx服務器

上圖就是一個典型的 web 請求流程,主要分為五個步驟:

  1. 瀏覽器本身作為一個客戶端,當你輸入 www.weibo.com 的時候,向 DNS 服務器發出域名請求服務;
  2. DNS 服務器將域名將對應的 IP 地址返回給瀏覽器;
  3. 瀏覽器使用 IP 地址找到對應的服務器後,建立 TCP 連接,向服務器發送 HTTP 請求;
  4. 服務器接收到請求之後才開始處理,返回 HTTP 響應;
  5. 瀏覽器收到來自服務器的響應後開始渲染頁面,最後斷開與該服務器之間的 TCP 連接。

我們所介紹的 Web 服務器就是在第 3 和 4 步驟中發揮作用的。它的作用很簡單,概括地講,主要完成三個工作:

  1. 接收請求;
  2. 處理請求,生成響應 ;
  3. 發送響應。

哈哈,當然了,一個成熟的 Web 服務器肯定還有其他各種各樣的功能,但是原理都是一樣。所以,一定要淡定,學會 Web 服務器並沒有想象中的那麼困難。

WEB服務器的分類

其實,現在的市面上面有很多類似於 Nginx 的 Web 服務器,如下圖:

幾款服務器比較

下面我們簡單地比較一下幾款流行的 Web 服務器軟件的區別。

  • Apache 是一款歷史悠久的開源 Web 服務器軟件。擁有很多的第三方模塊,你想使用的功能基本上都可以找到,避免自己重複造輪子。採用多進程方式處理請求,每個請求都對應於一個進程。在高併發的情況下,多進程處理方式特別的消耗資源,所以天然不適合高併發場景;
  • Nginx 是年輕(相比Apache)的開源 Web 服務器軟件。它也採用 C 語言編寫,代碼運行效率很高。它採用了epoll (以Linux為例) 事件處理機制作為模型,能夠保證非常高的併發量;
  • IIS是微軟的Web服務器軟件,這個可是收費的哦~~~

我們看一下 Netcraft 公司在2019年7月份統計的全球 Web 服務器佔用率調查:

帶你簡單瞭解一下Nginx服務器

帶你簡單瞭解一下Nginx服務器

從這兩張圖中可以看到,Nginx 開發者數量已經明顯的超過了其他 Web Server 開發者數量,獨佔鰲頭。

在 Web Server 市場使用率中,Nginx 的佔有率一直在穩步的上升,超過了 IIS,與 Apache 的差距越來越小。

所以,使用和學習 Nginx 已經成為每一個後端工程師必備的技能了。好了,鋪墊了這麼多,下面我們正式來看下 Nginx 倒底是個什麼東西。

Nginx簡介

帶你簡單瞭解一下Nginx服務器

Nginx是由戰鬥民族的一位名叫 Igor Sysoev 的程序猿開發的,開源、高性能的 HTTP 服務器和反向代理服務器,也可以作為一個 IMAP/POP3 代理服務器。也就是說,Nginx不僅可以託管網站,進行HTTP服務處理,還可以作為反向代理服務器。

Nginx 出現的初衷是為了解決著名的 C10K 問題而出現的。和傳統的 Web Server 不一樣,Nginx 使用了異步事件處理機制架構。這種架構可以輕鬆高效地處理大量的請求,並且非常的節省內存。高性能是Nginx最大的優點。

啥?不知道什麼是C10K問題,我嚴重懷疑你是從外星球來的,來,看這裡。

不知道什麼是異步事件處理機制?沒關係,我會在後面的小節中分析的,包學會。

為什麼選擇Nginx

  1. 佔用內存小。這得益於 Nginx 使用 C 語言編寫,能夠高效使用 CPU、內存等系統資源。並且作者自己造了很多的輪子 , 比如 Nginx 自己實現了內存管理系統,動態數組機制等。Nginx 作者對內存的使用控制簡直到了喪心病狂的地步,所以非常的節省系統資源,特別是內存;
  2. 高併發。在 Linux 系統上,Nginx 使用了 epoll 機制,能夠高效處理大量的連接數。理論上,Nginx 可以同時處理的最大連接數取決於你的機器的物理內存,上不封頂;
  3. 高可靠性。我認為 Nginx 的高可靠性主要體現在兩方面:(一):Nginx 使用了 Master-Worker 機制,真正處理請求的是Worker進程。Master進程可以監控Worker進程的運行狀況,當某個Worker進程因意外原因退出的時候,Master會重新啟動Worker進程;(二):Nginx 的內部框架非常優秀。它的各個模塊都非常簡單,所以也非常的穩定。
  4. 熱部署。可能大家覺得這個原因並不重要,其實在實際的線上環境是非常重要的。代碼上線之後,我們只需要執行 nginx -s reload 命令就可以完成 Nginx 的重啟,其他的交給 Nginx 就可以了,你可以安心去喝咖啡了。如果沒有親身體驗過這種痛苦,你是無法理解的這是多麼痛的領悟。

Nginx能幹啥

上面我們 ‘吹噓’ 了 Nginx 的這麼多優點,那麼 Nginx 究竟能幹什麼呢?

  1. HTTP 服務器。作為一款優秀的 Web 服務器,那麼提供 HTTP 服務顯然是它的首要任務;
  2. 負載均衡。Nginx 提供了多種負載均衡策略,實現了7層負載均衡。針對不同的情形,我們可以選擇合適的策略。另外我們也可以自己實現特殊需求的負載均衡策略;
  3. 反向代理。Nginx 是一款非常優秀的反向代理服務器。


帶你簡單瞭解一下Nginx服務器

擴展鏈接:MySQL面試必問題,希望對你有幫助。


分享到:


相關文章: