什麼是nginx?
HTTP伺服器、(這不陌生)
反向代理伺服器(負載均衡、分散式)
題外:什麼是代理、反代理?
注:該部分圖片引自文章 Nginx 入門
nginx的優點
- 快
- 處理高併發更優秀
單機支援10萬以上的併發連線單機支援10萬以上的併發連線 - 高擴充套件
由多個耦合度極低的模組組成,造就了龐大的官方公佈之外的第三方模組,它們和官方公佈的一樣容易使用。由多個耦合度極低的模組組成,造就了龐大的官方公佈之外的第三方模組,它們和官方公佈的一樣容易使用。由多個耦合度極低的模組組成,造就了龐大的官方公佈之外的第三方模組,它們和官方公佈的一樣容易使用。由多個耦合度極低的模組組成,造就了龐大的官方公佈之外的第三方模組,它們和官方公佈的一樣容易使用。 - 高可靠
核心框架程式碼的優秀設計、模組設計的簡單性;另外,官方提供的常用模組都非常穩定,每個worker程式相對獨立,master程式在1個worker程式出錯時可以快速“拉起”新的worker子程式提供服務。核心框架程式碼的優秀設計、模組設計的簡單性;另外,官方提供的常用模組都非常穩定,每個worker程式相對獨立,master程式在1個worker程式出錯時可以快速“拉起”新的worker子程式提供服務。 - 低記憶體消耗
一般情況下,10000個非活躍的HTTP Keep-Alive連線在Nginx中僅消耗2.5MB的記憶體,這是Nginx支援高併發連線的基礎。一般情況下,10000個非活躍的HTTP Keep-Alive連線在Nginx中僅消耗2.5MB的記憶體,這是Nginx支援高併發連線的基礎。 - 熱部署
master管理程式與worker工作程式的分離設計,使得Nginx能夠提供熱部署功能,即可以在7×24小時不間斷服務的前提下,升級Nginx的可執行檔案。當然,它也支援不停止服務就更新配置項、更換日誌檔案等功能。 - 最自由的BSD許可協議
這是Nginx可以快速發展的強大動力。BSD許可協議不只是允許使用者免費使用Nginx,它還允許使用者在自己的專案中直接使用或修改Nginx原始碼,然後釋出。這吸引了無數開發者繼續為Nginx貢獻自己的智慧。
web伺服器的請求處理機制
假如一個請求的處理,需要一把錘子和鉗子
- 多程式方式
主程式生成一個子程式出來和客戶端建立連線進行互動。
每個人都分配一把錘子和鉗子,兩個人互不干擾,但需要很多錘子和鉗子。 - 多執行緒方式
主程式派生出一個執行緒出來和客戶端進行互動。
每個人共用一套錘子和鉗子,你用錘子時我用鉗子,協調進行,優點節省資源,但如果錘子和鉗子意外丟失,將導致所有人無法工作。 - 非同步方式
食堂(同步):排隊打飯,前一個人打完飯,下個人才能打飯。
攝像館:處理大量人流;拍照後登記在冊,出片後通知來取。
nginx基本處理架構
- Nginx啟動後,會產生一個主程式,主程式執行一系列的工作後會產生一個或者多個工作程式
- 在客戶端請求動態站點的過程中,Nginx伺服器還涉及和後端伺服器的通訊。Nginx將接收到的Web請求通過代理轉發到後端伺服器,由後端伺服器進行資料處理和組織;
- Nginx為了提高對請求的響應效率,降低網路壓力,採用了快取機制,將歷史應答資料快取到本地。保障對快取檔案的快速訪問。
master程式
master程式主要用來管理worker程式,具體包括以下主要功能:
- 接收來自外界的訊號
- 處理配置檔案讀取
- 建立,繫結和關閉套接字
<?php //建立socket物件 $socket = socket_create(AF_INET, SOCKET_STREAM, SOL_TCP); //繫結埠號 socket_bind($socket, 80); //監聽 socket_listen($socket,5); //建立的客戶端連線 $client = socket_accept($server); //關閉tcp伺服器 socket_close($server);
- 啟動,終止和維護worker程式數
worker程式
worker程式的主要任務是完成具體的任務邏輯。其主要關注點是與客戶端或後端真實伺服器(此時nginx作為中間代理)之間的資料可讀/可寫等I/O互動事件。
- 接收客戶端請求
- 將請求一次送入各個功能模組進行過濾處理
- 與後端伺服器通訊,接收後端伺服器處理結果
- 資料快取
- 響應客戶端請求
本作品採用《CC 協議》,轉載必須註明作者和本文連結