Nginx編譯參數.md

Nginx 介紹

簡介

Nginx(發音同engine x)是一個網頁服務器,它能反向代理HTTP, HTTPS, SMTP, POP3, IMAP的協議連接,以及一個負載均衡器和一個HTTP緩存。
起初是供俄國大型的門戶網站及搜索引擎Rambler(俄語:Рамблер)使用。此軟件BSD-like協議下發行,能夠在UNIX、GNU/Linux、BSD、Mac OS X、Solaris,以及Microsoft Windows等操做系統中運行。php

特色

Nginx是一款面向性能設計的HTTP服務器,相較於Apache、lighttpd具備佔有內存少,穩定性高等優點。與舊版本(<=2.2)的Apache不一樣,nginx不採用每客戶機一線程的設計模型,而是充分使用異步邏輯,削減了上下文調度開銷,因此併發服務能力更強。
總體採用模塊化設計,有豐富的模塊庫和第三方模塊庫,配置靈活。
在Linux操做系統下,nginx使用epoll事件模型,得益於此,nginx在Linux操做系統下效率至關高。同時Nginx在OpenBSD或FreeBSD操做系統上採用相似於epoll的高效事件模型kqueue。
Nginx在官方測試的結果中,可以支持五萬個平行鏈接,而在實際的運做中,能夠支持二萬至四萬個平行連接。
總體採用模塊化設計是nginx的一個重大特色,甚至http服務器核心功能也是一個模塊。舊版本的nginx的模塊是靜態的,添加和刪除模塊都要對nginx進行從新編譯,1.9.11以及更新的版本已經支持動態模塊加載。
支持熱部署,不停機更新配置文件、更換日誌、更新服務器程序版本;html

基本功能

  • 靜態資源的web服務器;nginx

  • http協議的反向代理服務器;c++

  • pop3, smpt, imap4等郵件協議的反向代理;web

  • 能緩存打開的文件(元數據)正則表達式

  • 支持FastCGI(php-fpm), uWSGI(Python Web Framwork)等協議算法

關於 IO 模型的介紹

參考下面的文章:
Linux IO模式及 select、poll、epoll詳解
select、poll、epoll之間的區別總結
關於同步,異步,阻塞,非阻塞,IOCP/epoll,select/poll,AIO ,NIO ,BIO的總結segmentfault

安裝

rpm/yum 安裝

在CentOS 系統中安裝nginx 能夠直接yum 安裝,可是安裝前須要安裝epel 源:瀏覽器

# yum install -y epel-release
# yum install -y nginx

源碼編譯安裝參數

路徑相關的參數

./confugure的參數 參數說明 默認值
--prefix=PATH 指定安裝目錄 /usr/local/nginx
--sbin-path=PATH 指定nginx命令路徑 <prefix>/sbin
--conf-path=PATH 指定nginx配置文件路徑 <prefix>/conf
--error-log-path=PATH 指定錯誤日誌存放路徑 <prefix>/logs/error.log
--pid-path=PATH 指定nginx進程pid文件路徑 <prefix>/logs/nginx.pid
--lock-path=PATH 指定nginx的lock文件路徑 <prefix>/logs/nginx.lock
--with-perl_modules_path=PATH 指定Perl模塊的的路徑(只有使用了第三方的Perl模塊時纔可用到)
--with-perl=PATH 指定Perl binary路徑,只有當nginx會使用Perl腳本時纔用到
--http-log-path=PATH 指定訪問日誌文件路徑 <prefix>/logs/access.log
--http-client-body-temp-path=PATH 指定http客戶端請求報文臨時文件緩存的存放路徑 <prefix>/client_body_temp
--http-proxy-temp-path=PATH 指定nginx用於代理時產生的緩存文件存放路徑 <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

編譯相關的參數

