轉載:編譯安裝Nginx(1.5.1)《深刻理解Nginx》(陶輝)

原文:https://book.2cto.com/201304/19618.htmljavascript

1.5 configure詳解 html

能夠看出,configure命令相當重要,下文將詳細介紹如何使用configure命令,並分析configure究竟是如何工做的,從中咱們也能夠看出Nginx的一些設計思想。 java

1.5.1 configure的命令參數 linux

使用help命令能夠查看configure包含的參數。 nginx

./configure --help 正則表達式

這裏不一一列出help的結果,只是把它的參數分爲了四大類型,下面將會詳述各種型下全部參數的用法和意義。 算法

1. 路徑相關的參數 數據庫

表1-2列出了Nginx在編譯期、運行期中與路徑相關的各類參數。 後端

表1-2 configure支持的路徑相關參數
參數名稱 意 義 默 認 值
--prefix=PATH Nginx安裝部署後的根目錄 默認爲/usr/local/nginx目錄。注意:這個目標的設置會影響其餘參數中的相對目錄。例如,若是設置了--sbin-path=sbin/nginx,那麼實際上可執行文件會被放到/usr/local/nginx/sbin/nginx中
--sbin-path=PATH 可執行文件的放置路徑 <prefix>/sbin/nginx
--conf-path=PATH 配置文件的放置路徑 <prefix>/conf/nginx.conf
--error-log-path=PATH error日誌文件的放置路徑。error日誌用於定位問題,可輸出多種級別(包括debug調試級別)的日誌。它的配置很是靈活,能夠在nginx.conf裏配置爲不一樣請求的日誌並輸出到不一樣的log文件中。這裏是默認的Nginx核心日誌路徑 <prefix>/logs/error.log
--pid-path=PATH pid文件的存放路徑。這個文件裏僅以ASC II碼存放着Nginx master的進程ID,有了這個進程ID,在使用命令行(例如nginx -s reload)經過讀取master進程ID向master進程發送信號時,才能對運行中的Nginx服務產生做用 <prefix>/logs/nginx.pid
--lock-path=PATH lock文件的放置路徑 <prefix>/logs/nginx.lock
--builddir=DIR configure執行時與編譯期間產生的臨時文件放置的目錄,包括產生的Makefile、C源文件、目標文件、可執行文件等 <nginx source path>/objs
--with-perl_modules_path=PATH perl module放置的路徑。只有使用了第三方的perl module,才須要配置這個路徑 無
--with-perl=PATH perl binary放置的路徑。若是配置的Nginx會執行Perl腳本,那麼就必需要設置此路徑 無
--http-log-path=PATH access日誌放置的位置。每個HTTP請求在結束時都會記錄的訪問日誌 <prefix>/logs/access.log
--http-client-body-temp-path=PATH 處理HTTP請求時若是請求的包體須要暫時存放到臨時磁盤文件中,則把這樣的臨時文件放置到該路徑下 <prefix>/client_body_temp
--http-proxy-temp-path=PATH Nginx做爲HTTP反向代理服務器時,上游服務器產生的HTTP包體在須要臨時存放到磁盤文件時(詳見12.8節),這樣的臨時文件將放到該路徑下 <prefix>/proxy_temp
--http-fastcgi-temp-path=PATH Fastcgi所使用臨時文件的放置目錄 <prefix>/fastcgi_temp
--http-uwsgi-temp-path=PATH uWSGI所使用臨時文件的放置目錄 <prefix>/uwsgi_temp
--http-scgi-temp-path=PATH SCGI所使用臨時文件的放置目錄 <prefix>/scgi_temp 瀏覽器

2. 編譯相關的參數

表1-3列出了編譯Nginx時與編譯器相關的參數。

