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)等協議算法
參考下面的文章:
Linux IO模式及 select、poll、epoll詳解
select、poll、epoll之間的區別總結
關於同步,異步,阻塞,非阻塞,IOCP/epoll,select/poll,AIO ,NIO ,BIO的總結segmentfault
在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支持 |
./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彙編源 |
./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