作者:Gakki
nginx 命令詳解
- 輸入命令:
nginx -h
nginx -h - -?,-h:查看幫助
- -v:顯示版本信息并退出
- -V:顯示版本和配置選項(xiàng)信息,然后退出
- -t:檢測(cè)配置文件是否有語(yǔ)法錯(cuò)誤,然后退出
- -T:檢測(cè)配置文件語(yǔ)法,打印它并退出
- -q:在配置測(cè)試期間,禁止顯示非錯(cuò)誤信息
- -s:發(fā)送信號(hào)給主進(jìn)程,stop 強(qiáng)制退出,quit 優(yōu)雅的退出,reopen 重啟,reload 重新加載配置
- -p:設(shè)置 nginx 目錄
- -c:指定啟動(dòng)使用的配置文件(常用)
- -g:在配置文件之外設(shè)置全局指令
啟動(dòng)
- 直接啟動(dòng)
- 進(jìn)入 nginx 安裝目錄找到 sbin 文件夾,然后啟動(dòng) nginx。
命令:cd /sbin進(jìn)入到 sbin 目錄下
命令:./nginx啟動(dòng) nginx
- 指定配置文件方式啟動(dòng):
命令:./nginx -c /usr/local/nginx/conf/nginx.conf
注:/usr/local/nginx/conf/nginx.conf為 nginx 配置文件,根據(jù)自己實(shí)際情況修改。
修改配置之后重啟
檢查 nginx 配置
- 進(jìn)入 nginx 下的 sbin 目錄下執(zhí)行命令:
命令:./nginx -t
注:該命令是檢查配置文件是否有語(yǔ)法錯(cuò)誤。如果有錯(cuò),會(huì)提示出多少行出錯(cuò)。
- 或者檢查指定配置文件
命令:./nginx -t -c /usr/local/app/nginx/conf/nginx.conf
檢查 nginx 配置語(yǔ)法是否有誤
平滑的重啟
修改配置無(wú)誤之后,重新加載配置啟動(dòng) nginx 。進(jìn)入 nginx 下的 sbin 目錄下執(zhí)行命令:
執(zhí)行重載命令:./nginx -s reload平滑的重啟 reload 處理過(guò)程:
nginx 的架構(gòu)是一個(gè) master 進(jìn)程和多個(gè) worker 進(jìn)程。其中 master 充當(dāng)整個(gè)進(jìn)程組與用戶的交互接口,同時(shí)對(duì)進(jìn)程進(jìn)行監(jiān)護(hù),管理 worker 進(jìn)程來(lái)實(shí)現(xiàn)重啟服務(wù)、平滑升級(jí)、更換日志文件、配置文件實(shí)時(shí)生效等功能。worker 用來(lái)處理基本的網(wǎng)絡(luò)事件,worker 之間是平等的,他們共同競(jìng)爭(zhēng)來(lái)處理來(lái)自客戶端的請(qǐng)求。
平滑的重啟,重啟的是 worker 進(jìn)程, master 沒有重啟。處理過(guò)程:master 監(jiān)聽系統(tǒng)信號(hào),如果 master 監(jiān)聽到系統(tǒng)信號(hào) HUP 后,會(huì)先檢查配置文件的有效性,如果新的配置文件應(yīng)用失敗,nginx 將繼續(xù)使用舊的配置進(jìn)行工作;如果配置文件沒有問(wèn)題就會(huì)重新 load 配置文件,創(chuàng)建若干個(gè)新的 worker 進(jìn)程 N,新的 worker 進(jìn)程會(huì)啟動(dòng)新的配置文件。然后 master 向舊的 worker 進(jìn)程發(fā)送信號(hào),優(yōu)雅停機(jī)。最后依然是 N+1 個(gè)進(jìn)程。
注:
- 新的 worker 進(jìn)程依舊監(jiān)聽原來(lái)的 port。因?yàn)?nginx 是父子進(jìn)程模型,子進(jìn)程繼承了父進(jìn)程的所有內(nèi)容。因此,子進(jìn)程也會(huì)監(jiān)聽相同的 port,又因?yàn)樽舆M(jìn)程沒有執(zhí)行 bind 操作,只有父進(jìn)程才會(huì)進(jìn)行 bind 操作。所以不會(huì)存在端口被占用。
- 新 worker 進(jìn)程用新的配置啟動(dòng)的時(shí)候,
此時(shí)有 2N+1 給進(jìn)程在監(jiān)聽原來(lái)的 port。1個(gè) master + N 個(gè)新的 worker + N 個(gè)舊的 worker。 - 平滑重啟之后,發(fā)現(xiàn) master 的進(jìn)程號(hào)不變,worker 的進(jìn)程號(hào)會(huì)改變。
- 關(guān)閉舊的 worker 進(jìn)程的時(shí)候,舊的 worker 子進(jìn)程需要完成所屬任務(wù)后,才可以關(guān)閉。如果遇到舊的worker 子進(jìn)程正在進(jìn)行任務(wù),那么舊的子進(jìn)程將繼續(xù)為當(dāng)前連接的客戶提供服務(wù),當(dāng)所有的客戶端服務(wù)完成后,舊的worker子進(jìn)程被關(guān)閉。
Linux 重啟之后自動(dòng)啟動(dòng) nginx
- 設(shè)置 Linux 重啟之后 nginx 自動(dòng)啟動(dòng)命令:
systemctl enable nginx - 查看狀態(tài),命令:
systemctl is-enabled nginx或者service nginx status
查看 nginx 狀態(tài)
關(guān)閉 nginx
進(jìn)入 nginx 下的 sbin 目錄下執(zhí)行命令:
快速停止 nginx 命令:./nginx -s stop
完整有序的停止 nginx:./nginx -s quit;這個(gè)命令會(huì)等待所有請(qǐng)求結(jié)束后再關(guān)閉 nginx。使用 kill 命令關(guān)閉 nginx
- 先查看 nginx 進(jìn)程,找到主進(jìn)程號(hào)。然后再使用 kill 命令殺死 nginx 進(jìn)程。
查看 nginx 進(jìn)程號(hào)命令:ps -ef | grep nginx
從容停止 nginx 命令:kill -QUIT 主進(jìn)程號(hào)
快速停止 nginx 命令:kill -TERM 主進(jìn)程號(hào)
強(qiáng)制停止 nginx 命令:kill -HUP 主進(jìn)程號(hào)
平滑重啟 nginx 命令:kill -9 nginx
查找并殺死所有 nginx 進(jìn)程:ps aux | grep nginx |awk '{print $2}' | xargs kill -9