表1-3 configure支持的編譯相關參數
編譯參數 意 義
--with-cc=PATH C編譯器的路徑
--with-cpp=PATH C預編譯器的路徑
--with-cc-opt=OPTIONS 若是但願在Nginx編譯期間指定加入一些編譯選項,如指定宏或者使用-I加入某些須要包含的目錄,這時可使用該參數達成目的
--with-ld-opt=OPTIONS 最終的二進制可執行文件是由編譯後生成的目標文件與一些第三方庫連接生成的,在執行連接操做時可能會須要指定連接參數,--with-ld-opt就是用於加入連接時的參數。例如,若是咱們但願將某個庫連接到Nginx程序中,須要在這裏加入--with-ld-opt=-llibraryName -LlibraryPath,其中libraryName是目標庫的名稱,libraryPath則是目標庫所在的路徑
--with-cpu-opt=CPU 指定CPU處理器架構,只能從如下取值中選擇:pentium、pentiumpro、pentium三、pentium四、athlon、opteron、sparc3二、sparc6四、ppc64

3. 依賴軟件的相關參數

表1-4~表1-8列出了Nginx依賴的經常使用軟件支持的參數。

表1-4 PCRE的設置參數
PCRE庫的設置參數 意 義
--without-pcre 若是確認Nginx不用解析正則表達式,也就是說,nginx.conf配置文件中不會出現正則表達式,那麼可使用這個參數
--with-pcre 強制使用PCRE庫
--with-pcre=DIR 指定PCRE庫的源碼位置,在編譯Nginx時會進入該目錄編譯PCRE源碼
--with-pcre-opt=OPTIONS 編譯PCRE源碼時但願加入的編譯選項

表1-5 OpenSSL的設置參數
OpenSSL庫的設置參數 意 義
--with-openssl=DIR 指定OpenSSL庫的源碼位置,在編譯Nginx時會進入該目錄編譯OpenSSL源碼
注意:若是Web服務器支持HTTPS,也就是SSL協議,Nginx要求必須使用OpenSSL。能夠訪問http://www.openssl.org/免費下載
--with-openssl-opt=OPTIONS 編譯OpenSSL源碼時但願加入的編譯選項

表1-6 原子庫的設置參數
atomic(原子)庫的設置參數 意 義
--with-libatomic 強制使用atomic庫。atomic庫是CPU架構獨立的一種原子操做的實現。它支持如下體系架構:x86(包括i386和x86_64)、PPC6四、Sparc64(v9或更高版本)或者安裝了GCC 4.1.0及更高版本的架構。14.3節介紹了原子操做在Nginx中的實現
--with-libatomic=DIR atomic庫所在的位置

表1-7 散列函數庫的設置參數
散列函數庫的設置參數 意義
--with-MD5=DIR 指定MD5庫的源碼位置,在編譯Nginx時會進入該目錄編譯MD5源碼
注意:Nginx源碼中已經有了MD5算法的實現,若是沒有特殊需求,那麼徹底可使用Nginx自身實現的MD5算法
--with-MD5-opt=OPTIONS 編譯MD5源碼時但願加入的編譯選項
---with-MD5-asm 使用MD5的彙編源碼
--with-SHA1=DIR 指定SHA1庫的源碼位置,在編譯Nginx時會進入該目錄編譯SHA1源碼。
注意:OpenSSL中已經有了SHA1算法的實現。若是已經安裝了OpenSSL,那麼徹底可使用OpenSSL實現的SHA1算法
--with-SHA1-opt=OPTIONS 編譯SHA1源碼時但願加入的編譯選項
--with-SHA1-asm 使用SHA1的彙編源碼

表1-8 zlib庫的設置參數
zlib庫的設置參數 意 義
--with-zlib=DIR 指定zlib庫的源碼位置,在編譯Nginx時會進入該目錄編譯zlib源碼。若是使用了gzip壓縮功能,就須要zlib庫的支持
--with-zlib-opt=OPTIONS 編譯zlib源碼時但願加入的編譯選項
--with-zlib-asm=CPU 指定對特定的CPU使用zlib庫的彙編優化功能,目前僅支持兩種架構:pentium和pentiumpro

