Nginx 進(jìn)程分為主進(jìn)程(master process)和若干工作進(jìn)程(work process),其中工作進(jìn)程指明了nginx要開(kāi)啟的進(jìn)程數(shù)抚芦,據(jù)官方說(shuō)法迈螟,一般開(kāi)一個(gè)就夠了尔崔,多開(kāi)幾個(gè),可以減少機(jī)器io帶來(lái)的影響季春。 一般為當(dāng)前機(jī)器總cpu核心數(shù)的1到2倍。如载弄,我的機(jī)器為雙核,那么開(kāi)4個(gè)足夠了宇攻。新版本的Nginx中work_processes可配置為auto
關(guān)于Nginx的安裝
由于我的環(huán)境是CentOS7,為了方便逞刷,使用yum安裝
yum install nginx.x86_64
# 使用此方式安裝的Nginx主要目錄如下:
配置:/etc/nginx/nginx.conf #主配置文件
/etc/nginx/conf.d/ #子配置文件
log:/var/log/nginx/*.log
緩存:/var/lib/nginx/,# --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi
Nginx默認(rèn)主頁(yè):/usr/share/nginx/html/
這種方式屬于入門(mén)方式夸浅,其實(shí)Nginx的強(qiáng)大之處不只是Nginx本身,還有其眾多的Module题篷,使用yum安裝的話就不方便安裝它的Module,所以如果需要安裝其Module的話番枚,還是使用編譯安裝吧,可以參考官方文檔-編譯安裝或者中文文檔
下面提供編譯安裝例子
sudo ./configure --prefix=/etc/nginx \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--http-client-body-temp-path=/var/cache/nginx/client_temp \
--http-proxy-temp-path=/var/cache/nginx/proxy_temp \
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
--http-scgi-temp-path=/var/cache/nginx/scgi_temp \
--user=dev \
--group=developers \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_stub_status_module \
--with-http_auth_request_module \
--with-threads \
--with-stream \
--with-stream_ssl_module \
--with-http_slice_module \
--with-mail \
--with-mail_ssl_module \
--with-file-aio \
--with-http_v2_module \
--with-ipv6
sudo make && make install
如果想要安裝某些模塊葫笼,只需要重新編譯即可(--with-xxxx)xxx表示某些Module,關(guān)于模塊安裝拗馒,可以參考:http://www.nginx.cn/doc/ 和
http://www.ttlsa.com/nginx/how-to-install-nginx-third-modules/
Nginx命令行參數(shù)
參數(shù) | 作用 |
---|---|
-c </path/to/filename> | 指定Nginx啟動(dòng)的配置文件路星,默認(rèn):/etc/nginx/nginx.conf |
-s <signal> | 向主進(jìn)程發(fā)送信號(hào):stop, quit, reopen, reload |
-t | 僅測(cè)試配置文件是否正確,不運(yùn)行Nginx |
Nginx控制信號(hào)
信號(hào) | 功能 |
---|---|
TERM, INT | 快速關(guān)閉 |
QUIT | 從容關(guān)閉 |
HUP | 重載配置诱桂,用新的配置開(kāi)始新的工作進(jìn)程洋丐,從容關(guān)閉舊的工作進(jìn)程 |
USR1 | 重新打開(kāi)日志文件 |
USR2 | 平滑升級(jí)可執(zhí)行程序 |
WINCH | 從容關(guān)閉工作進(jìn)程 |
eg.
ps -ef |grep nginx
kill -QUIT nginx主進(jìn)程號(hào)
eg. 使用信號(hào)量重新平滑加載配置(請(qǐng)注意,在重載前挥等,要先測(cè)試一下配置文件)
ps -ef |grep nginx
kill -HUP nginx主進(jìn)程號(hào)
當(dāng) nginx 接收到 HUP 信號(hào)友绝,它會(huì)嘗試先解析配置文件(如果指定配置文件,就使用指定的肝劲,否則使用默認(rèn)的)迁客,成功的話郭宝,就應(yīng)用新的配置文件(例如:重新打開(kāi)日志文件或監(jiān)聽(tīng)的套接 字)。之后掷漱,nginx 運(yùn)行新的工作進(jìn)程并從容關(guān)閉舊的工作進(jìn)程粘室。通知工作進(jìn)程關(guān)閉監(jiān)聽(tīng)套接字但是繼續(xù)為當(dāng)前連接的客戶提供服務(wù)。所有客戶端的服務(wù)完成后卜范,舊的工作進(jìn)程被關(guān)閉衔统。 如果新的配置文件應(yīng)用失敗,nginx 將繼續(xù)使用舊的配置進(jìn)行工作先朦。
eg. 平滑升級(jí)到新的二進(jìn)制代碼(當(dāng)升級(jí)新版本或添加/刪除服務(wù)器模塊時(shí))
可以在不中斷服務(wù)的情況下 - 新的請(qǐng)求也不會(huì)丟失缰冤,使用新的 nginx 可執(zhí)行程序替換舊的
- 首先,使用新的可執(zhí)行程序替換舊的(最好做好備份)喳魏,然后棉浸,發(fā)送 USR2 (kill -USR2 pid)信號(hào)給主進(jìn)程。主進(jìn)程將重命名它的 .pid 文件為 .oldbin (比如:/usr/local/nginx/logs/nginx.pid.oldbin)刺彩,然后執(zhí)行新的可執(zhí)行程序迷郑,依次啟動(dòng)新的主進(jìn)程和新的工作進(jìn)程
- 在這時(shí),兩個(gè) nginx 實(shí)例會(huì)同時(shí)運(yùn)行创倔,一起處理輸入的請(qǐng)求嗡害。要逐步停止舊的實(shí)例,你必須發(fā)送 WINCH 信號(hào)給舊的主進(jìn)程畦攘,然后霸妹,它的工作進(jìn)程就將開(kāi)始從容關(guān)閉
- 一段時(shí)間后,舊的工作進(jìn)程處理了所有已連接的請(qǐng)求后退出知押,就僅由新的工作進(jìn)程來(lái)處理輸入的請(qǐng)求了
- 這時(shí)叹螟,因?yàn)榕f的服務(wù)器還尚未關(guān)閉它監(jiān)聽(tīng)的套接字,所以台盯,通過(guò)下面的幾步罢绽,你仍可以恢復(fù)舊的服務(wù)器:
- 發(fā)送 HUP 信號(hào)給舊的主進(jìn)程 - 它將在不重載配置文件的情況下啟動(dòng)它的工作進(jìn)程
- 發(fā)送 QUIT 信號(hào)給新的主進(jìn)程,要求其從容關(guān)閉其工作進(jìn)程
- 發(fā)送 TERM 信號(hào)給新的主進(jìn)程静盅,迫使其退出良价,如果因?yàn)槟承┰蛐碌墓ぷ鬟M(jìn)程不能退出明垢,向其發(fā)送 KILL 信號(hào)
- 新的主進(jìn)程退出后栈虚,舊的主進(jìn)程會(huì)由移除 .oldbin 前綴,恢復(fù)為它的 .pid 文件魂务,這樣泌射,一切就都恢復(fù)到升級(jí)之前了熔酷。
- 如果嘗試升級(jí)成功拒秘,而你僅希望保留新的服務(wù)器時(shí)臭猜,發(fā)送 QUIT 信號(hào)給舊的主進(jìn)程使其退出而只留下新的服務(wù)器運(yùn)行
Nginx 啟動(dòng)、停止羹应、重啟命令
方式一园匹、使用以上所述的信號(hào)量機(jī)制
方式二劫灶、使用Nginx 的 -s命令行參數(shù)配置
1. stop SIGTERM 快速停止
2. quit SIGQUIT 從容關(guān)閉
3. reopen SIGUSR1 重新打開(kāi)日志文件
4. reload SIGHUP 重新加載配置