./confugure的參數 參數含義
--with-cc=PATH 指定C編譯器的路徑
--with-cpp=PATH 指定C預編譯器的路徑
--with-cc-opt=OPTIONS 設置C編譯器參數(PCRE庫,須要指定–with-cc-opt=」-I /usr/local/include」,若是使用select()函數則須要同時增長文件描述符數量,能夠經過–with-cc-opt=」-D FD_SETSIZE=2048」指定。
--with-ld-opt=OPTIONS 設置鏈接文件參數。(PCRE庫,須要指定–with-ld-opt=」-L /usr/local/lib」。)
--with-cpu-opt=CPU 指定編譯的CPU,可用的值爲: pentium, pentiumpro, pentium3,pentium4, athlon,opteron, amd64, sparc32, sparc64, ppc64

依賴軟件的相關參數

./confugure的參數 參數含義
--without-pcre 禁用pcre庫
--with-pcre 啓用pcre庫
--with-pcre=DIR 指向pcre庫文件目錄
--with-pcre-opt=OPTIONS 在編譯時爲pcre庫設置附加參數
--with-pcre-jit 創建pcre jit支持

OpenSSL相關參數

./confugure的參數 參數含義
--with-openssl=DIR 指定openssl安裝目錄
--with-openssl-opt=OPTIONS 在編譯時爲openssl設置附加參數

原子庫的相關參數

./confugure的參數 參數含義
--with-libatomic 爲原子內存的更新操做的實現提供一個架構
--with-libatomic=DIR 指定libatomic的安裝目錄

散列函數庫相關參數

./confugure的參數 參數含義
--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彙編源

zlib庫的設置參數

./confugure的參數 參數含義
--with-zlib=DIR 指向zlib庫目錄
--with-zlib-opt=OPTIONS 在編譯時爲zlib設置附加參
--with-zlib-asm=CPU 爲指定的CPU使用zlib彙編源進行優化,CPU類型爲pentium, pentiumpro

模塊相關的參數

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

  • 事件模塊。(nginx的處理請求的方式)

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

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

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

  • 其餘模塊。

事件模塊

./confugure的參數 參數含義
--with-rtsig_module 啓用rtsig模塊支持(實時信號)
--with-select_module 啓用select模塊支持(一種輪詢模式,不推薦在高載環境下使用)
--without-select_module 禁用select模塊支持(一種輪詢模式,不推薦在高載環境下使用
--with-poll_module 啓用poll模塊支持(功能與select相同,與select特性相同,一種輪詢模式,不推薦在高載環境下使用)
--without-poll_module 禁用poll模塊支持(功能與select相同,與select特性相同,一種輪詢模式,不推薦在高載環境下使用)

默認即編譯進入Nginx的HTTP模塊
注意下列模塊在編譯安裝nginx時,是默認安裝到nginx中,即nginx默認支持相關功能。如不須要,禁用便可!

./confugure的參數 參數含義
--without-http_charset_module 禁用ngx_http_charset_module支持(從新編碼web面,但只能是一個方向–服務器端到客戶端,而且只有一個字節的編碼能夠被從新編碼)
--without-http_gzip_module 禁用ngx_http_gzip_module支持(該模塊同--with-http_gzip_static_module功能同樣)
--without-http_ssi_module 禁用ngx_http_ssi_module支持(該模塊提供了一個在輸入端處理處理服務器包含文件(SSI)的過濾器,目前支持SSI命令的列表是不完整的)
--without-http_userid_module 禁用ngx_http_userid_module支持(該模塊用來處理用來肯定客戶端後續請求的cookies)
--without-http_access_module 禁用ngx_http_access_module支持(該模塊提供了一個簡單的基於主機的訪問控制。容許/拒絕基於ip地址)
--without-http_auth_basic_module 禁用ngx_http_auth_basic_module(該模塊是可使用用戶名和密碼基於http基本認證方法來保護你的站點或其部份內容)
--without-http_autoindex_module 禁用disable ngx_http_autoindex_module支持(該模塊用於自動生成目錄列表,只在ngx_http_index_module模塊未找到索引文件時發出請求。)該模塊提供簡單目錄瀏覽功能
--without-http_geo_module 禁用ngx_http_geo_module支持(建立一些變量,其值依賴於客戶端的IP地址)
--without-http_map_module 禁用ngx_http_map_module支持(使用任意的鍵/值對設置配置變量)
--without-http_split_clients_module 禁用ngx_http_split_clients_module支持(該模塊用來基於某些條件劃分用戶。條件如:ip地址、報頭、cookies等等)
--without-http_referer_module 禁用disable ngx_http_referer_module支持(該模塊用來過濾請求,拒絕報頭中Referer值不正確的請求)
--without-http_rewrite_module 禁用ngx_http_rewrite_module支持(該模塊容許使用正則表達式改變URI,而且根據變量來轉向以及選擇配置。若是在server級別設置該選項,那麼他們將在location以前生效。若是在location還有更進一步的重寫規則,location部分的規則依然會被行。若是這個URI重寫是由於location部分的規則形成的,那麼location部分會再次被執行做爲新的URI。這個循環會執行10次,而後Nginx會返回一個500錯誤。依賴pcre庫)即重定向功能
--without-http_proxy_module 禁用ngx_http_proxy_module支持(有關代理服務器)
--without-http_fastcgi_module 禁用ngx_http_fastcgi_module支持(該模塊容許Nginx與FastCGI進程交互,並經過傳遞參數來控制FastCGI進程工做。)FastCGI一個常駐型的公共網關接口。
--without-http_uwsgi_module 禁用ngx_http_uwsgi_module支持(該模塊用來醫用uwsgi協議,uWSGI服務器相關)
--without-http_scgi_module 禁用ngx_http_scgi_module支持(該模塊用來啓用SCGI協議支持,SCGI協議是CGI協議的替代。它是一種應用程與HTTP服務接口標準。它有些像FastCGI但他的設計更容易實現。)
--without-http_memcached_module 禁用ngx_http_memcached_module支持(該模塊用來提供簡單的緩存,以提升系統效率)
--without-http_limit_conn_module 禁用ngx_http_limit_zone_module支持(該模塊能夠針對條件,進行會話的併發鏈接數控制)
--without-http_limit_req_module 禁用ngx_http_limit_req_module支持(該模塊容許你對於一個地址進行請求數量的限制用一個給定的session或一個特定的事件)
--without-http_empty_gif_module 禁用ngx_http_empty_gif_module支持(該模塊在內存中常駐了一個1*1的透明GIF圖像,能夠被很是快速的調用)
--without-http_browser_module 禁用ngx_http_browser_module支持(該模塊用來建立依賴於請求報頭的值。若是瀏覽器爲modern,則$modern_browser等於modern_browser_value指令分配的值;若是瀏覽器爲old,則$ancient_browser等於ancient_browser_value指令分配的值;若是瀏覽器爲MSIE中的任意版本,則$msie等於1)
--without-http_upstream_hash_module  
--without-http_upstream_ip_hash_module 禁用ngx_http_upstream_ip_hash_module支持(該模塊用於簡單的負載均衡)nginx負載均衡的一種算法
--without-http_upstream_least_conn_module  
--without-http_upstream_keepalive_module 不啓用用高可用支持模塊

默認即編譯不進入Nginx的HTTP模塊
注意下列模塊在編譯安裝nginx時,是默認不安裝到nginx中,即須要nginx支持相關功能,必須添加相關./configure參數啓動該功能。

./confugure的參數 參數含義
--with-http_ssl_module 啓用ngx_http_ssl_module支持(使nginx支持https請求,需已安裝openssl)
--with-http_spdy_module  
--with-http_realip_module 啓用ngx_http_realip_module支持(這個模塊容許從請求標頭更改客戶端的IP地址值,默認爲關)
--with-http_addition_module 啓用ngx_http_addition_module支持(做爲一個輸出過濾器,支持不徹底緩衝,分部分響應請求)
--with-http_xslt_module 啓用ngx_http_xslt_module支持(過濾轉換XML請求)該模塊依賴於libxml2和libxslt,啓動前須要安裝相關依賴包
--with-http_image_filter_module 啓用ngx_http_image_filter_module支持(傳輸JPEG/GIF/PNG圖片的一個過濾器)(默認爲不啓用。依賴於libgd庫)
--with-http_geoip_module 啓用ngx_http_geoip_module支持(該模塊建立基於與MaxMind GeoIP二進制文件相配的客戶端IP地址的ngx_http_geoip_module變量)
--with-http_sub_module 啓用ngx_http_sub_module支持(容許用一些其餘文本替換nginx響應中的一些文本)
--with-http_dav_module 啓用ngx_http_dav_module支持(增長PUT,DELETE,MKCOL:建立集合,COPY和MOVE方法)默認狀況下爲關閉,需編譯開啓
--with-http_flv_module 啓用ngx_http_flv_module支持(提供尋求內存使用基於時間的偏移量文件,使客戶端能夠觀看,拖動flv視頻)
--with-http_mp4_module 啓動MP4模塊,使客戶端能夠觀看,拖動MP4視頻
--with-http_gunzip_module  
--with-http_gzip_static_module 啓用ngx_http_gzip_static_module支持(在線實時壓縮輸出數據流)
--with-http_auth_request_module  
--with-http_random_index_module 啓用ngx_http_random_index_module支持,從目錄中隨機挑選一個目錄索引
--with-http_secure_link_module 啓用ngx_http_secure_link_module支持(計算和檢查要求所需的安全連接網址)
--with-http_degradation_module 啓用ngx_http_degradation_module支持(容許在內存不足的狀況下返回204或444碼)
--with-http_stub_status_module 啓用ngx_http_stub_status_module支持(獲取nginx自上次啓動以來的工做狀態,併發鏈接數狀況)
--with-google_perftools_module 啓用ngx_google_perftools_module支持(提供谷歌性能測試)
--with-cpp_test_module 啓用ngx_cpp_test_module支持
--with-http_perl_module 啓用with-http_perl_module
--with-threads 啓用線程池支持

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

./confugure的參數 參數含義
--with-mail 安裝郵件反向代理模塊,nginx能夠反向代理IMAP,pop3,smtp等常見的郵件協議,默認不安裝
--with-mail_ssl_module 啓用ngx_mail_ssl_module支持,以支持郵件協議對ssl的支持,默認不安裝並依賴openssl
--without-mail_pop3_module 禁用pop3郵件協議模塊,啓用--with-mail參數時,會自動安裝,以使nginx支持pop3
--without-mail_imap_module 禁用IAMP郵件協議模塊,啓用--with-mail參數時,會自動安裝,以使nginx支持IMAP
--without-mail_smtp_module 禁用smtp郵件協議模塊,啓用--with-mail參數時,會自動安裝,以使nginx支持SMTP

其餘參數模塊

./confugure的參數 參數含義
--with-debug 開啓debug日誌調試功能,以利於nginx問題排查
--add-module=PATH 啓用外部模塊(第三方模塊)
--without-http 禁用http服務
--without-http-cache 禁用http緩存功能
--with-file-aio 啓動文件異步I/O功能來處理磁盤文件,這須要系統原生支持異步I/O
--with-ipv6 啓動ipv6功能
--user=USER 指定nginx work進程的運行用戶(推介使用nginx)
--group=GROUP 指定nginx work進程的運行用戶組(推介使用nginx)

源碼安裝

# yum install -y openssl-devel zlib-devel pcre-devel gcc gcc-c++
# groupadd -r nginx
# useradd -r -M -s /sbin/nologin -g nginx nginx
# wget http://nginx.org/download/nginx-1.8.1.tar.gz
# tar xf nginx-1.8.1.tar.gz
# cd nginx-1.8.1
# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --with-pcre  --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module
# make && make install
相關文章
相關標籤/搜索