4. 模塊相關的參數

除了少許核心代碼外,Nginx徹底是由各類功能模塊組成的。這些模塊會根據配置參數決定本身的行爲,所以,正確地使用各個模塊很是關鍵。在configure的參數中,咱們把它們分爲五大類。

事件模塊。

默認即編譯進入Nginx的HTTP模塊。

默認不會編譯進入Nginx的HTTP模塊。

郵件代理服務器相關的mail 模塊。

其餘模塊。

(1)事件模塊

表1-9中列出了Nginx能夠選擇哪些事件模塊編譯到產品中。

表1-9 configure支持的事件模塊參數
編譯參數 意 義
--with-rtsig_module 使用rtsig module處理事件驅動
默認狀況下,Nginx是不安裝rtsig module的,即不會把rtsig module編譯進最終的Nginx二進制程序中
--with-select_module 使用select module處理事件驅動
select是Linux提供的一種多路複用機制,在epoll調用沒有誕生前,例如在Linux 2.4及其以前的內核中,select用於支持服務器提供高併發鏈接
默認狀況下,Nginx是不安裝select module的,但若是沒有找到其餘更好的事件模塊,該模塊將會被安裝
--without-select_module 不安裝select module
--with-poll_module 使用poll module處理事件驅動
poll的性能與select相似,在大量併發鏈接下性能都遠不如epoll。默認狀況下,Nginx是不安裝poll module的
--without-poll_module 不安裝poll module
--with-aio_module 使用AIO方式處理事件驅動
注意:這裏的aio module只能與FreeBSD操做系統上的kqueue事件處理機制合做,Linux上沒法使用
默認狀況下是不安裝aio module的

(2)默認即編譯進入Nginx的HTTP模塊

表1-10列出了默認就會編譯進Nginx的核心HTTP模塊,以及如何把這些HTTP模塊從產品中去除。

表1-10 configure中默認編譯到Nginx中的HTTP模塊參數
默認安裝的HTTP 模塊 意 義
--without-http_charset_module 不安裝http charset module。這個模塊能夠將服務器發出的HTTP響應重編碼
--without-http_gzip_module 不安裝http gzip module。在服務器發出的HTTP響應包中,這個模塊能夠按照配置文件指定的content-type對特定大小的HTTP響應包體執行gzip壓縮
--without-http_ssi_module 不安裝http ssi module。該模塊能夠在向用戶返回的HTTP響應包體中加入特定的內容,如HTML文件中固定的頁頭和頁尾
--without-http_userid_module 不安裝http userid module。這個模塊能夠經過HTTP請求頭部信息裏的一些字段認證用戶信息,以肯定請求是否合法
--without-http_access_module 不安裝http access module。這個模塊能夠根據IP地址限制可以訪問服務器的客戶端
--without-http_auth_basic_module 不安裝http auth basic module。這個模塊能夠提供最簡單的用戶名/密碼認證
--without-http_autoindex_module 不安裝http autoindex module。該模塊提供簡單的目錄瀏覽功能
--without-http_geo_module 不安裝http geo module。這個模塊能夠定義一些變量,這些變量的值將與客戶端IP地址關聯,這樣Nginx針對不一樣的地區的客戶端(根據IP地址判斷)返回不同的結果,例如不一樣地區顯示不一樣語言的網頁
--without-http_map_module 不安裝http map module。這個模塊能夠創建一個key/value映射表,不一樣的key獲得相應的value,這樣能夠針對不一樣的URL作特殊處理。例如,返回302重定向響應時,能夠指望URL不一樣時返回的Location字段也不同
--without-http_split_clients_module 不安裝http split client module。該模塊會根據客戶端的信息,例如IP地址、header頭、cookie等,來區分處理
--without-http_referer_module 不安裝http referer module。該模塊能夠根據請求中的referer字段來拒絕請求
--without-http_rewrite_module 不安裝http rewrite module。該模塊提供HTTP請求在Nginx服務內部的重定向功能,依賴PCRE庫
--without-http_proxy_module 不安裝http proxy module。該模塊提供基本的HTTP反向代理功能
--without-http_fastcgi_module 不安裝http fastcgi module。該模塊提供FastCGI功能
--without-http_uwsgi_module 不安裝http uwsgi module。該模塊提供uWSGI功能
--without-http_scgi_module 不安裝http scgi module。該模塊提供SCGI功能
--without-http_memcached_module 不安裝http memcached module。該模塊可使得Nginx直接由上游的memcached服務讀取數據,並簡單地適配成HTTP響應返回給客戶端
--without-http_limit_zone_module 不安裝http limit zone module。該模塊針對某個IP地址限制併發鏈接數。例如,使Nginx對一個IP地址僅容許一個鏈接
--without-http_limit_req_module 不安裝http limit req module。該模塊針對某個IP地址限制併發請求數
--without-http_empty_gif_module 不安裝http empty gif module。該模塊可使得Nginx在收到無效請求時,馬上返回內存中的1×1像素的GIF圖片。這種好處在於,對於明顯的無效請求不會去試圖浪費服務器資源
--without-http_browser_module 不安裝http browser module。該模塊會根據HTTP請求中的user-agent字段(該字段一般由瀏覽器填寫)來識別瀏覽器
--without-http_upstream_ip_hash_module 不安裝http upstream ip hash module。該模塊提供當Nginx與後端server創建鏈接時,會根據IP作散列運算來決定與後端哪臺server通訊,這樣能夠實現負載均衡

