nginx編譯及參數詳解

 說明藍色=命令名稱nginx

      淺綠=命令參數web

      淺藍=選項服務器

      紫色=目錄dom

      系統環境:CentOS  5.7 i686ide

nginx做爲如今比較熱門的web服務軟件,不少人都在用,本人也用了快兩年了,最近朋友問了我幾個關於nginx編譯的問題,問的我啞口無言,特測試了一下得出了一些小結論發表出來和你們一塊兒探討。memcached

朋友問的問題:性能

1)、nginx 編譯時都須要哪些參數 2)、nginx 默認編譯(不加任何 --with 和--with-out )有哪些功能 3)nginx 默認用的什麼io接口 測試

測試之旅(先從第二個問題開始,第一個見後文總結):優化

問題二    分別編譯5次nginx 編譯參數以下:ui

a: ./configure --prefix=/usr/local/nginx_01 --user=www --group=www

b: ./configure --prefix=/usr/local/nginx_02 --user=www --group=www --with-http_ssl_module
c: ./configure --prefix=/usr/local/nginx_03 --user=www --group=www --with-poll_module --with-http_ssl_module
d: ./configure
--prefix=/usr/local/nginx_04 --user=www --group=www --without-http_ssi_module

編譯安裝後查看nginx 的大小如圖:

分析: 默認參數大小爲 655K,添加一個--with (--with-http_ssl_module)  大小爲 701K > 655K ,添加兩個--with(--with-poll_module --with-http_ssl_module ) 大小爲 704 > 701K,添加--without-http_ssi_module  大小爲 642K < 655K

結論:帶有 --with-out 的參數爲nginx默認編譯所帶的功能(個別除外如: --without-poll_module 、--without-select_module),帶有 --with的參數 是須要手動添加的功能。

問題三  編譯安裝nginx 參數以下:

f:./configure --prefix=/usr/local/nginx_06 --user=www --group=www --with-select_module --with-poll_module

g:./configure --prefix=/usr/local/nginx_07 --user=www --group=www --without-select_module  --without-poll_module

安裝完畢後產看nginx_01,nginx_06,nginx_07配置文件中events{}段的內容以下:

分三次啓動nginx_01,nginx_06,nginx_07 並追蹤查看如圖:

 

注:三個結果都是epoll,此只列出一個。

分別在nginx_01,nginx_06,nginx_07  的 events{}段中加入 " use poll; " : sed -i '/events/a use poll;' /usr/local/nginx_0[167]/conf/nginx.conf

啓動nginx_01 : /usr/local/nginx_01/sbin/nginx  沒法啓動結果如圖:

啓動nginx_06: /usr/local/nginx_06/sbin/nginx  正常啓動,strace結果如圖:

啓動nginx_07 : /usr/local/nginx_07/sbin/nginx  沒法啓動結果如圖:

查看nginx_01,nginx_06,nginx_07  三個的/sbin/nginx大小:

結論nginx默認安裝不修改配置文件io接口爲 epoll ,若用其餘io接口需在編譯時加入 --with 參數,nginx默認安裝與加( --without-select_module  --without-poll_module )等參數時同樣,不支持其餘io接口。

補充:nginx參數詳解

