### 運行和控制Nginx
### nginx命令行參數
不像許多其他軟件系統,Nginx 僅有幾個命令行參數,完全通過配置文件來配置
-c </path/to/config> **為 Nginx 指定一個配置文件,來代替缺省的。**
**-t** 不運行,而僅僅測試配置文件。nginx 將檢查配置文件的語法的正確性,并嘗試打開配置文件中所引用到的文件。
**-v** 顯示 nginx 的版本。
**-V** 顯示 nginx 的版本,編譯器版本和配置參數。
?
### nginx控制信號
可以使用信號系統來控制主進程。默認,nginx 將其主進程的 pid 寫入到 /usr/local/nginx/nginx.pid 文件中。通過傳遞參數給 ./configure 或使用 **pid** 指令,來改變該文件的位置。
主進程可以處理以下的信號:
<table><tbody><tr><td>TERM, INT</td> <td>快速關閉</td> </tr><tr><td>QUIT</td> <td>從容關閉</td> </tr><tr><td>HUP</td> <td>重載配置<br/> 用新的配置開始新的工作進程<br/> 從容關閉舊的工作進程</td> </tr><tr><td>USR1</td> <td>重新打開日志文件</td> </tr><tr><td>USR2</td> <td>平滑升級可執行程序。</td> </tr><tr><td>WINCH</td> <td>從容關閉工作進程</td> </tr></tbody></table>
盡管你不必自己操作工作進程,但是,它們也支持一些信號:
| TERM, INT | 快速關閉 |
|-----|-----|
| QUIT | 從容關閉 |
| USR1 | 重新打開日志文件 |
?
### nginx 啟動、停止、重啟命令
**nginx啟動**
sudo /usr/local/nginx/nginx (nginx二進制文件絕對路徑,可以根據自己安裝路徑實際決定)
?
**nginx從容停止命令,等所有請求結束后關閉服務**
ps -ef |grep nginx
kill -QUIT nginx主進程號
?
**nginx 快速停止命令,立刻關閉nginx進程**
ps -ef |grep nginx
kill -TERM nginx主進程號
**如果以上命令不管用,可以強制停止**
kill -9 nginx主進程號
?
如果嫌麻煩可以不用查看進程號,直接使用命令進行操作
其中/usr/local/nginx/nginx.pid 為nginx.conf中pid命令設置的參數,用來存放nginx主進程號的文件
kill -信號類型(HUP|TERM|QUIT) `cat /usr/local/nginx/nginx.pid`
例如
~~~
kill?-QUIT?`cat?/usr/local/nginx/nginx.pid`
~~~
**nginx重啟命令**
nginx重啟可以分成幾種類型
1.簡單型,先關閉進程,修改你的配置后,重啟進程。
kill -QUIT `cat /usr/local/nginx/nginx.pid`
sudo /usr/local/nginx/nginx
2.[重新加載配置文件,不重啟進程,不會停止處理請求](#)
3.[平滑更新nginx二進制,不會停止處理請求](#)
?
### 使用信號加載新的配置
Nginx 支持幾個信號,能在它運行時控制其操作。其中最普通的是 15 ,用來中止運行的進程:
~~~
#?<strong>ps?aux?|?egrep?'(PID|nginx)'</strong>
USER???????PID?%CPU?%MEM????VSZ???RSS?TTY??????STAT?START???TIME?COMMAND
root??????2213??0.0??0.0???6784??2036??????????Ss???03:01???0:00?nginx:?master?process?/usr/sbin/nginx?-c?/etc/nginx/nginx.conf
#?<strong>kill?-15?2213</strong>
~~~
而最有趣的是能平滑改變 nginx 配置的選項(請注意,在重載前,要先測試一下配置文件):
?
~~~
#<strong>?nginx?-t?-c?/etc/nginx/nginx.conf</strong>
2006/09/16?13:07:10?[info]?15686#0:?the?configuration?file?/etc/nginx/nginx.conf?syntax?is?ok
2006/09/16?13:07:10?[info]?15686#0:?the?configuration?file?/etc/nginx/nginx.conf?was?tested?successfully
#<strong>?ps?aux?|?egrep?'(PID|nginx)'</strong>
USER???????PID?%CPU?%MEM????VSZ???RSS?TTY??????STAT?START???TIME?COMMAND
root??????2213??0.0??0.0???6784??2036??????????Ss???03:01???0:00?nginx:?master?process?/usr/sbin/nginx?-c?/etc/nginx/nginx.conf
<strong>#?kill?-HUP?2213</strong>
~~~
當 nginx 接收到 HUP 信號,它會嘗試先解析配置文件(如果指定配置文件,就使用指定的,否則使用默認的),成功的話,就應用新的配置文件(例如:重新打開日志文件或監聽的套接 字)。之后,nginx 運行新的工作進程并從容關閉舊的工作進程。通知工作進程關閉監聽套接字但是繼續為當前連接的客戶提供服務。所有客戶端的服務完成后,舊的工作進程被關閉。 如果新的配置文件應用失敗,nginx 將繼續使用舊的配置進行工作。
?
### 平滑升級到新的二進制代碼
你可以在不中斷服務的情況下 - 新的請求也不會丟失,使用新的 nginx 可執行程序替換舊的(當升級新版本或添加/刪除服務器模塊時)。
首先,使用新的可執行程序替換舊的(最好做好備份),然后,發送 USR2 (kill -USR2 pid)信號給主進程。主進程將重命名它的 **.pid** 文件為 **.oldbin** (比如:**/usr/local/nginx/logs/nginx.pid.oldbin**),然后執行新的可執行程序,依次啟動新的主進程和新的工作進程:
?
~~~
??PID??PPID?USER????%CPU???VSZ?WCHAN??COMMAND
33126?????1?root?????0.0??1164?pause??nginx:?master?process?/usr/local/nginx/sbin/nginx
33134?33126?nobody???0.0??1368?kqread?nginx:?worker?process?(nginx)
33135?33126?nobody???0.0??1380?kqread?nginx:?worker?process?(nginx)
33136?33126?nobody???0.0??1368?kqread?nginx:?worker?process?(nginx)
36264?33126?root?????0.0??1148?pause??nginx:?master?process?/usr/local/nginx/sbin/nginx
36265?36264?nobody???0.0??1364?kqread?nginx:?worker?process?(nginx)
36266?36264?nobody???0.0??1364?kqread?nginx:?worker?process?(nginx)
36267?36264?nobody???0.0??1364?kqread?nginx:?worker?process?(nginx)
~~~
在這時,兩個 nginx 實例會同時運行,一起處理輸入的請求。要逐步停止舊的實例,你必須發送 WINCH 信號給舊的主進程,然后,它的工作進程就將開始從容關閉:
?
~~~
??PID??PPID?USER????%CPU???VSZ?WCHAN??COMMAND
33126?????1?root?????0.0??1164?pause??nginx:?master?process?/usr/local/nginx/sbin/nginx
33135?33126?nobody???0.0??1380?kqread?nginx:?worker?process?is?shutting?down?(nginx)
36264?33126?root?????0.0??1148?pause??nginx:?master?process?/usr/local/nginx/sbin/nginx
36265?36264?nobody???0.0??1364?kqread?nginx:?worker?process?(nginx)
36266?36264?nobody???0.0??1364?kqread?nginx:?worker?process?(nginx)
36267?36264?nobody???0.0??1364?kqread?nginx:?worker?process?(nginx)
~~~
一段時間后,舊的工作進程處理了所有已連接的請求后退出,就僅由新的工作進程來處理輸入的請求了:
?
~~~
??PID??PPID?USER????%CPU???VSZ?WCHAN??COMMAND
33126?????1?root?????0.0??1164?pause??nginx:?master?process?/usr/local/nginx/sbin/nginx
36264?33126?root?????0.0??1148?pause??nginx:?master?process?/usr/local/nginx/sbin/nginx
36265?36264?nobody???0.0??1364?kqread?nginx:?worker?process?(nginx)
36266?36264?nobody???0.0??1364?kqread?nginx:?worker?process?(nginx)
36267?36264?nobody???0.0??1364?kqread?nginx:?worker?process?(nginx)
~~~
這時,因為舊的服務器還尚未關閉它監聽的套接字,所以,通過下面的幾步,你仍可以恢復舊的服務器:
- 發送 HUP 信號給舊的主進程 - 它將在不重載配置文件的情況下啟動它的工作進程
- 發送 QUIT 信號給新的主進程,要求其從容關閉其工作進程
- 發送 TERM 信號給新的主進程,迫使其退出
- 如果因為某些原因新的工作進程不能退出,向其發送 KILL 信號
新的主進程退出后,舊的主進程會由移除 **.oldbin** 前綴,恢復為它的 **.pid** 文件,這樣,一切就都恢復到升級之前了。
如果嘗試升級成功,而你也希望保留新的服務器時,發送 QUIT 信號給舊的主進程使其退出而只留下新的服務器運行:
?
~~~
??????PID??PPID?USER????%CPU???VSZ?WCHAN??COMMAND
????36264?????1?root?????0.0??1148?pause??nginx:?master?process?/usr/local/nginx/sbin/nginx
????36265?36264?nobody???0.0??1364?kqread?nginx:?worker?process?(nginx)
????36266?36264?nobody???0.0??1364?kqread?nginx:?worker?process?(nginx)
????36267?36264?nobody???0.0??1364?kqread?nginx:?worker?process?(nginx)
~~~
- 主要文檔
- Nginx功能概述
- 為什么選擇Nginx
- Nginx安裝
- 運行和控制Nginx
- 配置符號參考
- 優化 Nginx
- 常見問題(FAQ)
- 調試 nginx
- 核心模塊
- Nginx主模塊
- Nginx事件模塊
- 基本模塊
- http核心模塊
- HttpIndex模塊
- HttpAccess模塊
- HttpAuthBasic模塊
- HttpAutoindex模塊
- Browser模塊
- Charset模塊
- HttpEmptyGif模塊
- HttpFcgi模塊
- Geo模塊
- HttpGzip模塊
- HttpHeaders模塊
- HttpIndex模塊
- HttpReferer模塊
- HttpLimit zone
- HttpLimitReqest模塊
- HttpLog模塊
- map
- Memcached
- HttpProxy模塊
- HttpRewrite模塊
- HttpSSI模塊
- HttpUserId
- 其他模塊
- Addition模塊
- EmbeddedPerl
- flv
- HttpGzipStatic
- RandomIndex
- HttpGeoIP
- HttpRealIp
- HttpSSL
- StubStatus模塊
- HttpSubstitution
- HttpDav模塊
- GooglePerftools
- HttpXSLT
- HttpSecureLink
- HttpImageFilter
- mail模塊
- MailCore
- MailAuth
- MailProxy
- MailSSL
- 安裝
- nginx在windows上的安裝
- nginx在freebsd上的安裝
- nginx在ubuntu上的安裝
- nginx在fedora上的安裝
- nginx php-fpm安裝配置
- 配置示例和方法
- 完整例子
- 完整例子2
- 虛擬主機
- 負載均衡
- nginx防盜鏈
- HWLoadbalancerCheckErrors