nginx學習整理

2021-07-11 19:11:23 字數 1511 閱讀 4321

nginx

nginx是乙個高效能http和反向**伺服器,也是乙個imap/pop3/smtp伺服器。

能夠支援高達5w以上併發連線數的響應,nginx選擇了epoll/kqueue作為網路io模型。

nginx也可以作為負載均衡伺服器,nginx使用c語言編寫。

nginx是乙個主程序和多個工作程序,工作程序是單執行緒的。每個工作程序可以採用非同步非阻塞的方式處理客戶端請求。

【擴充套件學習 非同步非阻塞  以及epoll select poll kqueue】

nginx中php是以fastcgi的方法結合nginx。

客戶端傳送請求給nginx伺服器,nginx伺服器通過fastcgi將這個請求交給php進行處理,php處理的結果通過fastcgi返回給nginx伺服器

之後nginx伺服器再將結果返回給客戶端。

fastcgi的知識

cgi是一種通用閘道器介面 是外部應用程式和web伺服器之間的介面標準,在外部應用程式和web伺服器之間傳遞資訊的規程。

cgi規範允許web伺服器執行外部程式,並將它們輸出傳送給web瀏覽器。

fastcgi是對cgi的一種改進。

fastcgi像是乙個常駐記憶體型的cgi,當請求到達時cgi會先fork出乙個程序來進行處理這個請求

但是fastcgi在啟動載入時,就啟動多個cgi直譯器,並等待web伺服器的連線。

當客戶端請求到達webserver的時候,fastcgi程序管理器會選擇乙個cgi直譯器來處理這個請求。

好處是cgi直譯器被載入記憶體不需要每次需要的時候從儲存器中讀取,極大提高了站點的效能

fastcgi的問題是修改php配置的時候不能立刻生效。需要reload一下。

阻塞 客戶端的乙個請求過來,web伺服器接收這個請求,這個請求需要進行io操作,

io操作需要耗費10秒,那麼web伺服器就等待10秒,在這10秒的時間裡,web伺服器拒絕其他的客戶端請求。

非阻塞 

乙個客戶端的請求過來,web伺服器接收這個請求,這個請求需要進行io操作,並且io需要耗時10秒

web伺服器在io操作的這10秒裡,還是可以接收其他客戶端請求,web伺服器將這些請求的檔案描述符放到乙個佇列裡,當io操作準備好

就將資料傳送給這個客戶端。

非同步非阻塞io模型

乙個master執行緒 和多個worker執行緒 ,乙個worker執行緒可以處理多個請求,如果請求的事件沒有處理好,那麼就將這個事件檔案描述符放到乙個佇列中

當事件處理好之後,再去讀請求返回的結果,所以可以處理大量的併發請求,當然這裡的併發只是沒有處理完的請求,由於worker是乙個執行緒

所以,能同時處理的請求只要乙個。

只是在請求間進行不斷地切換而已,切換也是因為非同步事件未準備好,而主動讓出的。

這裡的切換是沒有任何代價,你可以理解為迴圈處理多個準備好的事件,事實上就是這樣的。

與多執行緒相比,這種事件處理方式是有很大的優勢的,不需要建立執行緒,每個請求占用的記憶體也很少,沒有上下文切換,

事件處理非常的輕量級。併發數再多也不會導致無謂的資源浪費(上下文切換)

Nginx 學習書單整理

以下是 nginx到底該怎麼學?的主題綱要。n n n 第一點 nginx對整個架構的幫助是非常大的。n 但是不管你怎麼樣做,總有點隔靴搔癢的感覺,你根本沒辦法做大幅度的優化,因為它的結構已經決定了這些問題的出現。n2009年我到了思科之後,也遇到了同樣問題,但我開始接觸nginx,發現用nginx...

Nginx 學習書單整理

以下是 nginx到底該怎麼學?的主題綱要。第一點 nginx對整個架構的幫助是非常大的。但是不管你怎麼樣做,總有點隔靴搔癢的感覺,你根本沒辦法做大幅度的優化,因為它的結構已經決定了這些問題的出現。2009年我到了思科之後,也遇到了同樣問題,但我開始接觸nginx,發現用nginx改造伺服器之後,它...

Nginx 學習書單整理

以下是 nginx到底該怎麼學?的主題綱要。第一點 nginx對整個架構的幫助是非常大的。但是不管你怎麼樣做,總有點隔靴搔癢的感覺,你根本沒辦法做大幅度的優化,因為它的結構已經決定了這些問題的出現。2009年我到了思科之後,也遇到了同樣問題,但我開始接觸nginx,發現用nginx改造伺服器之後,它...