./configure --help
--help 顯示本提示信息
--prefix=PATH 設定安裝目錄
--sbin-path=PATH 設定程序文件目錄
--conf-path=PATH 設定配置文件(nginx.conf)目錄
--error-log-path=PATH 設定錯誤日誌目錄
--pid-path=PATH 設定pid文件(nginx.pid)目錄
--lock-path=PATH 設定lock文件(nginx.lock)目錄
--user=USER 設定程序運行的用戶環境(www)
--group=GROUP 設定程序運行的組環境(www)
--builddir=DIR 設定程序編譯目錄
--with-rtsig_module 容許rtsig模塊
--with-select_module 容許select模塊(一種輪詢模式,不推薦用在高載環境)
--without-select_module 不使用select模塊
--with-poll_module 容許poll模塊(一種輪詢模式,不推薦用在高載環境)
--without-poll_module 不使用poll模塊
--with-http_ssl_module 容許ngx_http_ssl_module模塊(Apache對應:mod_ssl)
--with-http_realip_module 容許ngx_http_realip_module模塊(mod_rpaf)
--with-http_addition_module 容許ngx_http_addition_module模塊(mod_layout)
--with-http_xslt_module 容許ngx_http_xslt_module模塊
--with-http_sub_module 容許ngx_http_sub_module模塊
--with-http_dav_module 容許ngx_http_dav_module模塊(mod_dav)
--with-http_flv_module 容許ngx_http_flv_module模塊(mod_flvx)
--with-http_gzip_static_module 容許ngx_http_gzip_static_module模塊(mod_dflate)
--with-http_random_index_module 容許ngx_http_random_index_module模塊(mod_autoindex)
--with-http_stub_status_module 容許ngx_http_stub_status_module模塊(mod_status)
--without-http_charset_module 不使用ngx_http_charset_module模塊
--without-http_gzip_module 不使用ngx_http_gzip_module模塊
--without-http_ssi_module 不使用ngx_http_ssi_module模塊
--without-http_userid_module 不使用ngx_http_userid_module模塊
--without-http_access_module 不使用ngx_http_access_module模塊
--without-http_auth_basic_module 不使用ngx_http_auth_basic_module模塊
--without-http_autoindex_module 不使用ngx_http_autoindex_module模塊
--without-http_geo_module 不使用ngx_http_geo_module模塊
--without-http_map_module 不使用ngx_http_map_module模塊
--without-http_referer_module 不使用ngx_http_referer_module模塊
--without-http_rewrite_module 不使用ngx_http_rewrite_module模塊
--without-http_proxy_module 不使用ngx_http_proxy_module模塊
--without-http_fastcgi_module 不使用ngx_http_fastcgi_module模塊
--without-http_memcached_module 不使用ngx_http_memcached_module模塊
--without-http_limit_zone_module 不使用ngx_http_limit_zone_module模塊
--without-http_empty_gif_module 不使用ngx_http_empty_gif_module模塊
--without-http_browser_module 不使用ngx_http_browser_module模塊
--without-http_upstream_ip_hash_module 不使用ngx_http_upstream_ip_hash_module模塊
--with-http_perl_module 容許ngx_http_perl_module模塊
--with-perl_modules_path=PATH 設置perl模塊路徑
--with-perl=PATH 設置perl庫文件路徑
--http-log-path=PATH 設置access log文件路徑
--http-client-body-temp-path=PATH 設置客戶端請求臨時文件路徑
--http-proxy-temp-path=PATH 設置http proxy臨時文件路徑
--http-fastcgi-temp-path=PATH 設置http fastcgi臨時文件路徑
--without-http 不使用HTTP server功能
--with-mail 容許POP3/IMAP4/SMTP代理模塊
--with-mail_ssl_module 容許ngx_mail_ssl_module模塊
--without-mail_pop3_module 不容許ngx_mail_pop3_module模塊
--without-mail_imap_module 不容許ngx_mail_imap_module模塊
--without-mail_smtp_module 不容許ngx_mail_smtp_module模塊
--with-google_perftools_module 容許ngx_google_perftools_module模塊(調試用)
--with-cpp_test_module 容許ngx_cpp_test_module模塊
--add-module=PATH 容許使用外部模塊,以及路徑
--with-cc=PATH 設置C編譯器路徑
--with-cpp=PATH 設置C預處理路徑
--with-cc-opt=OPTIONS 設置C編譯器參數
--with-ld-opt=OPTIONS 設置鏈接文件參數
--with-cpu-opt=CPU 爲指定CPU優化,可選參數有:
          pentium, pentiumpro, pentium3, pentium4,
          athlon, opteron, sparc32, sparc64, ppc64
--without-pcre 不使用pcre庫文件
--with-pcre=DIR 設定PCRE庫路徑
--with-pcre-opt=OPTIONS 設置PCRE運行參數
--with-md5=DIR 設定md5庫文件路徑
--with-md5-opt=OPTIONS 設置md5運行參數
--with-md5-asm 使用md5源文件編譯
--with-sha1=DIR 設定sha1庫文件路徑
--with-sha1-opt=OPTIONS 設置sha1運行參數
--with-sha1-asm 使用sha1源文件編譯
--with-zlib=DIR 設定zlib庫文件路徑
--with-zlib-opt=OPTIONS 設置zlib運行參數
--with-zlib-asm=CPU 使zlib對特定的CPU進行優化,可選參數:
          pentium, pentiumpro
--with-openssl=DIR 設定OpenSSL庫文件路徑
--with-openssl-opt=OPTIONS 設置OpenSSL運行參數
--with-debug 容許調試日誌

 

nginx編譯時不是功能加的越多越好,應該儘量少編譯模塊,不用的最好不要加入。個模塊功能參考《實戰Nginx_取代Apache的高性能Web服務器》。

結束語:本測試只是我的推論猜測,非官方結論,歡迎大牛指點。

編譯好的nginx可經過 /usr/local/nginx/sbin/nginx -V 查看編譯時的參數(具體路徑更具實際狀況而定)

相關文章
相關標籤/搜索