(3)默認不會編譯進入Nginx的HTTP模塊

表1-11列出了默認不會編譯至Nginx中的HTTP模塊以及把它們加入產品中的方法。

表1-11 configure中默認不會編譯到Nginx中的HTTP模塊參數
可選的HTTP 模塊 意 義
--with-http_ssl_module 安裝http ssl module。該模塊使Nginx支持SSL協議,提供HTTPS服務。
注意:該模塊的安裝依賴於OpenSSL開源軟件,即首先應確保已經在以前的參數中配置了OpenSSL
--with-http_realip_module 安裝http realip module。該模塊能夠從客戶端請求裏的header信息(如X-Real-IP或者X-Forwarded-For)中獲取真正的客戶端IP地址
--with-http_addition_module 安裝http addtion module。該模塊能夠在返回客戶端的HTTP包體頭部或者尾部增長內容
--with-http_xslt_module 安裝http xslt module。這個模塊可使XML格式的數據在發給客戶端前加入XSL渲染
注意:這個模塊依賴於libxml2和libxslt庫,安裝它前首先確保上述兩個軟件已經安裝
--with-http_image_filter_module 安裝http image_filter module。這個模塊將符合配置的圖片實時壓縮爲指定大小(width*height)的縮略圖再發送給用戶,目前支持JPEG、PNG、GIF格式。
注意:這個模塊依賴於開源的libgd庫,在安裝前確保操做系統已經安裝了libgd
--with-http_geoip_module 安裝http geoip module。該模塊能夠依據MaxMind GeoIP的IP地址數據庫對客戶端的IP地址獲得實際的地理位置信息
注意:該庫依賴於MaxMind GeoIP的庫文件,可訪問http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz獲取
--with-http_sub_module 安裝http sub module。該模塊能夠在Nginx返回客戶端的HTTP響應包中將指定的字符串替換爲本身須要的字符串
例如,在HTML的返回中,將</head>替換爲</head><script language="javascript" src="$script"></script>
--with-http_dav_module 安裝http dav module。這個模塊可讓Nginx支持Webdav標準,如支持Webdav協議中的PUT、DELETE、COPY、MOVE、MKCOL等請求
--with-http_flv_module 安裝http flv module。這個模塊能夠在向客戶端返回響應時,對FLV格式的視頻文件在header頭作一些處理,使得客戶端能夠觀看、拖動FLV視頻
--with-http_mp4_module 安裝http mp4 module。該模塊使客戶端能夠觀看、拖動MP4視頻
--with-http_gzip_static_module 安裝http gzip static module。若是採用gzip模塊把一些文檔進行gzip格式壓縮後再返回給客戶端,那麼對同一個文件每次都會從新壓縮,這是比較消耗服務器CPU資源的。gzip static模塊能夠在作gzip壓縮前,先查看相同位置是否有已經作過gzip壓縮的.gz文件,若是有,就直接返回。這樣就能夠預先在服務器上作好文檔的壓縮,給CPU減負
--with-http_random_index_module 安裝http random index module。該模塊在客戶端訪問某個目錄時,隨機返回該目錄下的任意文件
--with-http_secure_link_module 安裝http secure link module。該模塊提供一種驗證請求是否有效的機制。例如,它會驗證URL中須要加入的token參數是否屬於特定客戶端發來的,以及檢查時間戳是否過時
--with-http_degradation_module 安裝http degradation module。該模塊針對一些特殊的系統調用(如sbrk)作一些優化,如直接返回HTTP響應碼爲204或者444。目前不支持Linux系統
--with-http_stub_status_module 安裝http stub status module。該模塊可讓運行中的Nginx提供性能統計頁面,獲取相關的併發鏈接、請求的信息(14.2.1節中簡單介紹了該模塊的原理)
--with-google_perftools_module 安裝google perftools module。該模塊提供Google的性能測試工具

