一、簡介:
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 根據主進程號去發送信號-關閉