在 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