1.daemon的方式在後臺運行,後臺進程包含一個master進程和多個worker進程。
2.如何調試nginx,關閉後臺模式,以單進程方式運行。
3.nginx的進程模型以及事件處理模型。
4.我們要控制nginx,只需要通過kill向master進程發送信號就行了。
5.每個worker進程都是從master進程fork過來,在master進程裏面,
先建立好需要listen的socket(listenfd)之後,然後再fork出多個worker進程。
6.所有worker進程在註冊listenfd讀事件前搶accept_mutex,
搶到互斥鎖的那個進程註冊listenfd讀事件,在讀事件裏調用accept接受該連接。
7.對於一個基本的web服務器來說,事件通常有三種類型,網絡事件、信號、定時器。
8.關於信號的處理,大家可以學習一些專業書籍。
9. 我們看看nginx是如何處理一個連接的。首先,nginx在啓動時,會解析配置文件, 得到需要監聽的端口與ip地址,然後在nginx的master進程裏面,先初始化好這個監控的socket(創建socket,設置addrreuse等選項,綁定到指定的ip地址端口,再listen), 然後再fork出多個子進程出來,然後子進程會競爭accept新的連接。此時,客戶端就可以向nginx發起連接了。 當客戶端與服務端通過三次握手建立好一個連接後, nginx的某一個子進程會accept成功,得到這個建立好的連接的socket,然後創建nginx對連接的封裝,
即ngx_connection_t結構體。接着,設置讀寫事件處理函數並添加讀寫事件來與客戶端進行數據的交換。 最後,nginx或客戶端來主動關掉連接,到此,一個連接就壽終正寢了。
nginx也是可以作爲客戶端來請求其它server的數據的(如upstream模塊),
此時,與其它server創建的連接,也封裝在ngx_connection_t中。作爲客戶端,
nginx先獲取一個ngx_connection_t結構體,然後創建socket,並設置socket的屬性( 比如非阻塞)。
然後再通過添加讀寫事件,調用connect/read/write來調用連接,最後關掉連接,並釋放ngx_connection_t。
10.nginx通過設置worker_connectons來設置每個進程支持的最大連接數,最大連接數是worker_connections * worker_processes。
11.nginx會控制進程是否添加accept事件,只有獲得了accept_mutex的進程纔會去添加accept事件。
12.nginx使用一個叫ngx_accept_disabled的變量來控制是否去競爭accept_mutex鎖。
13.ngx_http_request_t是對一個http請求的封裝。
14.用filter來過濾數據,對數據進行加工,如truncked傳輸、gzip壓縮等。
nginx學習的一點摘錄
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
Nginx學習第一篇;Mac下安裝Nginx並配置
Xunxianren007
2020-06-21 14:41:37
Nginx學習之路(八)Nginx中的事件驅動過程詳解-----以listenfd註冊過程爲例
曾柯
2020-06-16 16:51:52
Nginx雙機主備(Keepalived實現)
独行侠梦
2020-03-27 09:21:53
centos7 nginx安裝及其使用
一个爬坑的Coder
2020-03-17 22:42:45
Nginx 編譯部署之configure命令
微服务技术栈
2020-03-11 19:46:00
Nginx 簡介和安裝部署
微服务技术栈
2020-03-11 19:46:00
nginx bootstrap中font-awesome圖標不顯示的問題
一个爬坑的Coder
2020-03-06 12:23:16
你真的瞭解如何將Nginx配置爲Web服務器嗎
落冰翼
2020-02-23 05:42:18
用故事說透HTTPS
弑天倾城
2020-02-22 08:54:44
nginx編譯安裝配置模塊大全
弑天倾城
2020-02-22 08:54:44
nginx虛擬主機配置
弑天倾城
2020-02-22 08:54:44
一個小工具幫你搞定實時監控Nginx服務器
弑天倾城
2020-02-22 08:54:44