
Nginx 解決了服務(wù)器的C10K(就是在一秒之內(nèi)連接客戶端的數(shù)目為10k即1萬(wàn))問(wèn)題。 Nginx的設(shè)計(jì)不像傳統(tǒng)的服務(wù)器那樣使用線程處理請(qǐng)求,而是一個(gè)更加高級(jí)的機(jī)制—事件驅(qū)動(dòng)機(jī)制,是一種異步事件驅(qū)動(dòng)結(jié)構(gòu)。
雖然目前Nginx的份額在市場(chǎng)上只占很少部分,但是其高性能和低消耗內(nèi)存的結(jié)構(gòu),使得其越來(lái)越普遍,典型的一個(gè)應(yīng)用就是我們可以使用Nginx作為反向代理進(jìn)行網(wǎng)站的負(fù)載均衡器。例如:Wordpress、GitHub等知名的網(wǎng)站都使用到了Nginx。
Nginx的特點(diǎn)
跨平臺(tái):可以在大多數(shù)Unix like 系統(tǒng)編譯運(yùn)行。而且也有Windows的移植版本。
配置異常簡(jiǎn)單:非常的簡(jiǎn)單,易上手。
非阻塞、高并發(fā)連接:數(shù)據(jù)復(fù)制時(shí),磁盤I/O的第一階段是非阻塞的。官方測(cè)試能支持5萬(wàn)并發(fā)連接,實(shí)際生產(chǎn)中能跑2~3萬(wàn)并發(fā)連接數(shù)(得益于Nginx采用了最新的epoll事件處理模型(消息隊(duì)列)。
Nginx代理和后端Web服務(wù)器間無(wú)需長(zhǎng)連接;
Nginx接收用戶請(qǐng)求是異步的,即先將用戶請(qǐng)求全部接收下來(lái),再一次性發(fā)送到后端Web服務(wù)器,極大減輕后端Web服務(wù)器的壓力。
發(fā)送響應(yīng)報(bào)文時(shí),是邊接收來(lái)自后端Web服務(wù)器的數(shù)據(jù),邊發(fā)送給客戶端。
網(wǎng)絡(luò)依賴性低,理論上只要能夠ping通就可以實(shí)施負(fù)載均衡,而且可以有效區(qū)分內(nèi)網(wǎng)、外網(wǎng)流量。
支持內(nèi)置服務(wù)器檢測(cè)。Nginx能夠根據(jù)應(yīng)用服務(wù)器處理頁(yè)面返回的狀態(tài)碼、超時(shí)信息等檢測(cè)服務(wù)器是否出現(xiàn)故障,并及時(shí)返回錯(cuò)誤的請(qǐng)求重新提交到其它節(jié)點(diǎn)上。
采用Master/worker多進(jìn)程工作模式
此外還有內(nèi)存消耗小、成本低廉(比F5硬件負(fù)載均衡器廉價(jià)太多)、節(jié)省帶寬、穩(wěn)定性高等特點(diǎn)。
Nginx的基本功能
Nginx的功能包括基本HTTP功能和擴(kuò)展功能。和Apache服務(wù)器一樣,Nginx服務(wù)器為了提供更多的功能并且能夠有效地?cái)U(kuò)展這些功能。每一個(gè)模塊都提供了一個(gè)功能,通過(guò)編譯這些功能模塊來(lái)實(shí)現(xiàn)功能的擴(kuò)展。
1、基本HTTP功能
(a)提供靜態(tài)文件和index文件,處理靜態(tài)文件,索引文件以及自動(dòng)索引,打開(kāi)文件描述符緩存;
(b)使用緩存加速反向代理,反向代理加速(無(wú)緩存),簡(jiǎn)單的負(fù)載均衡和容錯(cuò);
(c)使用緩存機(jī)制加速遠(yuǎn)程FastCGI,簡(jiǎn)單的負(fù)載均衡和容錯(cuò);
(d)模塊化的結(jié)構(gòu)。過(guò)濾器包括gzipping,byte ranges,chunked responses,以及 SSI-filter。在SSI過(guò)濾器中,到同一個(gè) proxy 或者 FastCGI 的多個(gè)子請(qǐng)求并發(fā)處理;
(e)支持SSL 和 TLS SNI 支持;
(f)IMAP/POP3代理功能;
(g)使用外部 HTTP 認(rèn)證服務(wù)器重定向用戶到 IMAP/POP3 后端;
(h)使用外部 HTTP 認(rèn)證服務(wù)器認(rèn)證用戶后連接重定向到內(nèi)部的 SMTP 后端;
2、其他HTTP功能
(a)基于名稱和基于IP的虛擬服務(wù)器;
(b)支持Keep-alive和管道連接;
(c)靈活的配置和重新配置、在線升級(jí)的時(shí)候不用中斷客戶訪問(wèn)的處理;
(d)訪問(wèn)日志的格式,緩存日志寫入和快速日志輪循;
(e)3xx-5xx錯(cuò)誤代碼重定向;
(f)速度限制。
Nginx的基本模塊
Nginx的核心模塊包括內(nèi)核模塊和事件驅(qū)動(dòng)模塊,即:CoreModule和EventsModule;另外還有第三方模塊 HTTP內(nèi)核模塊,HttpCoreModule,它是Nginx服務(wù)器的核心模塊。
CoreModule和EventsModule模塊的配置相對(duì)于HttpCoreModule會(huì)少一些,但是它們的配置將會(huì)影響系統(tǒng)的性能,而非功能上的差異。
1、CoreModule用于控制Nginx服務(wù)器的基本功能;
2、EventsModule用于控制Nginx如何處理連接。該模塊的指令的一些參數(shù)會(huì)對(duì)應(yīng)用系統(tǒng)的性能產(chǎn)生重要的影響;
3、HttpCoreModule提供HTTP訪問(wèn)Nginx服務(wù)器,該模塊是不能缺少的。
Nginx配置安裝的環(huán)境
1、yum -y install gcc* epel-release curl curl-devel mcrypt openssl openssl-devel gd gd-devel freetype freetype-devel zlib zlib-devel zip libmcrypt-devel libmcrypt pcre-devel libevent-devel ncurses-devel libxml2* mcrypt* libmcrypt* cmake gcc* lrzsz ntp telnet
2、創(chuàng)建用戶
useradd -s /sbin/nologin web
3、創(chuàng)建nginx的安裝目錄(此步驟可以省略)
mkdir -p /usr/local/nginx
chown -r web:web /usr/local/nginx
4、拷貝下載好的軟件包到/usr/src/目錄
5、解壓Nginx安裝包
tar -zxf /usr/src/tengine-2.1.2.tar.gz
cd /usr/local/tengine-2.1.2/
6、進(jìn)行檢測(cè)
./configure --prefix=/usr/local/nginx --with-http_sub_module --with-http_gzip_static_module --with-http_stub_status_module --with-pcre
7、編譯
make
8、安裝
make install
9、啟動(dòng)nginx /usr/local/nginx/sbin/nginx