初識Nginx及編譯安裝Nginx

初識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語言源碼包,須要編譯才能使用

編譯安裝三部曲

  1. ./configure(指定編譯參數:安裝目錄及版本)

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文件

  1. make

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

  1. make install

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完成

 

博主原創文章,轉載請務必註明出處

相關文章
相關標籤/搜索