Nginx Nginx 工作原理

2021-10-07 04:44:17 字數 1142 閱讀 3183

nginx 在是以守護程序的形式在後台執行,採用多執行緒+非同步非阻塞io事件模型來處理各種請求。多執行緒模型包括乙個 master 程序,多個 worker 程序,一般 worker 程序個數是根據伺服器 cpu 核數來決定的。master 程序負責管理 nginx 本身和其他 worker 程序。

所謂熱部署,就是修改配置檔案 nginx.conf 後,不需要重啟 nginx,不需要中斷請求,就能讓配置檔案生效。

在修改完配置檔案後,會重新生成新的 worker 程序,會以新的配置進行處理請求,而且新的請求也會交給新的 worker 程序處理,老的 worker 程序,會在執行完請求直接關閉。

nginx 採用了 linux 的 epoll 模型,epoll 模型是基於事件驅動機制,它可以監控多個事件是否準備完畢,如果 ok,那麼放入 epoll 佇列中,這個過程是非同步的。worker 只需要從 epoll 佇列迴圈處理即可。

乙個請求由乙個 worker 程序處理。

nginx 在內部維護了乙個 accept_mutex,其實就是鎖,確保在某一時刻,乙個請求只能被乙個 worker 程序捕獲。當乙個 worker 程序在 accept 這個連線之後,就開始讀取請求,解析請求,處理請求,產生資料後,再返回給客戶端,最後才斷開連線。

我們知道,很多請求來了,他們大多需要讀寫資料,發生io請求,此時程式就會發生中斷,如果此時我們一直等待io呼叫結束,才繼續工作,那麼這種就是阻塞的,那麼很顯然很多請求來了,都處於等待狀態,cpu就將處於空閒狀態,為了提供高併發的能力,nginx採用的是非阻塞的方式。如果發生io中斷,那麼你去做你的事情,但是過一段時間來看看io呼叫是否結束,這就是非阻塞:你可以做更多的事情,但是你得時不時的檢查中斷狀態,帶來的開銷也不小。

為了更高效,nginx利用了linux的epoll模型(其他系統類似):

epoll模型,提供一種事件驅動機制,它可以監控多個事件是否準備好了,如果準備好了,那麼就放入epoll佇列中。這種機制是非同步的。通過這樣,worker程序只需要迴圈處理epoll佇列中的請求,我們只需要在請求間不斷切換,而這種切換是不需要付出什麼代價的,通過這種迴圈處理已經準備好的請求,從而nginx可以高效的處理高併發的問題。

《nginx》 Nginx配置詳解

nginx是lgor sysoev為俄羅斯訪問量第二的rambler.ru站點設計開發的。從2004年發布至今,憑藉開源的力量,已經接近成熟與完善。nginx功能豐富,可作為http伺服器,也可作為反向 伺服器,郵件伺服器。支援fastcgi ssl virtual host url rewrite...

Nginx Nginx效能優化

在大多數情況下,乙個常規安裝的nginx對 來說已經能很好地工作了。然而如果想擠壓出nginx的效能,就需要了解哪些指令會影響nginx效能,在本文中將解釋nginx的哪些設定可以微調。需要注意一點,這是乙個簡單的預覽 那些可以通過微調來提高效能設定的概述,不同的環境可能情況不太一樣。對於nginx...

Nginx nginx訪問控制

1 nginx的訪問模組 1 基於ip的訪問控制 http access module 2 基於使用者的信任登入 http auth basic module 1 語法配置 語法 allow deny address 預設是無 作用的模組 http server location 2 配置測試 修改...