Nginx 的應用場景主要有三個:
Nginx 可以通過本地文件系統提供靜态資源的服務,例如純靜态的 HTML 頁面等。
很多應用服務的運行效率是很低的,QPS,TPS,并發等都是受限的,所以需要把很多應用服務組成一個集群,向用戶提供高可用性的服務,這個時候需要 Nginx 的反向代理功能,而應用服務的動态擴容需要負載均衡功能,另外一個,Nginx 層還需要做緩存。因此反向代理服務主要是三個功能:
有時候應用服務本身有很多性能問題,但是數據庫服務要比應用服務好的多,業務場景比較簡單,并發性和 TPS 都要遠高于應用服務,所以這個時候可以由 Nginx 直接去訪問數據庫或者 Redis,還可以利用 Nginx 的強大的并發性來實現應用防火牆的 API 服務。
Nginx 架構基礎
Nginx 對外提供服務時,主要有三種流量會到達 Nginx:WEB、EMAIL、TCP 流量。這三種流量到達 Nginx 後,會分别由傳輸層狀态機、應用層狀态機、MAIL 狀态機來處理。當内存不足以緩存所有的靜态資源時,會退化成阻塞的磁盤調用,這個時候需要一個線程池來處理,對于每一個處理完的請求記錄訪問日志和錯誤日志,日志也是記錄到磁盤中的。
Nginx 有四種進程:
為什麼 worker 進程需要很多個?
這是因為,Nginx 采用了事件驅動的模型後,它期望 worker 進程可以從頭到尾占滿一顆 CPU,這樣可以更加高效的利用整顆 CPU,提高 CPU 的緩存命中率,另外還可以将 worker 進程與某一個 CPU 核綁定在一起。
在前面說到了 Nginx 的命令行,其實很多 Nginx 的信号都是通過向 master 進程發送信号來實現的。
master 進程會監控 worker 進程,而監控是通過 Linux 規定的當子進程退出時需要向父進程發送 CHLD 信号實現的。這樣可以當出現 bug 時,立刻拉起 worker。
master 進程可以接收以下信号:
worker 進程可以接收以下信号:
USR2 和 WINCH 沒有對應的信号,隻能通過 kill 發送。
stop 和 quit 的區别是,一個是立即退出,一個是優雅的停止。
在上一篇文章中,講了熱部署的流程,那麼熱部署具體的流程是怎麼樣的呢?
這裡面,定時器的作用是,如果時間超時了,但是連接還沒有處理完畢,就會強制退出進程。另外,Nginx 隻能處理 HTTP 的優雅關閉,websocket 、TCP、UDP 的代理都做不到,worker 不解析數據。
以上這些内容,就是 Nginx 命令行和信号的完整過程。下一講開始講 HTTP 模塊。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!