nginx介紹

一、簡介:

     1.nginx引擎是一個HTTP反向代理服務器,郵件代理服務器,和一個通用的TCP代理服務器,最初由Igor Sysoev寫的。

在很長一段時間裏,它已經運行在許多重量級的俄羅斯的網站,包括Yandex、郵件。俄文、VK Rambl。

全球共有23.36% busiest sites in September 2015.使用nginx。

    

     2.基本的HTTP服務器特性:

         (1)提供靜態和索引文件,自動索引;打開的文件描述符緩存;

(2)加速反向代理緩存;負載均衡和容錯;

(3)加速FastCGI的支持與緩存、uwsgi SCGI,和memcached服務器,負載均衡和容錯;

(4)模塊化的體系結構。過濾器包括gzip、字節範圍,分塊反應,XSLT,SSI和圖像轉換過濾器。

   多個SSI包含在單個頁面可以並行處理,如果他們通過代理或FastCGI處理/ uwsgi SCGI服務.

(5)SSL and TLS SNI support; 

(6)支持HTTP/2 加權和基於依賴關係的優先級;

 

    3.其他HTTP服務器功能

(1)基於域名和基於IP的虛擬主機;

(2)keep-alive客戶端到服務器端的連接持續有效和pipeline連接支持;

(3)重新配置和在線升級時,不需要中斷正在處理的請求;

(4)3xx到5xx錯誤代碼重定向;

(5)重新rewrite規則,使用正則表達式改變url;

(6)根據客戶端地址執行不同的功能,可以做訪問控制;

         (7)支持驗證HTTP referer  SSL;

(8)支持FLV和MP4流;

(9)速度限制,連接數或請求數限制;


    4.統一基於進程或線程模型架構的web服務通過每進程或每線程處理併發連接請求,其另一個必然結果則是對內存或cpu的利用率低下,生成一個新的進程,線程需要事先備好其運行時的環境。這包括爲其分配堆內存和棧內心,以及爲其創建新的執行上下文章,這些操作都需要佔用cpu,而且很多的進程。


    5.在設計的最初階段,nginx的主要着眼點就是其高性能以及對物理計算的高密度利用,因此採用了不同的架構模型;受啓發於多種操作系統設計中基於‘事件’的高級處理機制,nginx採用了模塊化,事件驅動,異步,單線程及非阻塞的架構,並大量採用了多路複用及事件通知機制,在nginx中,連接請求由爲數不多的幾個僅僅包含一個線程的進程worker以高效的迴環(run-loop)機制進行處理,而每個worker可以並行處理數千個併發連接以及請求。

   

***6.如果負載以cpu密集型應用爲主,如SSL或壓縮應用,則worker數應與cpu數相同。

     如果負載以IO密集型應用爲主,如響應大量內容給客戶端,則worker數應該爲cpu個數的1.5倍或2倍。

 

   7.nginx會按需同時運行多個進程,一個主進程master和幾個工作進程worker,配置了緩存時還會有緩存加載器進程cache loader和緩存管理器cache manager,,等等。所有進程均是僅僅含有一個線程,並主要通過共享內存的機制實現進程間通信,主進程以root用戶身份運行,而worker,cache loader,cache manager均用非特權身份運行。


二、nginx主進程主要完成如下工作:   

    1.讀取並驗證配置信息;

    2.創建,綁定及關閉套接字;

    3.啓動,終止,與維護worker進程的個數,

    4.無需終止服務而重新配置工作特性;

    5.控制非中斷試程序升級,啓用新的二進制程序並在需要時回滾至老版本。

    6.重新打開日誌文件,編譯嵌入式perl腳本。

   

三、worker進程主要完成如下工作:

    1.接收,傳入並處理來自客戶端的連接;

    2.提供反向代理及過濾功能;

    3.nginx任何能完成的其他任務。

四、 cache loader進程主要完成如下工作:

    1.檢查緩存存儲中的緩存對象;

    2.檢查緩存元數據建立內存數據庫;

    cache manager進程主要完成如下工作:  緩存失效的過去檢驗

    nginx的配置有幾個不同的上下文,main  http  server  upstream和location以及實現郵件服務反向代理的mail

配置語法格式和定義方式遵循所謂的C風格,因此支持嵌套,還有着邏輯清晰並易於創建,運行和維護。


    nginx的代碼是由一個核心和一系列的模塊組成,核心主要用於提供web server的基本功能,以及web和mail反向代理的功能;還用於啓用網絡協議,創建必要的運行時環境以及確保不同的模塊之間的平滑交互;不過,大多數跟協議相關的功能和某應用特有的功能都是由nginx的模塊實現的,這些功能模塊大致可分爲事件模塊,階段性處理器,輸出過濾器,變量處理器和負載均衡幾個類別,這些共同組成了nginx的http功能,事件模塊主要用於提供os獨立的事件通知機制如:kqueue或epoll。

     協議模塊則負責實現nginx通過http,tls/ssl,smtp,pop3與對應的客戶端建立會話

在nginx內部,進程間的通信是通過模塊的pipline或chain實現的,換句話說;每一個功能或操作都是由一個模塊來實現,例如:壓縮通過FastCGI或uwsgi協議與upstream服務器通信,以及與memcached建立會話等。 


   Starting, Stopping, and Reloading Configuration 啓動、停止、和加載配置文件

nginx -s signal   使用 nginx -s  +信號類型
  • stop — fast shutdown   快速關閉

  • quit — graceful shutdown  優雅關閉(建議)

  • reload — reloading the configuration file  重新加載配置文件

  • reopen — reopening the log files   重新加載日誌文件

   kill -s QUIT 1628   根據主進程號去發送信號-關閉


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章