1. 程式人生 > 其它 >nginx服務介紹 解析

nginx服務介紹 解析

技術標籤:HTTP nginx 服務nginxhttp網路

文章目錄

nginx 服務

一,nginx 介紹

  • Nginx (engine x) 是一個高效能的 HTTP 和 反向代理 服務,也是一個IMAP/POP3/SMTP服務。因它的穩定性、豐富的功能集、示例配置檔案和低系統資源的消耗而聞名。
  • Nginx是一款輕量級的Web 伺服器/反向代理伺服器及電子郵件(IMAP/POP3)代理伺服器,並在一個BSD-like 協議下發行。其特點是佔有記憶體少,併發能力強,事實上nginx的併發能力確實在同類型的網頁伺服器中表現較好
  • 在高連線併發的情況下,Nginx是Apache伺服器不錯的替代品。

創始人是:伊戈爾·賽索耶夫

二,選擇nginx的原因

Nginx 是一個高效能的 Web 和反向代理伺服器, 它具有有很多非常優越的特性:

單機環境下參考伺服器配置。 併發連線數在7000+ -8000左右。 叢集模式20000+

  • 作為 Web 伺服器:相比 Apache,Nginx 使用更少的資源,支援更多的併發連線,體現更高的效率,這點使 Nginx 尤其受到虛擬主機提供商的歡迎。能夠支援高達 50,000 個併發連線數的響應。
  • 作為負載均衡伺服器:Nginx 既可以在內部直接支援 Rails 和 PHP,也可以支援作為 HTTP代理伺服器 對外進行服務。Nginx 用 C 編寫, 不論是系統資源開銷還是 CPU 使用效率都比 Perlbal 要好的多。
  • 作為郵件代理伺服器: Nginx 同時也是一個非常優秀的郵件代理伺服器(最早開發這個產品的目的之一也是作為郵件代理伺服器),Last.fm 描述了成功並且美妙的使用經驗。
  • Nginx 安裝非常的簡單,配置檔案 非常簡潔(還能夠支援perl語法),Bugs非常少的伺服器: Nginx 啟動特別容易,並且幾乎可以做到7*24不間斷執行,即使執行數個月也不需要重新啟動。你還能夠在 不間斷服務的情況下進行軟體版本的升級。

三、IO多路複用

1、I/O multiplexing【多併發】

  • 第一種方法就是最傳統的多程序併發模型 (每進來一個新的I/O流會分配一個新的程序管理。)
    在這裡插入圖片描述
  • 第二種方法就是I/O多路複用 (單個執行緒,通過記錄跟蹤每個I/O流(sock)的狀態,來同時管理多個I/O流 。)
  • I/O multiplexing 這裡面的 multiplexing 指的其實是在單個執行緒通過記錄跟蹤每一個Sock(I/O流)的狀態來同

  • 時管理多個I/O流。發明它的原因,是儘量多的提高伺服器的吞吐能力。

  • 在同一個執行緒裡面, 通過撥開關的方式,來同時傳輸多個I/O流。

在這裡插入圖片描述

2、一個請求到來了,nginx使用epoll接收請求的過程是怎樣的?

  • ngnix會有很多連線進來, epoll會把他們都監視起來,然後像撥開關一樣,誰有資料就撥向誰,然後呼叫相應的程式碼處理。

  • epoll.

  • epoll 可以說是I/O 多路複用最新的一個實現,epoll 修復了select/poll絕大部分問題, 比如:

  • epoll 執行緒安全的。

  • epoll 告訴你具體哪個sock有資料,你不用自己去找了。

3、非同步,非阻塞

# pstree |grep nginx
 |-+= 81666 root nginx: master process nginx
 | |--- 82500 nobody nginx: worker process
 | \--- 82501 nobody nginx: worker process

1個master程序,2個work程序

  • 每進來一個request,會有一個worker程序去處理。但不是全程的處理,處理到什麼程度呢?
  • 處理到可能發生阻塞的地方,比如向後端伺服器轉發request,並等待請求返回。那麼,這個處理的worker不會這麼一直等著,他會在傳送完請求後,註冊一個事件:“如果upstream返回了,告訴我一聲,我再接著幹”。於是他就休息去了。這就是非同步。
  • 此時,如果再有request 進來,他就可以很快再按這種方式處理。這就是非阻塞和IO多路複用。
  • 而一旦上游伺服器返回了,就會觸發這個事件,worker才會來接手,這個request才會接著往下走。這就是非同步回撥。