首先從官網(wǎng)上http://nginx.org/下載最新的stable version源碼,當前最新版本為nginx-1.10.2.tar.gz烹骨。
1、 configure
解壓之后材泄,會發(fā)現(xiàn)里面有一個名為“configure”的文件:
configure本身是一個Shell腳本沮焕,中間會調(diào)用<nginx-source-path>/auto/
目錄下別的腳本執(zhí)行各種任務(wù)。根據(jù)不同的用途拉宗,auto目錄下面的腳本各司其職峦树,有檢查編譯器版本的,有檢查操作系統(tǒng)版本的旦事,有檢查標準庫版本的魁巩,有檢查模塊依賴情況的,有關(guān)于安裝的姐浮,有關(guān)于初始化的谷遂,有關(guān)于多線程檢查的等等。configure作為一個總驅(qū)動卖鲤,調(diào)用這些腳本去生成版本信息頭文件肾扰、默認被包含的模塊的聲明代碼和makefile文件,版本信息頭文件和默認被包含的模塊的聲明代碼被放置在新創(chuàng)建的objs目錄下蛋逾。
插段廣告集晚,先來普及一下有關(guān)makefile的知識。
一般來說区匣,無論是C還是C++偷拔,首先要把源文件編譯成中間代碼文件,在Windows下也就是 .obj 文件,UNIX下是 .o 文件莲绰,即 Object File欺旧,這個動作叫做編譯(compile),每個源文件都應(yīng)該對應(yīng)于一個中間目標文件(O文件或是OBJ文件)蛤签。然后再把大量的Object File合成執(zhí)行文件切端,這個動作叫作鏈接(link)。
編譯時顷啼,編譯器需要保證語法的正確踏枣,函數(shù)與變量的正確。對于后者钙蒙,通常是需要告訴編譯器頭文件的所在位置(頭文件中應(yīng)該只是聲明茵瀑,而定義應(yīng)該放在C/C++文件中),只要所有的語法正確躬厌,編譯器就可以編譯出中間目標文件马昨。
鏈接時,主要是鏈接函數(shù)和全局變量扛施,所以鸿捧,我們可以使用這些中間目標文件(O文件或是OBJ文件)來鏈接我們的應(yīng)用程序。鏈接器并不管函數(shù)所在的源文件疙渣,只管函數(shù)的中間目標文件(Object File)匙奴,在大多數(shù)時候,由于源文件太多妄荔,編譯生成的中間目標文件太多泼菌,而在鏈接時需要明顯地指出中間目標文件名,這對于編譯很不方便啦租,所以哗伯,我們要給中間目標文件打個包,在Windows下這種包叫“庫文件”(Library File)篷角,也就是 .lib 文件焊刹,在UNIX下,是Archive File恳蹲,也就是 .a 文件虐块。
總結(jié)一下,源文件首先會生成中間目標文件阱缓,再由中間目標文件生成執(zhí)行文件非凌。在編譯時举农,編譯器只檢測程序語法荆针,和函數(shù)、變量是否被聲明。如果函數(shù)未被聲明航背,編譯器會給出一個警告喉悴,但可以生成Object File。而在鏈接程序時玖媚,鏈接器會在所有的Object File中找尋函數(shù)的實現(xiàn)箕肃,如果找不到,那到就會報鏈接錯誤(Linker Error)今魔。
Linux下的make命令用于編譯源代碼勺像,但是它執(zhí)行之前需要一個 makefile 文件以告訴它需要怎么樣去編譯和鏈接程序。
廣告完畢错森,繼續(xù)來說Nginx吟宦。
由于我們下載下來的是源碼,需要編譯后才能安裝涩维。在編譯安裝Nginx之前殃姓,我們需要使用configure命令做大量“幕后”工作,包括檢測操作系統(tǒng)內(nèi)核和已經(jīng)安裝的軟件瓦阐,參數(shù)解析蜗侈,中間目錄生成以及根據(jù)各種參數(shù)生成的.c文件、makefile文件等睡蟋。
所以踏幻,第一步需要運行configure腳本,該命令可以攜帶多種參數(shù)戳杀,使用configure --help
查看參數(shù)列表:
例如:
-
--prefix=<path>
:指定Nginx安裝路徑叫倍,默認為/usr/local/nginx
。 -
--sbin-path=<path>
:指定Nginx可執(zhí)行文件安裝路徑豺瘤,默認為<prefix>/sbin/nginx
吆倦。 -
--conf-path=<path>
:指定配置文件路徑,默認為<prefix>/conf/nginx.conf
坐求。 -
--pid-path=<path>
:指定pid文件路徑蚕泽,默認為<prefix>/logs/nginx.pid
。
注意桥嗤,Nginx的一些模塊需要依賴其他lib庫须妻,如果系統(tǒng)沒有安裝,運行configure命令的時候會報這樣的錯誤:
./configure: error: the HTTP rewrite module requires the PCRE library.You can either disable the module by using --without-http_rewrite_module option, or install the PCRE library into the system, or build the PCRE library statically from the source with nginx by using --with-pcre=<path> option.
一般需要提前安裝三個lib庫:
- rewrite模塊依賴的PCRE庫
PCRE(Perl Compatible Regular Expressions)是一個Perl庫泛领,包括 perl 兼容的正則表達式庫荒吏。Rewrite 主要的功能就是實現(xiàn)URL的重寫,Nginx的Rewrite依賴PCRE庫來實現(xiàn)正則匹配渊鞋。 - gzip模塊依賴的 zlib 庫
我們在Linux中經(jīng)常會用到后綴為“.gz”的文件绰更,它們就是gzip格式的∏萍罚現(xiàn)今已經(jīng)成為Internet 上使用非常普遍的一種數(shù)據(jù)壓縮格式,或者說一種文件格式儡湾。
HTTP協(xié)議上的GZIP編碼是一種用來改進WEB應(yīng)用程序性能的技術(shù)特恬。大流量的WEB站點常常使用GZIP壓縮技術(shù)來讓用戶感受更快的速度。這一般是指WWW服務(wù)器中安裝的一個功能徐钠,當有人來訪問這個服務(wù)器中的網(wǎng)站時癌刽,服務(wù)器就將網(wǎng)頁內(nèi)容壓縮后傳輸?shù)絹碓L的電腦瀏覽器中顯示出來。一般對純文本內(nèi)容可壓縮到原大小的40%尝丐。
zlib是一個通用的壓縮開源庫显拜,提供了在內(nèi)存中壓縮和解壓的函數(shù),包括對解壓后數(shù)據(jù)的校驗爹袁。Nginx依賴zlib庫來實現(xiàn)gzip格式的數(shù)據(jù)壓縮讼油。 - ssl 模塊依賴的openssl庫
SSL是Secure Sockets Layer(安全套接層協(xié)議)的縮寫,可以在Internet上提供秘密性傳輸呢簸。OpenSSL 是一個安全套接字層密碼庫矮台,囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及SSL協(xié)議根时。
Nginx依賴openssl庫實現(xiàn)https安全連接等方面的功能瘦赫。
2、make && make install
make是Linux下的編譯命令蛤迎,它根據(jù)makefile文件中描述的規(guī)則來自動進行編譯确虱。
make install是Linux下的安裝命令。
可以直接輸入make && make install
一并完成編譯與安裝操作替裆。默認的安裝路徑為/usr/local/nginx
校辩。
安裝完畢后,輸入nginx -v
如果出現(xiàn)如下的版本信息辆童,證明安裝成功:
nginx version: nginx/1.10.2
使用nginx
命令啟動Nginx宜咒,瀏覽器輸入127.0.0.1:80
,會看到Nginx的默認頁面:
3把鉴、常用命令
使用nginx -h
可列出所有可使用的命令列表:
常用命令如下:
- nginx
啟動Nginx故黑,可以利用“-c”參數(shù)指定要使用的配置文件。 - nginx –s stop
停止Nginx庭砍,等效于“nginx –s quit”场晶。“-s”代表采用向 Nginx 發(fā)送信號怠缸。注:stop是快速停止nginx诗轻,可能并不保存相關(guān)信息;quit是完整有序的停止nginx揭北,并保存相關(guān)信息扳炬。 - nginx –s reload
重載配置吏颖,修改配置文件后需要使用該命令使之生效。 - nginx –v
查看Nginx的版本信息鞠柄。 - nginx –t
檢查配置文件是否正確侦高。 - nginx –c filename
指定配置文件的路徑為“filename”嫉柴。默認路徑為“conf/nginx.conf” - nginx -g
臨時指定一些全局配置項厌杜,以使新的配置項生效,例如:nginx -g "pid /var/nginx/test.pid"
计螺,意味著會把pid文件寫到/var/nginx/test.pid中夯尽。
-g
參數(shù)的約束條件是指定的配置項不能與默認路徑下的nginx.conf中的配置項相沖突,否則無法啟動登馒。就像上例那樣匙握,類似這樣的配置項:pid logs/nginx.pid
,是不能存在于默認的nginx.conf中的陈轿。
另一個約束條件是圈纺,以-g
方式啟動的Nginx服務(wù)執(zhí)行其他命令行時,需要把-g
參數(shù)也帶上麦射,否則可能出現(xiàn)配置項不匹配的情形蛾娶。例如,如果要停止Nginx服務(wù)潜秋,那么需要執(zhí)行下面代碼:
nginx -g "pid /var/nginx/test.pid;" -s stop
如果不帶上-g "pid /var/nginx/test.pid;"
蛔琅,那么找不到pid文件,也會出現(xiàn)無法停止服務(wù)的情況峻呛。