nginx -s reload 避坑指南!


在 nginx 中,如果我修改了一個配置文件,或者新增了一個配置文件。按照群里網友的描述,我需要關閉 nginx,或者重啟 nginx,比較麻煩,而且這個過程中會中斷服務的提供。那么有沒有熱配置,或者是不重啟就可以生效呢?

答案當然是有的。那就是使用 nginx -s reload 命令。

-s 代表的是向主進程發送信號。其中信號有 4 個,stop, quit, reopen, reload。

reload 就是重新加載的意思。nginx -s reload 命令,合起來的作用就是重新加載配置文件。

下面一起看一個例子:

vi nginx.conf
# 將 tcp_nopush on; 前面的注釋去掉,放開注釋
# 然后保存編輯
nginx -s reload

這樣就可以做到不停服務,平滑的更新 nginx 的配置文件。這樣做的好處就是客戶體驗好,比如我正在數據傳輸,如果你這時重啟 nginx,可能就會造成數據丟失。這個時候,我們就可以溫柔的采用 nginx -s reload 命令加載配置文件。

在比如,我們的負載均衡,灰度發布,熱部署。都可以采用修改配置的這種方式進行。

假設我現在有兩台機器,A 和 B。那么我們就可以通過更改配置,proxy_pass http://A; 或 proxy_pass  http://B; 做到熱部署。通過更改配置文件,切換請求流量,完成服務發布。

但是,重點 :是 要所有鏈接都斷開后,配置才會生效。nginx -s reload 是平滑重啟,不會強制結束正在工作的連接,需要等所有連接都結束才會重啟。

所以不建議 使用nginx -s reload 命令。

先 ps -ef | grep nginx ,會出現5個關於nginx的進程,如果5個進程的id分別為 100、101、102、103、104

殺掉所有nginx進程 kill -9 101 102 103 104

進入目錄 cd /usr/sbin

重啟 nginx -c /etc/nginx/nginx.conf

至於 nginx -s reload 不建議使用,本人親試,有時候無效

啟動nginx的時候也可以 cd /usr/sbin,然后直接 nginx ,
(-c 配置文件,表示根據指定文件啟動,如果該配置文件和安裝的nginx命令不是一個版本,會報錯)
啟動后,nginx -t 可以查看是根據那個配置文件啟動的,所以建議linux系統里只保留一個nginx.conf文件,
以免出現沖突,一般nginx.conf在兩個位置,分別是/usr/local/nginx/conf/nginx.conf和/etc/nginx/nginx.conf


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM