你已經成功下載並解壓了Nginx安裝包。如今,爲了適應操做系統,爲了得到二進制的運行,要對Nginx進行編譯配置處理。建立一個應用程序一般分爲三步:從源代碼到配置,編譯和安裝編譯。配置步驟容許你選擇許多選項,這些選項在完成程序的創建安裝後不可編輯,所以它直接影響該項目的二進制文件。因此,這一步很是重要,若是想在後來避免意外,必須仔細。nginx
該過程是添加某些開關選項(switch)到配置(configure)腳本,該腳本原本就在源代碼安裝包中,在下面的內容中咱們將瞭解到,能夠激活的開關選項有三種類型,但咱們首先研究最容易的。web
容易的方法正則表達式
若是是由於某種緣由,你不想打擾配置步驟,例如只是測試或者是簡單的安裝,由於未來還會從新編譯安裝該程序,因此你只是簡單地使用configure腳本,而並無使用任何開關選擇。執行下列三個命令就能夠創建和安裝工做版(可以進行web服務)的Nginx:shell
# ./configure
運行了該命令以後,就開始了一個長時間的程序驗證過程,以便肯定系統包含全部必要的組成成分。若是配置過程失敗,請再次檢測先決條件,如今看來,它是引起錯誤的最多見緣由。數據庫
# make
命令make對應用程序進行編譯,若是配置部分運行良好,那麼這一部分不會出現任何錯誤。服務器
# make install
這是最後一步,複製編譯後的文件(也包括資源文件)到安裝目錄,默認狀況下是目錄:「/usr/local/nginx」,這一步可能須要以root的身份登陸系統,而後來執行安裝的操做。爲此,若是你沒有通過自定義配置就建立了該應用程序,那麼你的這個冒險便會錯過不少功能,例如可選擇的模塊和咱們即將認識的其餘模塊。cookie
路徑選擇負載均衡
在運行configure腳本命令的時候,可能開啓一些開關選項,例如,須要對Nginx各類組成成分指定目錄或文件路徑。能夠運行命令:dom
# ./configure --help
列出有效的開關變量,以便於安裝選擇。典型的作法是使用開關命令在命令行添加一些文本,例如,使用開關選項 --conf-path:memcached
# ./configure --conf-path=/etc/nginx/nginx.conf
下表中,所有列出配置時的開關選項:
選項 |
用法 |
默認值 |
--prefix=... |
指定安裝Nginx的基礎目錄 |
/usr/local/nginx, 注意:若是你在配置時使用了相對路徑,則鏈接到基礎目錄。示例: 指定--conf-path=conf/nginx.conf 則配置文件會在目錄:/usr/local/nginx/conf/nginx.conf |
--sbin-path=... |
Nginx二進制文件安裝的路徑 |
<prefix>/sbin/nginx |
--conf-path=... |
主要配置文件放置目錄 |
<prefix>/conf/nginx.conf |
--error-log-path=... |
錯誤日誌存放的路徑。錯誤日誌在配置文件中須配置得很是正確,該路徑只應用於你在配置文件中沒有指定任何錯誤的日誌指令時 |
<prefix>/logs/error.log |
--pid-path=... |
指定Nginx的pid文件的路徑。能夠在配置文件中指定pid文件的路徑,若是沒有具體的指定,則使用在這裏對該選項指定的該路徑 |
<prefix>/logs/nginx.pid 注意:該pid文件是一個簡單的文件文件,它包含進程的標識符。該文件應該放置在一個清晰可見的位置,以便其餘應用程序可以很容易找到運行該程序的pid |
--lock-path=... |
鎖文件(lock file)的存放路徑。一樣,該文件也能夠在配置文件中指定,可是,若是在配置文件中沒有指定,則使用該值 |
<prefix>/logs/nginx.lock 注意:鎖文件容許其餘應用程序肯定是否一個程序在運行,就Nginx來講,它用於肯定該進程沒有被啓動兩次 |
--with-perl_modules_path=... |
定義Perl模塊的路徑。若是須要包含另外的Perl模塊,必須定義該參數 |
|
--with-perl=... |
Perl二進制文件的路徑。用於執行Perl腳本。若是想執行一個Perl腳本,必須設置該路徑 |
|
--http-log-path=... |
定義被訪問文件的日誌文件存放路徑。該路徑只用於在配置文件中沒有定義訪問日誌的狀況 |
<prefix>/logs/access.log |
--http-client-body-temp-path=... |
該目錄用於存儲客戶端請求產生的臨時文件 |
<prefix>/client_body_temp |
--http-proxy-temp-path=... |
該目錄用於代理存儲臨時文件 |
<prefix>/proxy_temp |
--http-fastcgi-temp-path=... |
指定用於HTTP FastCGI模塊使用的臨時文件的存放路徑 |
<prefix>/fastcgi_temp |
--builddir=... |
指定建立應用程序的位置 |
先決條件選項
先決條件的格式有庫文件和二進制文件。到如今,你應該已經把它們安裝在系統中了,然而即便它們已經安裝在系統中,可能有時候配置腳本仍是不能找到它們的位置。緣由有多種,例如,若是它們安裝在非標準路徑中。爲了修復這些問題,可使用下表所列的開關項來指出它們所在的路徑。
編譯選項 |
|
--with-cc=... |
指定一個備用的C編譯器的位置 |
--with-cpp=... |
指定一個備用的C預處理器的位置 |
--with-cc-opt=... |
定義額外的選項,而後在命令行傳遞給C編譯器 |
--with-ld-opt=... |
定義額外的選項,而後在命令行傳遞給C鏈接器 |
--with-cpu-opt=... |
指定不一樣的目標處理器結構,能夠是下列值:pentium,pentiumpro,pentium3,pentium4,athlon,opteron,sparc32,sparc64和ppc64 |
PCRE選項 |
|
--without-pcre |
不使用PCRE庫。這個設置不推薦使用,由於它會移除對正則表達式的支持,從而使Rewrite模塊失去做用。 |
--with-pcre |
強制做用PCRE庫 |
--with-pcre=... |
容許指定PCRE庫的源代碼 |
--with-pcre-opt=... |
用於創建PCRE庫的另外的選項 |
MD5選項 |
|
--with-md5=... |
指定MD5庫源代碼的路徑 |
--with-md5-opt=... |
用於創建MD5庫的另外選項 |
--with-md5-asm |
爲建MD5庫使用匯編語言源代碼 |
SHA1選項 |
|
--with-sha1=... |
指定SHA1庫的源代碼 |
--with-sha1-opt=... |
用於創建SHA1庫的另外選項 |
--with-sha1-asm |
爲創建SHA1庫使用匯編語言源代碼 |
zlib選項 |
|
--with-zlib=... |
指定zlib庫的源代碼 |
--with-zlib-opt=... |
用於創建zlib庫的另外的選項 |
--with-zlib-asm=... |
使用匯編語言最大限度地優化下列目標結構:Pentium, pentiumpro |
OpenSSL選項 |
|
--with-openssl=... |
指定OpenSSL庫的源代碼路徑 |
--with-openssl-opt=... |
爲創建OpenSSL庫的另外的選項 |
模塊選擇
在編譯Nginx以前須要對模塊進行選擇,一些模塊默認是開啓的,有些模塊須要手動開啓。
默認開啓的模塊 |
描述 |
--without-http-charset_module |
禁用Charset模塊,該模塊用於對網頁從新編碼 |
--without-http-gzip_module |
禁用Gzip壓縮模塊 |
--without-http_ssi_module |
禁用服務器端包含模塊 |
--without-http_access_module |
禁用訪問模塊,對於指定的IP段,容許訪問配置 |
--without-http_userid_module |
禁用用戶ID模塊。該模塊爲用戶經過cookie驗證身份 |
--without-http_auth_basic_module |
禁用基本的認證模塊 |
--without-http_autoindex_module |
禁用自動索引模塊 |
--without-http_geo_module |
禁用Geo模塊,該模塊容許你定義依賴於IP地址段的變量 |
--without-http_map_module |
禁用Map模塊,該模塊容許你聲明map區段 |
--without-http_referer_module |
禁用Referer控制模塊 |
--without-http_rewrite_module |
禁用Rewrite模塊 |
--without-http_proxy_module |
禁用代理模塊。該模塊用於向其餘服務器傳輸請求 |
--without-http_fastcgi_module |
禁用FastCGI模塊。該模塊是用於與FastCGI進程配合工做 |
--without-http_memcached_module |
禁用Memcached模塊。該模塊是用於與memcached守護進程配合工做 |
--without-http_limit_zone_module |
禁用Limit Zone模塊。該模塊是用於根據定義的zone來限制約束對資源的使用。 |
--without-http_limit_req_module |
禁用Limit Requests模塊。該模塊容許你限制每一個用戶請求的總數 |
--without-http_empty_gif_module |
禁用Empty Gif模塊。該模塊用於在內存中提供一個空白的GIF圖像 |
--without-http_browser_module |
禁用Browser模塊。該模塊用於解釋用戶代理字符串 |
--without-http_upstream_ip_hash_module |
禁用Upstream模塊。該模塊用於配置負載均衡結構 |
默認禁用的模塊 |
描述 |
--with-http_ssl_module |
開啓SSL模塊,支持使用HTTPS協議的網頁 |
--with-http_realip_module |
開啓Real IP的支持,該模塊用於從客戶請求的頭數據中讀取real IP地址 |
--with-http_addition_module |
開啓Addition模塊,該模塊容許你追加或前置數據(prepend data)到響應的主體部分 |
--with-http_xslt_module |
開啓XSLT模塊的支持,該模塊實現XSLT轉化爲XML文檔 |
--with-http_image_filter_module |
開啓Image Filter模塊,該模塊是讓你修改圖像。注意:若是想編譯該模塊,須要在系統中安裝libgd庫 |
--with-http_geoip_module |
開啓GeoIP模塊,該模塊經過使用MaxMind's GeoI 二進制數據庫來獲取客戶端在地理上的分佈。注意:若是但願編譯該模塊,須要在系統中安裝libgeoip庫。 |
--with-http_sub_module |
開啓Substitution模塊,該模塊用於在網頁中替換文本 |
--with-http_dav_module |
開啓WebDAV模塊 |
--with-http_flv_module |
開啓FLV模塊,該模塊用於專門處理.flv(flash視頻)文件 |
--with-http_gzip_static_module |
開啓Gzip靜態模塊,該模塊用於發送預壓縮的文件 |
--with-http_random_index_module |
開啓Random Index模塊。該模塊用於挑選一個隨機的文件做爲該目錄的index |
--with-http_secure_link_module |
開啓Secure Link模塊,該模塊用於在URL中檢測關鍵字的存在 |
--with-http_stub_status_module |
開啓Stub Status模塊,該模塊會產生一個服務器狀態和信息頁 |
--with-google_perftools_module |
開啓google性能工具模塊 |
雜項
郵件服務代理 |
|
--with-mail |
開啓郵件服務代理(mail server proxy)模塊,支持POP3,IMAP4和SMTP。該功能默認禁用 |
--with-mail_ssl_module |
開啓郵件代理服務對SSL的支持。該功能默認禁用 |
--without-mail_pop3_module |
在郵件代理下禁用POP3功能。在開啓郵件代理模塊後該功能默認啓用 |
--without-mail_imap_module |
對郵件代理服務器禁用IMAP4模塊,在開啓郵件代理模塊後該功能默認啓用 |
--without-mail_smtp_module |
對於郵件代理服務器禁用SMTP模塊,在開啓郵件代理模塊後該功能默認啓用 |
事件管理 |
|
--with-rtsig_module |
開啓rtsig模塊,使用rtsig做爲事件通知機制 |
--with-select_module |
開啓select模塊,使用select做爲事件通知機制。默認狀況下,該模塊是開啓的,除非系統有一種更好的方式發現——kqueue, epoll, rtsig 或 poll |
--without-select_module |
禁用select模塊 |
--with-poll_module |
開啓poll模塊,該模塊使用poll做爲事件通知機制。默認狀況下,若是有效,該模塊是開啓的,除非系統上有一種更好的方式發現——kqueue, epoll或rtsig |
--without-poll_module |
禁用poll模塊 |
用戶和組選項 |
|
--user=... |
指定啓動Nginx進程的默認用戶。這個設置僅用於在配置文件中省略user指令來指定用戶的狀況 |
--group=... |
指定啓動Nginx進程默認的用戶組。這個設置僅用於在配置文件中省略使用group指令來指定用戶的狀況 |
其它選項 |
|
--with-ipv6 |
開啓對IPv6的支持 |
--without-http |
禁用HTTP服務 |
--without-http-cache |
禁用HTTP緩衝功能 |
--add-module=PATH |
經過指定的路徑編譯添加第三方模塊。若是但願編譯多個模塊,那麼該選項能夠無限次使用 |
--with-debug |
開啓記錄額外的調試信息 |
關於prefix開關選項
在配置期間,應該特別注意--prefix開關選項,未來許多配置指令都基於你在這時選擇的路徑。記住,一旦二進制文件編譯完成。prefix就不能再變,然而這並非一個決定性的問題,由於仍然可使用絕對路徑。
若是你打算與時俱進,想要升級Nginx,以便使用一個新的發佈版,默認的prefix(若是沒有經過使用--prefix開關選項去覆蓋)是/usr/local/nginx——一個不包含版本號的路徑,所以,升級Nginx的時候,若是沒有指定不一樣的prefix,新安裝的文件就會覆蓋先前安裝的文件,這種作法可能存在其餘問題,由於這有可能會清除你的配置文件和正在運行的二進制文件。所以,推薦使用不一樣的prefix,利用prefix指明每個版本號,例如:
# ./configure --prefix=/usr/local/nginx-1.8.0
另外,爲了使未來簡單一些,能夠爲/usr/local/nginx創建一個符號連接來指向/usr/local/nginx-1.8.0,一旦升級,該連接便會指向新的/usr/local/nginx-newer.version。