一、Nginx為什么受青睞
? 在介紹Nginx具體的安裝、配置以及原理之前先聊聊概念常識(shí)問(wèn)題。那就是目前為什么Nginx深受青睞?那我們先從Nginx是什么開(kāi)始聊起。
1.Nginx是什么
-
簡(jiǎn)單介紹
Nginx來(lái)自于俄羅斯,是在RamblerMedia工作的Igor Sysoev使用C語(yǔ)言編寫(xiě)而成的跨平臺(tái)輕量級(jí)高性能的Web服務(wù)器。Nginx可以運(yùn)行在Linux、FreeBSD、Solaris(Sun公司的類(lèi)Unix OS)、MacOS、以及Windows等操作系統(tǒng)。操作系統(tǒng)的不同,也給Nginx帶來(lái)了一些好處,Nginx會(huì)使用當(dāng)前操作系統(tǒng)中特有的一些高效API來(lái)提高自身的性能。
-
Nginx和它的對(duì)手們
Nginx的對(duì)手們有Apache、Lighttpd、Tomcat、Jetty、IIS,它們同為Web服務(wù)器:具備Web服務(wù)器的基本功能;基于Rest架構(gòu)風(fēng)格,以統(tǒng)一資源描述符(URI)或統(tǒng)一資源定位符(URL)作為溝通依據(jù),通過(guò)HTTP為瀏覽器等Client程序提供各種網(wǎng)絡(luò)服務(wù)。
但是,這些Web服務(wù)器呢,都多多少少因?yàn)楦髯缘亩ㄎ慌c發(fā)展方向都不盡相同,使得每一款Web服務(wù)器都各有特色:
? 1.Tomcat、Jetty:都是面向Java語(yǔ)言設(shè)計(jì)的。但是它們?cè)谛阅芊矫媾cNginx沒(méi)有什么可比性,因?yàn)檫@兩款服務(wù)器都是重量級(jí)選手。可能有伙伴會(huì)很疑惑,我已經(jīng)用Tomcat跑起服務(wù),同樣配置后可以直接訪問(wèn)為什么還要在加層外套Nginx,對(duì)于這個(gè)問(wèn)題,在后邊對(duì)這一點(diǎn)進(jìn)行詳細(xì)的分析。【】
? 2.IIS:這位選手呢,來(lái)自于微軟家族。然后特點(diǎn)大家可能就很清楚了,它只能在Windows OS運(yùn)行(不過(guò)網(wǎng)上也有工具可以把它運(yùn)行在LinuxOS中,但是并不是很完美哦)。可能拉低它顏值的就是穩(wěn)定性與性能了,Windows OS作為服務(wù)器的話,穩(wěn)定性和部分性能都不能和類(lèi)Unix OS進(jìn)行媲美,所以呢,在高性能Web服務(wù)器的場(chǎng)合中,IIS可能就要被“淘汰”了。
? 3.Apache:這是一位壓軸級(jí)選手,是發(fā)展周期最長(zhǎng)的,毫無(wú)疑問(wèn)是世界第一大Web服務(wù)器,在2012年遙遙領(lǐng)先其他選手。它畢竟有很多優(yōu)秀的地方:穩(wěn)定、開(kāi)源、跨平臺(tái)等。但是美中不足的是,它被設(shè)計(jì)成為了重量級(jí)、不支持高并發(fā)的Web服務(wù)器。如果有數(shù)以萬(wàn)計(jì)的HTTP請(qǐng)求同時(shí)訪問(wèn),服務(wù)器就會(huì)面臨大量?jī)?nèi)存消耗的問(wèn)題,操作系統(tǒng)也會(huì)跟著收到牽連,畢竟Apache的進(jìn)程做進(jìn)程間切換時(shí)會(huì)給服務(wù)器的CPU帶來(lái)重大壓力,同時(shí)會(huì)伴隨著響應(yīng)效率降低,這致命的一擊,導(dǎo)致這位來(lái)自“貴族世家”的選手在高性能Web服務(wù)器的舞臺(tái)上沒(méi)有了地位。
? 4.Lighttpd:與Nginx同樣是輕量級(jí)、高性能的Web服務(wù)器。但是它并沒(méi)有得到國(guó)內(nèi)開(kāi)發(fā)者的鐘愛(ài),而是被歐美的開(kāi)發(fā)者們所追捧。
-
恩寵--Nginx
Nginx的代碼也是開(kāi)源的而且是最自由的2-clause BSD-like license許可證。Nginx使用的架構(gòu)是基于事件驅(qū)動(dòng)的,能夠并發(fā)處理百萬(wàn)級(jí)別的TCP連接。由于Nginx的高度模塊化和具有最自由的許可證,讓Nginx的第三方模塊擴(kuò)展功能更加充實(shí)。優(yōu)秀的設(shè)計(jì)還帶來(lái)了極佳的穩(wěn)定性體驗(yàn)。所以,Nginx大量應(yīng)用于大流量的網(wǎng)站來(lái)高效處理大規(guī)模高并發(fā)連接。種種跡象表明,Nginx在性能方面很出色。
2.Nginx的特點(diǎn)
-
更快
快主要體現(xiàn)在兩方面:①在正常的情況下,單次請(qǐng)求會(huì)得到更快的響應(yīng);②在數(shù)以萬(wàn)計(jì)的并發(fā)請(qǐng)求中,Nginx可以比其他Web服務(wù)器更快的響應(yīng)請(qǐng)求。
-
高擴(kuò)展性
Nginx的高度模塊化決定了其具有高擴(kuò)展性。它完全是由多個(gè)不同功能、不同層次、不同類(lèi)型以及耦合度極低的模塊組合而成。它的模塊都是嵌入到二進(jìn)制文件中執(zhí)行,使得第三方開(kāi)發(fā)的模塊也一樣完美支持性能。所以高并發(fā)的網(wǎng)站完全可以根據(jù)自身項(xiàng)目業(yè)務(wù)特性定制屬于自己的模塊。
-
高可靠性
這個(gè)特點(diǎn)應(yīng)該是選擇Web服務(wù)器最基本的條件。Nginx的穩(wěn)定性,大家有目共睹。國(guó)內(nèi)多家高流量并發(fā)的網(wǎng)站在核心的服務(wù)器上大規(guī)模使用Nginx。官方提供的常用模塊是非常穩(wěn)定的,每一個(gè)Worker進(jìn)程都相對(duì)獨(dú)立,把耦合性降至最低。master進(jìn)程在其中一個(gè)Worker進(jìn)程出錯(cuò)時(shí)可以快速“拉起”新的Worker子進(jìn)程提供相應(yīng)的服務(wù)。
-
低內(nèi)存消耗
據(jù)數(shù)據(jù)測(cè)試,一般情況下,1W個(gè)不活躍的HTTP Keep-Alive連接在Nginx中消耗只有2.5MB的內(nèi)存。(這也是Nginx能夠支持高并發(fā)連接的基礎(chǔ))
-
單機(jī)支持10W+的并發(fā)連接
由于現(xiàn)在是海量數(shù)據(jù)時(shí)代,高并發(fā)無(wú)疑成為大家青睞的對(duì)象。理論上,Nginx支持的并發(fā)連接數(shù)量取決于內(nèi)存,10W+的并發(fā)連接并沒(méi)有到極限。但是,能否及時(shí)處理更多的并發(fā)連接應(yīng)該取決于項(xiàng)目業(yè)務(wù)的需求。
-
熱部署
master管理進(jìn)程和Worker進(jìn)程是相互隔離的,這使得Nginx能夠彰顯熱部署的能力。通俗點(diǎn)來(lái)說(shuō),就是完全可以在724h不停止服務(wù)正常工作的情況下,可以升級(jí)Nginx*的可執(zhí)行文件、更新配置選項(xiàng)、更新日志文件等功能操作。
-
最自由的BSD許可協(xié)議
俗話說(shuō)“眾人拾柴火焰高”。也正是BSD許可協(xié)議帶來(lái)的極大優(yōu)勢(shì),為Nginx提供更強(qiáng)勁的發(fā)展動(dòng)力。
綜上所述,選擇Nginx的核心理由還是由于它能在支持高并發(fā)請(qǐng)求的同時(shí)保持高效的服務(wù)。
二、Nginx的安裝
1.源碼安裝
在正式安裝Nginx前需要保證服務(wù)器主機(jī)已經(jīng)安裝有編譯環(huán)境GCC開(kāi)發(fā)庫(kù)之類(lèi)的環(huán)境。
- GCC編譯環(huán)境工具安裝
①Ubuntu OS編譯環(huán)境使用如下命令:
apt-get install build-essential
apt-get install libtool
②CentOS編譯環(huán)境使用如下命令:
yum install -y gcc automake autoconf libtool make
yum install -y gcc-c++
安裝完成編譯環(huán)境,就可以著手準(zhǔn)備Nginx所需要的類(lèi)庫(kù)PCRE庫(kù)、zlib庫(kù)、OpenSSL開(kāi)發(fā)庫(kù)。
- PCRE庫(kù)安裝
首先介紹一下PCRE庫(kù)的作用,為Nginx的HTTP模塊提供解析正則表達(dá)式的基礎(chǔ)。這里直接通過(guò)下載源碼的方式進(jìn)行編譯安裝。根據(jù)需要的版本在PCRE源碼中選擇URL然后用下邊命令進(jìn)行下載
wget https://ftp.pcre.org/pub/pcre/pcre-8.42.tar.gz
## 現(xiàn)在完成后,對(duì)源碼包進(jìn)行解壓
tar -xzvf pcre-8.42.tar.gz
## 解壓完成進(jìn)入pcre-8.42目錄
cd pcre-8.42
## 執(zhí)行配置
./configure
## 進(jìn)行編譯并安裝
make
make install
- Zlib庫(kù)安裝
Zlib庫(kù)主要是針對(duì)HTTP包的內(nèi)容做gzip格式的壓縮。例如,Nginx的配置nginx.conf文件中配置gzip on。Zlib-1.2.11下載
## 使用Wget命令下載源碼
wget http://zlib.net/zlib-1.2.11.tar.gz
## 進(jìn)行解壓
tar -xzvf zlib-1.2.11.tar.gz
## 進(jìn)入zlib目錄進(jìn)行配置編譯安裝操作
cd zlib-1.2.11
./configure
make
make install
- Openssl安裝
如果對(duì)版本沒(méi)有特殊要求,OpenSSL我們采用命令安裝
## CentOS 安裝命令
yum install openssl openssl-devel
?
## Ubuntu/Debian 安裝命令
sudo apt-get install openssl
sudo apt-get install libssl-devel
- Nginx安裝
首先去Nginx官網(wǎng)下載合適版本的源碼。同時(shí)我們可以直接在服務(wù)器使用wget命令進(jìn)行下載。
wget http://nginx.org/download/nginx-1.14.0.tar.gz
## 解壓Nginx源碼
tar -xzvf nginx-1.14.0.tar.gz
cd nginx-1.14.0
?
## 進(jìn)行配置項(xiàng)的配置:(以下只是選擇了編譯Nginx源碼時(shí)的部分配置選項(xiàng))
# --sbin-path: 指定了可執(zhí)行文件的放置路徑,默認(rèn)路徑在<prefix>/sbin/nginx
# --conf-path: 指定了配置選項(xiàng)文件的放置路徑,默認(rèn)路徑在<prefix>/conf/nginx.conf
# --pid-path: 指定了pid文件的放置路徑,默認(rèn)路徑在<prefix>/logs>nginx.pid
# --with-http_ssl_module:安裝http_ssl_module,使得Nginx支持SSL協(xié)議,保證HTTPS服務(wù)。
# --with-pcre: 指定PCRE庫(kù)源碼的路徑,編譯Nginx時(shí)會(huì)進(jìn)入此路徑對(duì)源碼進(jìn)行編譯。
# --with-zlib: 指定Zlib庫(kù)源碼的路徑,編譯Nginx時(shí)會(huì)進(jìn)入此路徑對(duì)源碼進(jìn)行編譯。
./configure \
--sbin-path=/usr/local/nginx/nginx \
--conf-path=/usr/local/nginx/nginx.conf \
--pid-path=/usr/local/nginx/nginx.pid \
--with-http_ssl_module \
--with-pcre=/opt/app/openet/oetal1/cheney/pcre-8.42 \
--with-zlib=/opt/app/openet/oetal1/cheney/zlib-1.2.11
?
## 配置完成后進(jìn)行編譯安裝
make
make install
安裝完成之后可以進(jìn)行簡(jiǎn)單的測(cè)試,進(jìn)入配置的${--sbin-path}路徑下啟動(dòng)Nginx。
## 直接使用默認(rèn)配置執(zhí)行nginx可執(zhí)行文件啟動(dòng)服務(wù)
/usr/local/nginx/sbin/nginx
在保證服務(wù)器主機(jī)端口可以訪問(wèn)的情況下,使用瀏覽器訪問(wèn)主機(jī)IP地址,例如http://127.0.0.1,可以看到Nginx服務(wù)的默認(rèn)主頁(yè)。這就說(shuō)明Nginx服務(wù)正常啟動(dòng)了。然后可以根據(jù)項(xiàng)目具體的業(yè)務(wù)需求,對(duì)Nginx進(jìn)行特殊配置進(jìn)行詳細(xì)定制。