Nginx的介紹和使用
1.什么是Nginx
Nginx(發音同 engine x)是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,并在一個BSD-like 協議下發行。由俄羅斯的程序設計師Igor Sysoev所開發,最初供俄國大型的入口網站及搜尋引擎Rambler(俄文:Рамблер)使用。 其特點是占有內存少,并發能力強,事實上nginx的并發能力確實在同類型的網頁伺服器中表現較好.目前中國大陸使用nginx網站用戶有:新浪、網易、 騰訊,另外知名的微網志Plurk也使用nginx。
優點:
(2)Nginx 是一個很強大的高性能Web和反向代理服務器,它具有很多非常優越的特性:
在高連接并發的情況下,Nginx是Apache服務器不錯的替代品:Nginx在美國是做虛擬主機生意的老板們經常選擇的軟件平臺之一。能夠支持高達 50,000 個并發連接數的響應,感謝Nginx為我們選擇了 epoll and kqueue作為開發模型。
(3)Nginx作為負載均衡服務器:Nginx 既可以在內部直接支持 Rails 和 PHP 程序對外進行服務,也可以支持作為 HTTP代理服務器對外進行服務。Nginx采用C進行編寫,不論是系統資源開銷還是CPU使用效率都比 Perlbal 要好很多。
作為郵件代理服務器:Nginx 同時也是一個非常優秀的郵件代理服務器(最早開發這個產品的目的之一也是作為郵件代理服務器),Last. fm 描述了成功并且美妙的使用經驗。
(4)Nginx 是一個安裝非常的簡單,配置文件非常簡潔(還能夠支持perl語法),Bugs非常少的服務器:Nginx 啟動特別容易,并且幾乎可以做到7*24不間斷運行,即使運行數個月也不需要重新啟動。你還能夠不間斷服務的情況下進行軟件版本的升級。
2.下載和安裝Nginx
Nginx的官方網站是http://nginx.org/cn/, 英文主頁為http://nginx.net,從這里可以獲得Nginx的最新版本信息。Nginx有三個版本:穩定版、開發版和歷史穩定版。開發版更新 較快,包含最新的功能和bug的修復,但同時也可能會遇到新的bug,開發版一旦更新穩定下來,就會被加入穩定版分支中。然而有些新功能不一定會被加到舊 的穩定版中去。穩定版本更新較慢,但是bug較少,可以作為生產環境的首選,因此通常建議使用穩定版。歷史穩定版本為以往穩定版本的匯總,不包含最新的功 能。
這里選擇當前的穩定版本nginx-0.7.65作為介紹對象,開始介紹編譯安裝。在安裝Nginx之前,確保系統已經安裝了gcc、 openssl-devel、 pcre-devel和zlib-devel軟件庫。
Linux開發庫是在安裝系統時通過手動選擇安裝的,gcc、 openssl-devel、zlib-devel三個軟件庫可以通過安裝光盤直接選擇安裝得到,而pcre-devel庫默認不在系統光盤中,所以這里重點介紹pcre-devel庫。
安裝Nginx所需的pcre-devel庫
安裝pcre庫是為了使Nginx支持HTTP Rewrite 模塊。下面進行安裝,過程如下。
開始安裝Nginx
Nginx的安裝非常簡單。在默認情況下,經過編譯安裝的Nginx包含了大部分可用模塊。可以通過“./configure --help”選項設 置各個模塊的使用情況,例如對不需要的http_ssi模塊,可通過“--without-http_ssi_module”方式關閉此模塊;同理,如果 需要“http_perl”模塊,那么可以通過“--with-http_perl_module”方式安裝此模塊。下面是安裝過程:
在上面的configure選項中“--with-http_stub_status_module”可以用來啟用 Nginx 的 NginxStatus 功能,以監控 Nginx 的當前狀態。
至此,Nginx已經安裝完成了。
3.Nginx配置
Nginx的配置文件是一個純文本文件,它一般位于Nginx安裝目錄的conf目錄 下,整個配置文件是以block的形式組織的。每個block一般以一個大括號“{}”來表示,block可以分為幾個層次,整個配置文件中Main指令 位于最高層,在Main層下面可以有Events、HTTP等層級,而在HTTP層中又包含有Server層,即 server block,server block中又可分為location層,并且一個server block中可以包含多個 location block。
一個完整的配置文件結構如下圖所示。
在了解完配置文件結構之后,就可以開始配置和調試Nginx了。
nginx.conf的配置文件詳解如下:
4.nginx啟動,重啟,關閉命令
停止操作
停止操作是通過向nginx進程發送信號(什么是信號請參閱linux文 章)來進行的
步驟1:查詢nginx主進程號
ps -ef | grep nginx
在進程列表里 面找master進程,它的編號就是主進程號了。
步驟2:發送信號
從容停止Nginx:
kill -QUIT 主進程號
快速停止Nginx:
kill -TERM 主進程號
強制停止Nginx:
pkill -9 nginx
另外, 若在nginx.conf配置了pid文件存放路徑則該文件存放的就是Nginx主進程號,如果沒指定則放在nginx的logs目錄下。有了pid文 件,我們就不用先查詢Nginx的主進程號,而直接向Nginx發送信號了,命令如下:
kill -信號類型 '/usr/nginx/logs/nginx.pid'
平滑重啟
如果更改了配置就要重啟Nginx,要先關閉Nginx再打開?不是的,可以向Nginx 發送信號,平滑重啟。
平滑重啟命令:
kill -HUP 住進稱號或進程號文件路徑
或者使用
/usr/nginx/sbin/nginx -s reload
注意,修改了配置文件后最好先檢查一下修改過的配置文件是否正 確,以免重啟后Nginx出現錯誤影響服務器穩定運行。判斷Nginx配置是否正確命令如下:
nginx -t -c /usr/nginx/conf/nginx.conf
或者
/usr/nginx/sbin/nginx -t
平滑升級
如果服務器正在運行的Nginx要進行升級、添加或刪除模塊時,我們需 要停掉服務器并做相應修改,這樣服務器就要在一段時間內停止服務,Nginx可以在不停機的情況下進行各種升級動作而不影響服務器運行。
步驟1:
如 果升級Nginx程序,先用新程序替換舊程序文件,編譯安裝的話新程序直接編譯到Nginx安裝目錄中。
步 驟2:執行命令
kill -USR2 舊版程序的主進程號或進程文件名
此時舊的Nginx主進程將會把自己的進程文件改名為.oldbin,然后執行新版 Nginx。新舊Nginx會同市運行,共同處理請求。
這時要逐步停止舊版 Nginx,輸入命令:
kill -WINCH 舊版主進程號
慢慢舊的工作進程就都會隨著任務執行完畢而退出,新版的Nginx的工作進程會逐漸取代舊版 工作進程。
此 時,我們可以決定使用新版還是恢復到舊版。
不重載配置啟動新/舊工作進程
kill -HUP 舊/新版主進程號
從容關閉舊/新進程
kill -QUIT 舊/新主進程號
如果此時報錯,提示還有進程沒有結束就用下面命令先關閉舊/新工作進程,再關閉主進程號:
kill -TERM 舊/新工作進程號
這樣下來,如果要恢復到舊版本,只需要上面的幾個步 驟都是操作新版主進程號,如果要用新版本就上面的幾個步驟