(4)郵件代理服務器相關的mail模塊

表1-12列出了把郵件模塊編譯到產品中的參數。

表1-12 configure提供的郵件模塊參數
可選的mail 模塊 意 義
--with-mail 安裝郵件服務器反向代理模塊,使Nginx能夠反向代理IMAP、POP三、SMTP等協議。該模塊默認不安裝
--with-mail_ssl_module 安裝mail ssl module。該模塊可使IMAP、POP三、SMTP等協議基於SSL/TLS協議之上使用。該模塊默認不安裝並依賴於OpenSSL庫
--without-mail_pop3_module 不安裝mail pop3 module。在使用--with-mail參數後,pop3 module是默認安裝的,以使Nginx支持POP3協議
--without-mail_imap_module 不安裝mail imap module。在使用--with-mail參數後,imap module是默認安裝的,以使Nginx支持IMAP
--without-mail_smtp_module 不安裝mail smtp module。在使用--with-mail參數後,smtp module是默認安裝的,以使Nginx支持SMTP

5.其餘參數

configure還接收一些其餘參數,表1-13中列出了相關參數的說明。

表1-13 configure提供的其餘參數其餘一些參數 意 義--with-debug 將Nginx須要打印debug調試級別日誌的代碼編譯進Nginx。這樣能夠在Nginx運行時經過修改配置文件來使其打印調試日誌,這對於研究、定位Nginx問題很是有幫助--add-module=PATH 當在Nginx里加入第三方模塊時,經過這個參數指定第三方模塊的路徑。這個參數將在下文如何開發HTTP模塊時使用到--without-http 禁用HTTP服務器--without-http-cache 禁用HTTP服務器裏的緩存Cache特性--with-file-aio 啓用文件的異步I/O功能來處理磁盤文件,這須要Linux內核支持原生的異步I/O--with-ipv6 使Nginx支持IPv6--user=USER 指定Nginx worker進程運行時所屬的用戶注意:不要將啓動worker進程的用戶設爲root,在worker進程出問題時master進程要具有中止/啓動worker進程的能力--group=GROUP 指定Nginx worker進程運行時所屬的組

相關文章
相關標籤/搜索