首先從官網上http://nginx.org/下載最新的stable version源碼,當前最新版本爲nginx-1.10.2.tar.gz。nginx
2.1 configure
解壓以後,會發現裏面有一個名爲「configure」的文件:正則表達式
configure自己是一個Shell腳本,中間會調用<nginx-source-path>/auto/目錄下別的腳本執行各類任務。根據不一樣的用途,auto目錄下面的腳本各司其職,有檢查編譯器版本的,有檢查操做系統版本的,有檢查標準庫版本的,有檢查模塊依賴狀況的,有關於安裝的,有關於初始化的,有關於多線程檢查的等等。configure做爲一個總驅動,調用這些腳本去生成版本信息頭文件、默認被包含的模塊的聲明代碼和makefile文件,版本信息頭文件和默認被包含的模塊的聲明代碼被放置在新建立的objs目錄下。算法
插段廣告,先來普及一下有關makefile的知識。瀏覽器
通常來講,不管是C仍是C++,首先要把源文件編譯成中間代碼文件,在Windows下也就是 .obj 文件,UNIX下是 .o 文件,即 Object File,這個動做叫作編譯(compile),每一個源文件都應該對應於一箇中間目標文件(O文件或是OBJ文件)。而後再把大量的ObjectFile合成執行文件,這個動做叫做連接(link)。安全
編譯時,編譯器須要保證語法的正確,函數與變量的正確。對於後者,一般是須要告訴編譯器頭文件的所在位置(頭文件中應該只是聲明,而定義應該放在C/C++文件中),只要全部的語法正確,編譯器就能夠編譯出中間目標文件。服務器
連接時,主要是連接函數和全局變量,因此,咱們可使用這些中間目標文件(O文件或是OBJ文件)來連接咱們的應用程序。連接器並無論函數所在的源文件,只管函數的中間目標文件(Object File),在大多數時候,因爲源文件太多,編譯生成的中間目標文件太多,而在連接時須要明顯地指出中間目標文件名,這對於編譯很不方便,因此,咱們要給中間目標文件打個包,在Windows下這種包叫「庫文件」(Library File),也就是 .lib 文件,在UNIX下,是Archive File,也就是 .a 文件。多線程
總結一下,源文件首先會生成中間目標文件,再由中間目標文件生成執行文件。在編譯時,編譯器只檢測程序語法,和函數、變量是否被聲明。若是函數未被聲明,編譯器會給出一個警告,但能夠生成Object File。而在連接程序時,連接器會在全部的Object File中找尋函數的實現,若是找不到,那到就會報連接錯誤(Linker Error)。函數
Linux下的make命令用於編譯源代碼,可是它執行以前須要一個 makefile 文件以告訴它須要怎麼樣去編譯和連接程序。性能
廣告完畢,繼續來講Nginx。網站
因爲咱們下載下來的是源碼,須要編譯後才能安裝。在編譯安裝Nginx以前,咱們須要使用configure命令作大量「幕後」工做,包括檢測操做系統內核和已經安裝的軟件,參數解析,中間目錄生成以及根據各類參數生成的.c文件、makefile文件等。
因此,第一步須要運行configure腳本,該命令能夠攜帶多種參數,使用「configure --help」查看參數列表:
例如:
--prefix=<path> - 指定Nginx安裝路徑,默認爲 /usr/local/nginx。
--sbin-path=<path> -指定Nginx可執行文件安裝路徑,默認爲<prefix>/sbin/nginx。
--conf-path=<path> -指定配置文件路徑,默認爲<prefix>/conf/nginx.conf。
--pid-path=<path> - 指定pid文件路徑,默認爲 <prefix>/logs/nginx.pid。
……等等。
注意,Nginx的一些模塊須要依賴其餘lib庫,若是系統沒有安裝,運行configure命令的時候會報這樣的錯誤:
./configure: error: the HTTP rewrite module requiresthe PCRE library.You can either disable the module by using--without-http_rewrite_module option, or install the PCRE library into thesystem, or build the PCRE library statically from the source with nginx byusing --with-pcre=<path> option.
通常須要提早安裝三個lib庫:
(1)rewrite模塊依賴的PCRE庫
PCRE(PerlCompatible Regular Expressions)是一個Perl庫,包括 perl 兼容的正則表達式庫。Rewrite 主要的功能就是實現URL的重寫,Nginx的Rewrite依賴PCRE庫來實現正則匹配。
(2)gzip模塊依賴的 zlib 庫
咱們在Linux中常常會用到後綴爲「.gz」的文件,它們就是gzip格式的。現今已經成爲Internet 上使用很是廣泛的一種數據壓縮格式,或者說一種文件格式。
HTTP協議上的GZIP編碼是一種用來改進WEB應用程序性能的技術。大流量的WEB站點經常使用GZIP壓縮技術來讓用戶感覺更快的速度。這通常是指WWW服務器中安裝的一個功能,當有人來訪問這個服務器中的網站時,服務器就將網頁內容壓縮後傳輸到來訪的電腦瀏覽器中顯示出來。通常對純文本內容可壓縮到原大小的40%。
zlib是一個通用的壓縮開源庫,提供了在內存中壓縮和解壓的函數,包括對解壓後數據的校驗。Nginx依賴zlib庫來實現gzip格式的數據壓縮。
(3)ssl 模塊依賴的openssl庫
SSL是Secure Sockets Layer(安全套接層協議)的縮寫,能夠在Internet上提供祕密性傳輸。OpenSSL 是一個安全套接字層密碼庫,囊括主要的密碼算法、經常使用的密鑰和證書封裝管理功能及SSL協議。
Nginx依賴openssl庫實現https安全鏈接等方面的功能。
2.2 make && make install
make是Linux下的編譯命令,它根據makefile文件中描述的規則來自動進行編譯。
make install是Linux下的安裝命令。
能夠直接輸入「make&& make install」一併完成編譯與安裝操做。默認的安裝路徑爲「/usr/local/nginx」。
安裝完畢後,輸入「nginx-v」若是出現以下的版本信息,證實安裝成功:
nginx version: nginx/1.10.2
使用「nginx」命令啓動Nginx,瀏覽器輸入「127.0.0.1:80」,會看到Nginx的默認頁面:
2.3 經常使用命令
使用「nginx -h」可列出全部可以使用的命令列表:
經常使用命令以下:
l nginx
啓動Nginx,能夠利用「-c」參數指定要使用的配置文件。
l nginx –s stop
中止Nginx,等效於「nginx –s quit」。「-s」表明採用向 Nginx 發送信號。注:stop是快速中止nginx,可能並不保存相關信息;quit是完整有序的中止nginx,並保存相關信息。
l nginx –s reload
重載配置,修改配置文件後須要使用該命令使之生效。
l nginx –v
查看Nginx的版本信息。
l nginx –t
檢查配置文件是否正確。
l nginx –c filename
指定配置文件的路徑爲「filename」。默認路徑爲「conf/nginx.conf」
l nginx -g
臨時指定一些全局配置項,以使新的配置項生效,例如:
nginx -g"pid /var/nginx/test.pid"
上面這行命令意味着會把pid文件寫到/var/nginx/test.pid中。
-g參數的約束條件是指定的配置項不能與默認路徑下的nginx.conf中的配置項相沖突,不然沒法啓動。就像上例那樣,相似這樣的配置項:pidlogs/nginx.pid,是不能存在於默認的nginx.conf中的。
另外一個約束條件是,以-g方式啓動的Nginx服務執行其餘命令行時,須要把-g參數也帶上,不然可能出現配置項不匹配的情形。例如,若是要中止Nginx服務,那麼須要執行下面代碼:
nginx -g"pid /var/nginx/test.pid;" -s stop
若是不帶上-g"pid /var/nginx/test.pid;",那麼找不到pid文件,也會出現沒法中止服務的狀況。