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