初識Nginx及編譯安裝Nginx php
環境說明: css
系統版本 CentOS 6.9 x86_64 html
軟件版本 nginx-1.12.2 前端
一、什麼是Nginx? python
若是你據說或使用過Apache軟件,那麼很快就會熟悉Nginx軟件,與Apache軟件相似,Nginx("engine x")是一個開源的,支持高性能,高併發的www服務和代理服務軟件。它是由俄羅斯人Igor Sysoev開發的,最初被應用在俄羅斯的大型網站www.rambler.ru上。後來做者將源代碼以類BSD許可證的形式開源出來供全球使用。 nginx
Nginx因具備高併發(特別是靜態資源)、佔用系統資源少等特性,且功能豐富而逐漸流行起來。 c++
從軟件大的功能應用方面,Nginx不可是一個優秀的Web服務軟件,還能夠具備反向代理負載均衡功能。在反向代理負載均衡功能方面,它相似於大名鼎鼎的LVS負載均衡以及Haproxy專業代理軟件,可是Nginx部署起來更爲簡單、方便;在緩存服務方面,它又相似於squid等專業的緩存服務軟件。 web
Nginx能夠運行在Unix,Linux、BSD、Mac OSX、Solaris,以及Microsoft Windows等操做系統中,隨着Nginx在國內不少大型網站的穩定高效運行,近兩年也逐漸被愈來愈多的中小型網站所使用。當前流行的Nginx Web組合被稱爲LNMP或LEMP(即Linux+Nginx+MySQL+PHP),其中LEMP裏的E取自Nginx("engine x") 面試
Nginx官網http://nginx.org/en/ 正則表達式
淘寶網基於Nginx作二次開發的叫Tengine http://tengine.taobao.org/
二、Nginx軟件使用排名
Web Server軟件市場https://w3techs.com/technologies/overview/web_server/all
三、Nginx的重要特性
Nginx 是一個高性能的 Web 和反向代理服務器, 它具備有不少很是優越的特性:
做爲 Web 服務器:相比 Apache,Nginx 使用更少的資源,支持更多的併發鏈接,體現更高的效率,這點使 Nginx 尤爲受到虛擬主機提供商的歡迎。可以支持高達 50,000 個併發鏈接數的響應,感謝 Nginx 爲咱們選擇了 epoll and kqueue 做爲開發模型。
做爲負載均衡服務器:Nginx 既能夠在內部直接支持 Rails 和 PHP,也能夠支持做爲 HTTP代理服務器 對外進行服務。Nginx 用 C 編寫, 不管是系統資源開銷仍是 CPU 使用效率都比 Perlbal 要好的多。
做爲郵件代理服務器: Nginx 同時也是一個很是優秀的郵件代理服務器(最先開發這個產品的目的之一也是做爲郵件代理服務器),Last.fm 描述了成功而且美妙的使用經驗。
Nginx 安裝很是的簡單,配置文件很是簡潔(還可以支持perl語法),Bugs很是少的服務器: Nginx 啓動特別容易,而且幾乎能夠作到7*24不間斷運行,即便運行數個月也不須要從新啓動。你還可以在 不間斷服務的狀況下進行軟件版本的升級。
3.1 Nginx特色
※ 可針對靜態資源高速高併發訪問及緩存;
※ 可以使用反向代理加速,而且可進行數據緩存;
※ 具備簡單負載均衡,節點健康檢查和容錯功能;
※ 支持遠程FsatCGI服務的緩存加速;
※ 支持FastCGI、Uwsei、SCGI、and Memcached Servers的加速和緩存;
※ 支持SSL、TLS、SNI;
※ 具備模塊化的結構:過濾器包括gzip壓縮,ranaes支持,chunked響應,XSLT,SSI及圖像縮放等功能。在SSI過濾器中,一個包含多個SSI的頁面,若是經由FsatCGI或反向代理處理,可被並行處理。
3.2 它所具有的其餘www服務特性以下:
※ 支持基於名字、端口以及IP的多虛擬主機站點;
※ 支持Keep-alive和Ipipelined鏈接;
※ 可進行簡單,方便,靈活的配置和管理;
※ 支持修改nginx配置,而且在代碼上線時,可平滑重啓,不中斷業務訪問;
※ 可自定義訪問日誌格式,臨時緩衝寫日誌操做,快速日誌輪詢及經過revslog處理日誌;
※ 可利用信號控制nginx進程;
※ 支持3xx-5xx http狀態碼重定向;
※ 支持rewrite模塊,支持URI重寫及正則表達式匹配;
※ 支持基於客戶端口地址和HTTP基本認證的訪問控制;
※ 支持PUT,DELETE,MKCOL,COPY以及MOVE等較特殊的HHTP請求方法;
※ 支持FLV流和MP4流技術產品應用;
※ 支持http響應速率限制;
※ 支持同IP地址的併發鏈接或請求數限制;
※ 支持郵件服務代理。
3.3 企業面試時須要解答以下Nginx HTTP服務器的特點及優勢
※ 支持高併發能支持幾萬併發鏈接(特別是靜態小文件業務環境)。
※ 資源消耗少,在3萬併發鏈接下,開啓10個Nginx線程消耗不到200MB內存。
※ 能夠作HTTP反向代理及加速緩存,即負載均衡功能,內置對RS節點服務器健康檢查功能,這至關於專業的haproxy軟件或lvs的功能。
※ 具有squid等專業緩存軟件等的緩存功能
※ 支持異步網絡IO事件模型epoll(Linux 2.6+)
四、Nginx軟件的主要企業功能應用
4.1 做爲Web服務軟件
Nginx是一個支持高性能,高併發的Web服務軟件,它有不少優越的特性,做爲Web服務器,和Apache相比,Nginx可以支持更多的併發鏈接訪問,而佔用的資源卻更少,效率更高,在功能上也強大了不少,幾乎不遜色於Apache。
4.2 反向代理或負載均衡服務
在反向代理或負載均衡服務方面,Nginx能夠做爲Web服務,PHP等動態服務及Memcached緩存的代理服務器,它具備相似專業反向代理軟件(如Haproxy)的功能,同時也是一個優秀的郵件代理服務軟件(最先開發這個產品的目的之一也是做爲郵件代理服務),可是Nginx的代理功能仍是相對簡單了些,特別是不支持TCP的代理。
4.3 前端業務數據緩存服務
在Web緩存服務方面,Nginx可經過自身的proxy_cache模塊實現類Squid等專業緩存軟件功能。
五、Nginx Web服務介紹
Nginx安裝簡單,配置文件簡潔,並且配置靈活。近兩年來,Nginx在國內互聯網領域的使用日趨火熱,愈來愈多的網站開始使用,如淘寶,阿里,京東,小米,網易,新浪,趕集等。
Nginx做爲Web服務器的主要應用場景:
※ 使用Nginx運行HTML,JS,css,小圖片等靜態數據(此功能相似於lighttpd軟件)
※ Nginx結合FastCGI運行PHP等動態程序(例如使用fastcgi_pass方式)
※ Nginx結合tomcat/resin等支持Java動態程序(經常使用proxy_pass方式)
六、Nginx與其餘Web軟件產品的對比說明
6.1 Apache軟件的特色
Apache2.2版本很是穩定強大,據官方說,其2.4版本性能更強。
Prefork模式取消了進程建立開銷,性能很高。
處理動態業務數據時,因關聯到後端的引擎和數據庫,瓶頸不在於apache自己上。
高併發時消耗系統資源相對多一些。
基於傳統的select模型,高併發能力有限。
支持擴展庫,可經過DSO、apxs方法編譯安裝額外的插件功能,不須要從新編譯Apache。
市場份額在逐年遞減
6.2 Nginx軟件的特色
基於異步網絡I/O模型(epoll,kqueue)。
具有支持高性能,高併發的特性,併發鏈接可達數萬。
對小文件(小於1MB的靜態文件)高併發支持很好,性能很高。
不支持相似Apache的DSO模式,擴展庫必須編譯進主程序(缺點)。
進程佔用系統資源比較低。
支持Web,反向proxy,cache三大重點功能,而且都很優秀。
市場份額在逐年快速增長。
6.3 Lighttpd的特色
基於異步網絡I/O模型,性能,併發都和Nginx相近。
擴展庫是so模式,比Nginx靈活。
目前國內的使用流程比較低,安全性沒有Apache和Nginx好。
經過插件(mod secdownload)可實現文件URL地址加密(優勢)
社區不靈活,市場份額較低。
6.4 爲何Nginx整體性能比Apache高?
Nginx使用最新的epolll(Linux2.6 內核)和kqueue(freebsd)異步網絡I/O模型,而Apache則使用的是傳統的select型。目前Linux下能承受高併發的Squid,Memcached軟件採用的都是epoll模型。
6.5 Apache select和Nginx epoll區別技術對比
6.6 如何正確選擇Web服務器
雖然國內不少人都在使用Nginx,可是Apache,Lighttpd這兩個Web server一樣很是強大實用,尤爲是Apache,仍舊是到目前爲止還是全球使用最普遍的Web服務軟件。
在實際工做中,咱們須要根據業務需求來選擇合適的業務服務軟件,有關Web服務的選擇建議是:
靜態業務:如果高併發場景,儘可能採用Nginx或Lighttpd,首選Nginx。
動態業務:理論上採用Nginx和Apache都可,建議選擇Nginx,要避免相同業務服務軟件多樣化,額外增長維護成本,動態業務能夠由Nginx兼作前端代理,再根據頁面元素的類型或者目錄,向後轉發到後端相應的服務器進行處理。
若是既有靜態業務又有動態業務,就採用Nginx。
若是併發不是很大,又對Apache很熟悉,採用Apache也是能夠的,Apache2.4版本也很強大,併發鏈接數也有所增長,總的來講,在知足需求的前提下,先選擇本身最擅長的軟件,若看上了更好的軟件,可在掌握新軟件以後逐步替換。雖然動態和靜態業務都傾向於Nginx,可是大前提是要熟練掌握Nginx。切記企業工做中不要盲從,這可能最終會致使本身沒法控制給企業帶來災難的惡果。
七、編譯安裝Nginx
7.1 建立目錄
mkdir -p /service/tools
mkdir /application
cd /service/tools
wget http://nginx.org/download/nginx-1.12.2.tar.gz 下載或者上傳nginx包
7.2 解壓tar zxvf nginx-1.12.2.tar.gz
7.3 編譯安裝
yum install gcc gcc-c++ glibc -y #安裝編譯器
yum install pcre-devel zlib-devel openssl-devel –y #裝pcre爲了重寫rewrite提供正則表達式庫,裝zlib爲了gzip提供數據壓縮用的函數庫,裝openssl爲 Nginx 模塊(如 ssl )提供密碼算法、證書以及 SSL 協議等功能
C語言源碼包,須要編譯才能使用
編譯安裝三部曲
cd nginx-1.12.2
./configure --prefix=/application/nginx-1.12.2 --pid-path=/var/run/nginx.pid --user=nginx --group=nginx --with-http_ssl_module
./configure -help #查看幫助
生成Makefile文件
make是用來編譯的,它從Makefile中讀取指令,而後編譯
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs -I src/http -I src/http/modules \
-o objs/src/http/modules/ngx_http_geo_module.o \
src/http/modules/ngx_http_geo_module.c
make install是用來安裝的,它也從Makefile中讀取指令,安裝到指定的位置
[root@Web01 nginx-1.12.2]# cd /application/nginx-1.12.2/
[root@Web01 nginx1.12.2]# ls -1
conf #配置文件
html #網站html文件
logs #日誌
sbin #二進制的執行文件
7.4 配置
建立軟連接
ln -s /application/nginx-1.12.2 /application/nginx
ln -s /application/nginx/sbin/nginx /usr/bin/
建立用戶useradd -M -s /sbin/nologin -r -u 88 nginx
-M 不建立用戶的HOME目錄
-s shell 指定默認登陸shell
-r 建立系統帳戶
-u uid 爲帳戶指定一個惟一的UID
conf目錄
fastcgi.conf 配合php
uwsgi_params 配合python
nginx.conf 主配置文件
mime.types 多媒體資源類型配置文件
最小化配置文件
grep -Ev '^$|#' nginx.conf.default >nginx.conf
[root@Web01 conf]# grep -Ev '^$|#' nginx.conf.default >nginx.conf
[root@Web01 conf]# cat nginx.conf
worker_processes 1; #工做進程數
events { #event模塊
worker_connections 1024; #默認工做鏈接數
}
http { #http模塊,nginx核心模塊
include mime.types; #加載的多媒體資源類型配置文件
default_type application/octet-stream; #默認類型(16進制)
sendfile on; #優化配置選項
keepalive_timeout 65; #長鏈接超時時間65秒
server {
listen 80; #默認監聽的端口
server_name localhost; #網站域名
location / { #網站站點根目錄位置
root html; #網站文件
index index.html index.htm; #網站首頁
}
error_page 500 502 503 504 /50x.html; #錯誤頁面500,502.503.504返回50x.html
location = /50x.html {
root html;
}
}
}
7.5 啓動
/application/nginx/sbin/nginx –t #語法檢查並測試
/application/nginx/sbin/nginx #啓動
/application/nginx/sbin/nginx -s reload #平滑重啓,不影響用戶訪問
/application/nginx/sbin/nginx -s stop #關閉
/application/nginx/sbin/nginx -V #查看版本及安裝的模塊
啓動後會生成幾個temp目錄
瀏覽器訪問
編譯安裝Nginx完成
博主原創文章,轉載請務必註明出處