Nginx 採用 **Master-Worker** 多進程模型:一個 Master 進程讀取配置、管理 Worker 進程;多個 Worker 進程處理實際請求。操作本質是向 Master 進程發送訊號。
nginx -c /usr/nginx/conf/nginx.conf
# -c 指定配置檔路徑,若 nginx 在 PATH 中且配置在預設位置可省略
kill -QUIT `cat /usr/nginx/logs/nginx.pid`
# 或直接 kill -QUIT
kill -TERM
pkill -9 nginx
# 建議先測試配置語法
nginx -t -c /usr/nginx/conf/nginx.conf
# 發送 HUP 訊號:Master 重讀配置、啟動新 Worker、優雅關閉舊 Worker
kill -HUP
# 或
kill -HUP `cat /usr/nginx/logs/nginx.pid`
USR2 訊號:
kill -USR2
舊 Master 將 .pid 改名為 .pid.oldbin,並啟動新 Master + 新 Worker。此時新舊版本**共存處理請求**。
kill -WINCH
舊 Worker 隨請求完成自然退出,新 Worker 接管流量。
QUIT 優雅關閉舊 Master。
kill -QUIT
QUIT,再向舊 Master 發送 HUP 重啟舊 Worker。
kill -QUIT
kill -HUP
ps -ef | grep nginx
# 找 master process 的 PID
# 若配置了 pid 檔路徑 (預設 logs/nginx.pid)
cat /usr/nginx/logs/nginx.pid
nginx -t -c /usr/nginx/conf/nginx.conf
# 輸出 "syntax is ok" "test is successful" 才可安全 reload/upgrade
| 操作 | 訊號 | 指令範例 |
|---|---|---|
| 啟動 | - | nginx -c /path/nginx.conf |
| 優雅停止 | QUIT | kill -QUIT `cat /var/run/nginx.pid` |
| 快速停止 | TERM | kill -TERM |
| 強制停止 | KILL (9) | pkill -9 nginx |
| 平滑重啟 | HUP | kill -HUP |
| 平滑升級啟動新版 | USR2 | kill -USR2 |
| 關閉舊版 Worker | WINCH | kill -WINCH |