深入理解 Nginx 讀書筆記 (第一章)

為什麼選擇 Nginx

  1. 更快: 1)單次請求更快響應 2) 在高峰期比其他服務器更快響應
  2. 高擴展性: 1)由耦合度極低模塊組成 2)模塊皆嵌入到2進制文件中執行
  3. 高可靠性: 1)模塊穩定 2)進程相對獨立 3)worker出錯可快速輪替
  4. 低內存消耗: 1)10,000個非活躍 HTTP Keep-Alive 連接僅消耗 2.5 MB
  5. 高併發: 1)單機支援 100,000 以上連接
  6. 熱部署: 1)基於 master 與 worker 進程分離 2)服務不間斷下,進行升級可執行元件、配置及更換日誌
  7. BSD 許可協議

開發準備工作

必要

  1. Linux 內核版本 2.6 以上 (須靠 epoll 處理高併發)
  2. GCC 編譯器編譯 C 語言

非必要

  1. G++,用來編譯 C++ 以編寫 HTTP 模塊
  2. PCRE(Perl 兼容正則表達式),用來在配置文件中使用正則表達式,pcre-devel 是使用 PCRE 做二次開發所需
  3. zlib, 用來對 HTTP 內容做 gzip 壓縮,減少網路傳輸量
  4. OpenSSL,支持 SSL 協議,或想使用 MD5 或 SHA 雜湊

目錄結構

  1. 源代碼目錄
  2. 編譯中間文件(置於源碼目錄底下,命名為objs)
  3. 部署目錄(莫認為 /usr/local/nginx)
  4. 日誌目錄

Linux 內核參數優化

  1. 須要修改內核參數,使得 Nginx 可以擁有更高的性能
  2. 通常根據業務特性進行調整,作為內容服務器、反向代理,或是提供縮圖用的服務器,會做不同調整


通用高併發 /etc/sysctl.cnf 設置如下,執行 systcl -p 套用:

每個TCP連接都會為了維持滑動窗口而消耗內存(滑動窗口,接收方通過通告發送方自己的窗口大小,從而控制發送方的發送速度),參數 rmem_default/wmem_default/rmem_max/wmem_max 須要衡量物理內存的總大小及最大連接數量 (worker_process * worker_connections) 來決定,滑動窗口過大可能導致 OOM,過小會影響大數據量的傳輸速度

編譯安裝 Nginx

下載源碼後,最簡單的安裝方式為執行以下3行指令:

  1. ./configure: 1) 檢測系統內核及軟件 2) 解析參數 3) 生成中間目錄 4) 根據參數生成 C 源碼文件及 Makefile 文件
  2. make: 1)使用生成的 Makefile 進行編譯 2) 生成目標文件及最終2進制文件
  3. make install: 1) 根據參數將 nginx 部署到指定的安裝目錄 2) 複製二進制文件及配置文件

補充

以下是我練習使用的 dockerfile,按照書上指式的步驟在 centos 系統上安裝 nginx:

你可以在目錄下執行以下指令來進入安裝 nginx 後的環境

編譯完後檢視編譯中間文件

安裝完後檢視部署目錄

命令行控制

默認方式啟動二進制程序,不指定 -c 路徑的情況下,會套用默認的配置文件

檢視程序

關閉服務,使用 quit 參數則等待當前請求處理完畢才停止

運行中重新加載配置,指令會先檢查配置是否有誤,若通過則以 quit 方式重啟

滾動升級 Nginx

  1. 發送訊號通知舊版服務
  2. 啟動新版本服務
  3. 以 quit 方式結束舊服務
Tags:

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。