一炮沐、Nginx為什么受青睞
? 在介紹Nginx具體的安裝、配置以及原理之前先聊聊概念常識問題回怜。那就是目前為什么Nginx深受青睞大年?那我們先從Nginx是什么開始聊起换薄。
1.Nginx是什么
-
簡單介紹
Nginx來自于俄羅斯,是在RamblerMedia工作的Igor Sysoev使用C語言編寫而成的跨平臺輕量級高性能的Web服務(wù)器翔试。Nginx可以運行在Linux轻要、FreeBSD、Solaris(Sun公司的類Unix OS)垦缅、MacOS冲泥、以及Windows等操作系統(tǒng)。操作系統(tǒng)的不同壁涎,也給Nginx帶來了一些好處凡恍,Nginx會使用當(dāng)前操作系統(tǒng)中特有的一些高效API來提高自身的性能。
-
Nginx和它的對手們
Nginx的對手們有Apache怔球、Lighttpd嚼酝、Tomcat、Jetty竟坛、IIS闽巩,它們同為Web服務(wù)器:具備Web服務(wù)器的基本功能;基于Rest架構(gòu)風(fēng)格担汤,以統(tǒng)一資源描述符(URI)或統(tǒng)一資源定位符(URL)作為溝通依據(jù)涎跨,通過HTTP為瀏覽器等Client程序提供各種網(wǎng)絡(luò)服務(wù)。
但是崭歧,這些Web服務(wù)器呢隅很,都多多少少因為各自的定位與發(fā)展方向都不盡相同,使得每一款Web服務(wù)器都各有特色:
? 1.Tomcat率碾、Jetty:都是面向Java語言設(shè)計的叔营。但是它們在性能方面與Nginx沒有什么可比性,因為這兩款服務(wù)器都是重量級選手播掷∩蟊啵可能有伙伴會很疑惑撼班,我已經(jīng)用Tomcat跑起服務(wù)歧匈,同樣配置后可以直接訪問為什么還要在加層外套Nginx,對于這個問題砰嘁,在后邊對這一點進(jìn)行詳細(xì)的分析件炉。【】
? 2.IIS:這位選手呢矮湘,來自于微軟家族斟冕。然后特點大家可能就很清楚了,它只能在Windows OS運行(不過網(wǎng)上也有工具可以把它運行在LinuxOS中缅阳,但是并不是很完美哦)磕蛇。可能拉低它顏值的就是穩(wěn)定性與性能了,Windows OS作為服務(wù)器的話秀撇,穩(wěn)定性和部分性能都不能和類Unix OS進(jìn)行媲美超棺,所以呢,在高性能Web服務(wù)器的場合中呵燕,IIS可能就要被“淘汰”了棠绘。
? 3.Apache:這是一位壓軸級選手,是發(fā)展周期最長的再扭,毫無疑問是世界第一大Web服務(wù)器氧苍,在2012年遙遙領(lǐng)先其他選手。它畢竟有很多優(yōu)秀的地方:穩(wěn)定泛范、開源让虐、跨平臺等。但是美中不足的是敦跌,它被設(shè)計成為了重量級澄干、不支持高并發(fā)的Web服務(wù)器。如果有數(shù)以萬計的HTTP請求同時訪問柠傍,服務(wù)器就會面臨大量內(nèi)存消耗的問題麸俘,操作系統(tǒng)也會跟著收到牽連,畢竟Apache的進(jìn)程做進(jìn)程間切換時會給服務(wù)器的CPU帶來重大壓力惧笛,同時會伴隨著響應(yīng)效率降低从媚,這致命的一擊,導(dǎo)致這位來自“貴族世家”的選手在高性能Web服務(wù)器的舞臺上沒有了地位患整。
? 4.Lighttpd:與Nginx同樣是輕量級拜效、高性能的Web服務(wù)器。但是它并沒有得到國內(nèi)開發(fā)者的鐘愛各谚,而是被歐美的開發(fā)者們所追捧紧憾。
-
恩寵--Nginx
Nginx的代碼也是開源的而且是最自由的2-clause BSD-like license許可證。Nginx使用的架構(gòu)是基于事件驅(qū)動的昌渤,能夠并發(fā)處理百萬級別的TCP連接赴穗。由于Nginx的高度模塊化和具有最自由的許可證,讓Nginx的第三方模塊擴(kuò)展功能更加充實膀息。優(yōu)秀的設(shè)計還帶來了極佳的穩(wěn)定性體驗般眉。所以,Nginx大量應(yīng)用于大流量的網(wǎng)站來高效處理大規(guī)模高并發(fā)連接潜支。種種跡象表明甸赃,Nginx在性能方面很出色。
2.Nginx的特點
-
更快
快主要體現(xiàn)在兩方面:①在正常的情況下冗酿,單次請求會得到更快的響應(yīng)埠对;②在數(shù)以萬計的并發(fā)請求中络断,Nginx可以比其他Web服務(wù)器更快的響應(yīng)請求。
-
高擴(kuò)展性
Nginx的高度模塊化決定了其具有高擴(kuò)展性项玛。它完全是由多個不同功能妓羊、不同層次、不同類型以及耦合度極低的模塊組合而成稍计。它的模塊都是嵌入到二進(jìn)制文件中執(zhí)行躁绸,使得第三方開發(fā)的模塊也一樣完美支持性能。所以高并發(fā)的網(wǎng)站完全可以根據(jù)自身項目業(yè)務(wù)特性定制屬于自己的模塊臣嚣。
-
高可靠性
這個特點應(yīng)該是選擇Web服務(wù)器最基本的條件净刮。Nginx的穩(wěn)定性,大家有目共睹硅则。國內(nèi)多家高流量并發(fā)的網(wǎng)站在核心的服務(wù)器上大規(guī)模使用Nginx淹父。官方提供的常用模塊是非常穩(wěn)定的,每一個Worker進(jìn)程都相對獨立怎虫,把耦合性降至最低暑认。master進(jìn)程在其中一個Worker進(jìn)程出錯時可以快速“拉起”新的Worker子進(jìn)程提供相應(yīng)的服務(wù)。
-
低內(nèi)存消耗
據(jù)數(shù)據(jù)測試大审,一般情況下蘸际,1W個不活躍的HTTP Keep-Alive連接在Nginx中消耗只有2.5MB的內(nèi)存。(這也是Nginx能夠支持高并發(fā)連接的基礎(chǔ))
-
單機(jī)支持10W+的并發(fā)連接
由于現(xiàn)在是海量數(shù)據(jù)時代徒扶,高并發(fā)無疑成為大家青睞的對象粮彤。理論上,Nginx支持的并發(fā)連接數(shù)量取決于內(nèi)存姜骡,10W+的并發(fā)連接并沒有到極限导坟。但是,能否及時處理更多的并發(fā)連接應(yīng)該取決于項目業(yè)務(wù)的需求圈澈。
-
熱部署
master管理進(jìn)程和Worker進(jìn)程是相互隔離的惫周,這使得Nginx能夠彰顯熱部署的能力。通俗點來說康栈,就是完全可以在724h不停止服務(wù)正常工作的情況下递递,可以升級Nginx*的可執(zhí)行文件、更新配置選項谅将、更新日志文件等功能操作漾狼。
-
最自由的BSD許可協(xié)議
俗話說“眾人拾柴火焰高”重慢。也正是BSD許可協(xié)議帶來的極大優(yōu)勢饥臂,為Nginx提供更強(qiáng)勁的發(fā)展動力。
綜上所述似踱,選擇Nginx的核心理由還是由于它能在支持高并發(fā)請求的同時保持高效的服務(wù)隅熙。
二稽煤、Nginx的安裝
1.源碼安裝
在正式安裝Nginx前需要保證服務(wù)器主機(jī)已經(jīng)安裝有編譯環(huán)境GCC開發(fā)庫之類的環(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所需要的類庫PCRE庫酵熙、zlib庫、OpenSSL開發(fā)庫驰坊。
- PCRE庫安裝
首先介紹一下PCRE庫的作用匾二,為Nginx的HTTP模塊提供解析正則表達(dá)式的基礎(chǔ)。這里直接通過下載源碼的方式進(jìn)行編譯安裝拳芙。根據(jù)需要的版本在PCRE源碼中選擇URL然后用下邊命令進(jìn)行下載
wget https://ftp.pcre.org/pub/pcre/pcre-8.42.tar.gz
## 現(xiàn)在完成后察藐,對源碼包進(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庫安裝
Zlib庫主要是針對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安裝
如果對版本沒有特殊要求洋机,OpenSSL我們采用命令安裝
## CentOS 安裝命令
yum install openssl openssl-devel
?
## Ubuntu/Debian 安裝命令
sudo apt-get install openssl
sudo apt-get install libssl-devel
- Nginx安裝
首先去Nginx官網(wǎng)下載合適版本的源碼俭正。同時我們可以直接在服務(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)行配置項的配置:(以下只是選擇了編譯Nginx源碼時的部分配置選項)
# --sbin-path: 指定了可執(zhí)行文件的放置路徑,默認(rèn)路徑在<prefix>/sbin/nginx
# --conf-path: 指定了配置選項文件的放置路徑,默認(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庫源碼的路徑染服,編譯Nginx時會進(jìn)入此路徑對源碼進(jìn)行編譯。
# --with-zlib: 指定Zlib庫源碼的路徑叨恨,編譯Nginx時會進(jìn)入此路徑對源碼進(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)行簡單的測試,進(jìn)入配置的${--sbin-path}路徑下啟動Nginx特碳。
## 直接使用默認(rèn)配置執(zhí)行nginx可執(zhí)行文件啟動服務(wù)
/usr/local/nginx/sbin/nginx
在保證服務(wù)器主機(jī)端口可以訪問的情況下诚亚,使用瀏覽器訪問主機(jī)IP地址,例如http://127.0.0.1午乓,可以看到Nginx服務(wù)的默認(rèn)主頁站宗。這就說明Nginx服務(wù)正常啟動了。然后可以根據(jù)項目具體的業(yè)務(wù)需求益愈,對Nginx進(jìn)行特殊配置進(jìn)行詳細(xì)定制梢灭。