Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Nginx 進階控制指南:啟動、重載、停止、平滑升級與熱備份全解析

編輯:Linux 教學

核心機制:主進程與 Worker 進程架構

Nginx 採用 Master-Worker 多進程模型:

  • Master 進程:讀取配置、管理 Worker、處理信號、平滑升級協調。只有一個。
  • Worker 進程:實際處理網路請求、磁碟 I/O、上游通訊。數量通常設為 CPU 核心數(worker_processes auto;)。

所有控制操作本質上是向 Master 進程發送特定信號,由 Master 協調 Worker 完成對應動作。

查詢 Master 進程 PID

# 方法一:ps 過濾
ps -ef | grep nginx
# 找到「master process」那一行,第二欄即 PID

# 方法二:讀取 pid 檔(需 nginx.conf 配置 pid 路徑)
cat /usr/local/nginx/logs/nginx.pid
# 或自定義路徑:cat /var/run/nginx.pid

三種停止模式:由緩到急

模式信號指令行為適用場景
從容停止QUITnginx -s quit
kill -QUIT
Master 停止接收新連接,等待所有 Worker 處理完當前請求後自然退出計劃維護、發布窗口、優雅下線
快速停止TERM / INTnginx -s stop
kill -TERM
Master 立即終結所有 Worker,強制關閉連接,不等待請求完成緊急故障、配置錯誤導致服務異常、需立即釋放埠口
強制殺死KILL (9)pkill -9 nginx
kill -9
作業系統層面強制回收資源,Nginx 無任何清理機會,可能殘留共享記憶體、鎖檔案進程假死、失去控制、最後手段

平滑重載配置(熱生效)

# 推薦方式:nginx 命令列工具(自動讀取 pid 檔)
nginx -s reload

# 等效信號方式
kill -HUP 
# 或直接用 pid 檔
kill -HUP `cat /usr/local/nginx/logs/nginx.pid`

流程:

  1. Master 校驗新配置語法(等同 nginx -t)。
  2. 語法通過 → Master 啟動新 Worker 組(新配置生效)。
  3. Master 向舊 Worker 發送 QUIT 信號。
  4. 舊 Worker 完成當前請求後退出,新 Worker 全面接管。
  5. 全程零停機、零連接中斷。

黃金法則:執行 reload 前務必先執行 nginx -t 驗證語法,避免語法錯誤導致 Master 拒絕重載,舊配置繼續運行但新配置不生效,造成認知偏差。

配置語法檢查

# 指定配置檔檢查
nginx -t -c /usr/local/nginx/conf/nginx.conf

# 使用預設路徑檢查
nginx -t

# 僅顯示編譯參數與模組
nginx -V

平滑升級二進制(零停機換版本)

適用於 Nginx 版本升級、新增/移除模組、修補安全漏洞:

  1. 替換二進制檔:將新編譯的 nginx 覆蓋舊檔(或放入新目錄並調整啟動腳本)。
  2. 發送 USR2 信號:
    kill -USR2 <舊Master_PID>
    舊 Master 將 nginx.pid 重命名為 nginx.pid.oldbin,然後啟動新 Master(載入新二進制)。新舊 Master 共存,雙倍 Worker 同時服務。
  3. 逐步淘汰舊版:
    # 通知舊 Master 關閉其 Worker
    kill -WINCH <舊Master_PID>
    舊 Worker 隨請求完成自然退出,新 Worker 漸漸接管所有流量。
  4. 決策:保留新版或回滾舊版 發現問題,回滾舊版
    決策操作
    確認新版穩定,正式切換向舊 Master發送 QUIT:kill -QUIT <舊Master_PID>。舊 Master 退出,新 Master 成為唯一 Master。
    向新 Master發送 QUIT:kill -QUIT <新Master_PID>。新 Master 退出,舊 Master 重新接管(需再次 WINCH 重啟舊 Worker)。

日誌切割配合(USR1 信號)

配合 logrotate 實現無縫日誌輪轉:

/var/log/nginx/*.log {
    daily
    rotate 30
    compress
    delaycompress
    missingok
    notifempty
    create 640 nginx adm
    sharedscripts
    postrotate
        [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

USR1 通知 Master 重新打開日誌檔案,舊檔案被 logrotate 壓縮歸檔,新請求寫入新檔案,無需重啟 Nginx。

常用操作速查卡

操作推薦指令備註
啟動nginx 或 systemctl start nginx指定配置:nginx -c /path/to/nginx.conf
驗證配置nginx -t任何變更後必執行
平滑重載nginx -s reload修改配置後生效
從容停止nginx -s quit優雅下線
快速停止nginx -s stop緊急停機
平滑升級kill -USR2 → kill -WINCH <舊PID> → kill -QUIT <舊/新PID>零停機換版本
日誌輪轉kill -USR1 配合 logrotate
查看編譯參數nginx -V模組、路徑、編譯器資訊

總結

Nginx 的信號控制機制設計精妙,實現了從配置熱載到二進制平滑升級的全生命週期零停機運維。掌握 QUIT/TERM/HUP/USR1/USR2/WINCH 六大信號語義,配合 nginx -t 預檢習慣,是每位 Nginx 運維與開發者的必備內功。

Copyright © Windows教程網 All Rights Reserved