1. 程式人生 > >Nginx工作原理

Nginx工作原理

Nginx由核心和模組組成。

Nginx本身做的工作實際很少,當它接到一個HTTP請求時,它僅僅是通過查詢配置檔案將此次請求對映到一個location block,而此location中所配置的各個指令則會啟動不同的模組去完成工作,因此模組可以看做Nginx真正的勞動工作者。通常一個location中的指令會涉及一個handler模組和多個filter模組(當然,多個location可以複用同一個模組)。handler模組負責處理請求,完成響應內容的生成,而filter模組對響應內容進行處理。

使用者根據自己的需要開發的模組都屬於第三方模組。正是有了這麼多模組的支撐,Nginx的功能才會如此強大。

Nginx的模組從結構上分為核心模組、基礎模組和第三方模組:

核心模組:HTTP模組、EVENT模組和MAIL模組 基礎模組:HTTP Access模組、HTTP FastCGI模組、HTTP Proxy模組和HTTP Rewrite模組, 第三方模組:HTTP Upstream Request Hash模組、Notice模組和HTTP Access Key模組。

Nginx的模組從功能上分為如下三類:

Handlers(處理器模組)。此類模組直接處理請求,並進行輸出內容和修改headers資訊等操作。Handlers處理器模組一般只能有一個。 Filters (過濾器模組)。此類模組主要對其他處理器模組輸出的內容進行修改操作,最後由Nginx輸出。 Proxies (代理類模組)。此類模組是Nginx的HTTP Upstream之類的模組,這些模組主要與後端一些服務比如FastCGI等進行互動,實現服務代理和負載均衡等功能。

Nginx程序模型

 Nginx預設採用多程序工作方式,Nginx啟動後,會執行一個master程序和多個worker程序。其中master充當整個程序組與使用者的互動介面,同時對程序進行監護,管理worker程序來實現重啟服務、平滑升級、更換日誌檔案、配置檔案實時生效等功能。worker用來處理基本的網路事件,worker之間是平等的,他們共同競爭來處理來自客戶端的請求。

nginx的程序模型如圖所示:

在建立master程序時,先建立需要監聽的socket(listenfd),然後從master程序中fork()出多個worker程序,如此一來每個worker程序多可以監聽使用者請求的socket。一般來說,當一個連線進來後,所有在Worker都會收到通知,但是隻有一個程序可以接受這個連線請求,其它的都失敗,這是所謂的驚群現象。nginx提供了一個accept_mutex(互斥鎖),有了這把鎖之後,同一時刻,就只會有一個程序在accpet連線,這樣就不會有驚群問題了。

先開啟accept_mutex選項,只有獲得了accept_mutex的程序才會去新增accept事件。nginx使用一個叫ngx_accept_disabled的變數來控制是否去競爭accept_mutex鎖。ngx_accept_disabled = nginx單程序的所有連線總數 / 8 -空閒連線數量,當ngx_accept_disabled大於0時,不會去嘗試獲取accept_mutex鎖,ngx_accept_disable越大,於是讓出的機會就越多,這樣其它程序獲取鎖的機會也就越大。不去accept,每個worker程序的連線數就控制下來了,其它程序的連線池就會得到利用,這樣,nginx就控制了多程序間連線的平衡。

每個worker程序都有一個獨立的連線池,連線池的大小是worker_connections。這裡的連線池裡面儲存的其實不是真實的連線,它只是一個worker_connections大小的一個ngx_connection_t結構的陣列。並且,nginx會通過一個連結串列free_connections來儲存所有的空閒ngx_connection_t,每次獲取一個連線時,就從空閒連線連結串列中獲取一個,用完後,再放回空閒連線連結串列裡面。一個nginx能建立的最大連線數,應該是worker_connections * worker_processes。當然,這裡說的是最大連線數,對於HTTP請求本地資源來說,能夠支援的最大併發數量是worker_connections * worker_processes,而如果是HTTP作為反向代理來說,最大併發數量應該是worker_connections * worker_processes/2。因為作為反向代理伺服器,每個併發會建立與客戶端的連線和與後端服務的連線,會佔用兩個連線。

Nginx處理HTTP請求流程

 http請求是典型的請求-響應型別的的網路協議。http是檔案協議,所以我們在分析請求行與請求頭,以及輸出響應行與響應頭,往往是一行一行的進行處理。通常在一個連線建立好後,讀取一行資料,分析出請求行中包含的method、uri、http_version資訊。然後再一行一行處理請求頭,並根據請求method與請求頭的資訊來決定是否有請求體以及請求體的長度,然後再去讀取請求體。得到請求後,我們處理請求產生需要輸出的資料,然後再生成響應行,響應頭以及響應體。在將響應傳送給客戶端之後,一個完整的請求就處理完了。

處理流程圖:

相關推薦

Nginx 工作原理

cti nec 需要 led 流程圖 技術 模型 方式 png Nginx 工作原理 Nginx由內核和模塊組成。   Nginx本身做的工作實際很少,當它接到一個HTTP請求時,它僅僅是通過查找配置文件將此次請求映射到一個location block,而此location

Nginx工作原理及相關介紹

handle 利用 ice fff 高並發 解析器 異常 creat 為什麽 Nginx工作原理及相關介紹一、Nginx工作原理與模塊介紹1、Nginx基本工作原理NGINX以高性能的負載均衡器,緩存,和web服務器聞名。Nginx由內核和模塊組成,其中,內核的設計非常微小

nginx 工作原理和配置文件講解

打開 cli ssi http 狀態碼 stat pro clu libs red 1、nginx 介紹 Nginx (engine x) 是一個高性能的HTTP和反向代理服務,也是一個IMAP/POP3/SMTP服務。Nginx是由伊戈爾·賽索耶夫為俄羅斯訪問量第二的Ra

Nginx工作原理和優化 漏洞

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

nginx工作原理和實現高併發請求的原因

一、程序、執行緒?程序是具有一定獨立功能的,在計算機中已經執行的程式的實體。在早期系統中(如linux 2.4以前),程序是基本運作單位,在支援執行緒的系統中(如windows,linux2.6)中,執行緒才是基本的運作單位,而程序只是執行緒的容器。程式 本身只是指令、資料及

Nginx 工作原理和優化、漏洞

1.  Nginx的模組與工作原理 Nginx由核心和模組組成,其中,核心的設計非常微小和簡潔,完成的工作也非常簡單,僅僅通過查詢配置檔案將客戶端請求對映到一個location block(location是Nginx配置中的一個指令,用於URL匹配),而在這個location中所

nginx 工作原理,程序模型,事件處理,配置系統和模組化體系

nginx在啟動後,在unix系統中會以daemon的方式在後臺執行,後臺程序包含一個master程序和多個worker程序。 當然nginx也是支援多執行緒的方式的,只是我們主流的方式還是多程序的

Nginx工作原理

Nginx由核心和模組組成。 Nginx本身做的工作實際很少,當它接到一個HTTP請求時,它僅僅是通過查詢配置檔案將此次請求對映到

Ingress-nginx工作原理和實踐

本文記錄/分享 目前專案的 K8s 部署結構和請求追蹤改造方案 ![](https://img2020.cnblogs.com/blog/587720/202103/587720-20210318104941838-1800951094.png) 這個圖算是一個通用的前後端分離的 k8s 部署結構: N

Nginx 模塊的工作原理

nginx 模塊的工作原理Nginx 模塊的工作原理 Handlers :(處理器模塊)此模塊直接處理請求 並且進行內容傳輸以及修改headres信息等操作。Handlers模塊只能處理一個。Filters(處理器模塊):此類模塊只需要對其他服務器模塊輸出的內容進行修改操做,最後又Nginx操做proxies

Nginx基本概念、模組化思想、工作流程、工作原理

前言: 近日因需拓展學習,在網上收集Nginx相關資料。本文介紹其基本概念和基本原理,為以後的應用大小基礎。本人內容為轉載,組合,僅供學習。 一 、Nginx基本概念 (1)、介紹        

K8S 原始碼探祕 之 nginx-ingress 工作原理分析

一、引言        Nginx-ingress 是 Kubernetes 生態中的重要成員,主要負責向外暴露服務,同時提供負載均衡等附加功能;        截至目前,nginx-ingress 已經能夠

Nginx的基本功能和工作原理

Nginx的基本功能 反向代理 正向代理 負載均衡 HTTP伺服器(包含動靜分離) 反向代理和正向代理 正向代理: 簡單的說,我是一個使用者,我無法直接訪問一個網站,但是我能訪問一個代理伺服器,這個代理伺服器能訪問那個我不能訪問的網站,於 是我先連上代理伺服器,告訴它我需要那

uWSGI+django+nginx工作原理流程

相關資料 wsgi:一種實現python解析的通用介面標準/協議,是一種通用的介面標準或者介面協議,實現了python web程式與伺服器之間互動的通用性。 利用它,web.py或bottle或者django等等的python web開發框架,就可以輕鬆地部署

Nginx工作原理

 在正式運營環境下,部署Nginx時都是使用一個master程序來管理多個worker程序,一般情況下,worker程序的數量與伺服器上的CPU核心數相等。每一個worker程序都是繁忙的,它們在真正地提供網際網路服務,master程序則很“清閒”,只負責監控管理worker程序。work

uWSGI+django+nginx工作原理流程與部署歷程

一、前言 獻給和我一樣懵懂中不斷汲取知識,進步的人們。 霓虹閃爍,但人們真正需要的,只是一個可以照亮前路的燭光 二、必要的前提 2.1 準備知識 django 一個基於python的開源web框架,請確保自己熟悉它的框架目錄結構。

Nginx之(四)工作原理

眾所周知,nginx效能高,而nginx的高效能與其架構是分不開的4.1 程序模型Nginx在啟動後,會有一個master程序和多個worker程序。master程序主要用來管理worker程序,包含:接收來自外界的訊號,向各worker程序傳送訊號,監控worker程序的執行狀態,當worker程序退出後

你真的掌握 LVS、Nginx 及 HAProxy 的工作原理

arr 機制 交換 不支持 多路復用 網站架構 緩存服務器 有意義 輸出 你真的掌握 LVS、Nginx 及 HAProxy 的工作原理嗎 當前大多數的互聯網系統都使用了服務器集群技術,集群是將相同服務部署在多臺服務器上構成一個集群整體對外提供服務,這些集群可以是 Web

一文詳解 LVS、Nginx 及 HAProxy 工作原理( 附大圖 )

當前大多數的網際網路系統都使用了伺服器叢集技術,叢集是將相同服務部署在多臺伺服器上構成一個叢集整體對外提供服務,這些叢集可以是 Web 應用伺服器叢集,也可以是資料庫伺服器叢集,還可以是分散式快取伺服器叢集等等。     在實際應用中,在 Web 伺服器叢集之前總會有一臺負載均

VMware快照的工作原理

所有 整合 100g 性能 不變 小時 此外 建立 console VMware中的快照是對VMDK在某個時間點的“拷貝”,這個“拷貝”並不是對VMDK文件的復制,而是保持磁盤文件和系統內存在該時間點的狀態,以便在出現故障後虛擬機能夠恢復到該時間點。如果對某個虛擬機創建了多