Nginx基礎(chǔ)
1.常見web服務(wù)器比較
2.為什么要使用nginx:
連接數(shù)(針對于多用戶的應(yīng)用場景):Nginx生成工作進程大审,每一個工作進程可以處理上千個連接。工作進程通過實現(xiàn)一個快速的循環(huán)算法不斷的獲取并處理事件蔬崩。從連接中分離出實際的請求處理工作羽峰,讓每一個工作進程只有當(dāng)新的事件發(fā)生時才與一個連接產(chǎn)生聯(lián)系卿城。因為服務(wù)器是單線程的并且并不為處理一個新的連接生成一個單獨的進程,所以內(nèi)存和CPU的消耗趨于保持相對一致唆姐,甚至是在大并發(fā)的情況下也如此。
而對于apache廓八,因為它進程模式雖然簡單而靈活奉芦,但并不適合大規(guī)模尤其是當(dāng)要處理像PHP這種需要占用大量內(nèi)存應(yīng)用程序代碼時,核心的區(qū)別在于apache是同步多進程模型剧蹂,一個連接對應(yīng)一個進程声功;nginx是異步的,多個連接(萬級別)可以對應(yīng)一個進程宠叼,nginx的優(yōu)勢是處理靜態(tài)請求先巴,cpu內(nèi)存使用率低,所以現(xiàn)在一般前端用nginx作為反向代理抗住壓力冒冬。
3.為什么要使用nginx+tomcat的模式
應(yīng)用分工:雖然Tomcat也可以認(rèn)為是HTTP服務(wù)器伸蚯,但通常它仍然會和Nginx配合在一起使用:
動靜態(tài)資源分離——運用Nginx的反向代理功能分發(fā)請求,所有動態(tài)資源的請求交給Tomcat简烤,而靜態(tài)資源的請求(例如圖片剂邮、視頻、CSS乐埠、JavaScript文件等)則直接由Nginx返回到瀏覽器抗斤,這樣能大大減輕Tomcat的壓力囚企。
負(fù)載均衡,當(dāng)業(yè)務(wù)壓力增大時瑞眼,可能一個Tomcat的實例不足以處理龙宏,那么這時可以啟動多個Tomcat實例進行水平擴展,而Nginx的負(fù)載均衡功能可以把請求通過算法分發(fā)到各個不同的實例進行處理伤疙。(nginx主要處理靜態(tài)資源银酗,而tomat主要處理動態(tài)資源,事實上nginx與tomcat都可以認(rèn)為是HTTP服務(wù)器徒像,但更多的可以認(rèn)為tomcat它是應(yīng)用服務(wù)器黍特,Tomcat是支持運行Servlet/JSP應(yīng)用程序的容器,這保證了它處理動態(tài)資源的能力
4.Nginx的功能特性
1)Nginx提供基本HTTP服務(wù)锯蛀,可以作為HTTP代理服務(wù)器和反向代理服務(wù)器灭衷,支持通過緩存加速訪問,可以完成簡單的負(fù)載均衡和容錯旁涤,支持包過濾功能翔曲,支持SSL等。
2)Nginx提供高級HTTP服務(wù)劈愚,可以進行自定義配置瞳遍,支持虛擬主機,支持URL重定向菌羽,支持網(wǎng)絡(luò)監(jiān)控掠械,支持流媒體傳輸?shù)?/p>
3)Nginx作為郵件代理服務(wù)器是最早開發(fā)這個產(chǎn)品的目的之一,支持IMAP/POP3 代理服務(wù)功能支持內(nèi)部SMTP代理服務(wù)
5.什么是代理(什么是正向注祖、反向代理):
1)正向代理:隱藏了真實的請求客戶端猾蒂,服務(wù)端不知道真實的客戶端是誰,客戶端請求的服務(wù)都被代理服務(wù)器代替來請求氓轰。(VPN的使用)
2)反向代理:隱藏了真實的服務(wù)端婚夫,當(dāng)我們請求 百度的時候,就像撥打10086一樣署鸡,背后可能有成千上萬臺服務(wù)器為我們服務(wù)案糙,但具體是哪一臺,你不知道靴庆,也不需要知道时捌,你只需要知道反向代理服務(wù)器是誰就好了,(http://www.baidu.com/) 就是我們的反向代理服務(wù)器炉抒,反向代理服務(wù)器會幫我們把請求轉(zhuǎn)發(fā)到真實的服務(wù)器那里去奢讨。Nginx就是性能非常好的反向代理服務(wù)器,用來做負(fù)載均衡焰薄。
兩者的區(qū)別在于代理的對象不一樣:正向代理代理的對象是客戶端拿诸,反向代理代理的對象是服務(wù)端(還有一種說法是internet與局域網(wǎng)請求方向的不同)
5.為什么要做反向代理:
1)流量分發(fā):將用戶蜂擁而入時扒袖,可用代理來將接受用戶請求并分發(fā)到空閑的服務(wù)器上。
2)安全:防止將IP端口號直接暴露在公網(wǎng)亩码,而代理服務(wù)器數(shù)量有限季率,修補安全漏洞更方便快捷
3)利于遷移:用戶和負(fù)載均衡設(shè)備直接通信,也意味著用戶做服務(wù)器域名解析時描沟,解析得到的IP其實是負(fù)載均衡的IP飒泻,而不是服務(wù)器的IP,這樣有一個好處是吏廉,當(dāng)新加入/移走服務(wù)器時泞遗,僅僅需要修改負(fù)載均衡的服務(wù)器列表,而不會影響現(xiàn)有的服務(wù)席覆。
Nginx安裝部署的一些學(xué)習(xí)思路
1史辙、安裝部署:
1)安裝nginx的模塊需要依賴第三方庫:通常有pcre(支持rewrite模塊)、zlib庫(支持gzip模塊)和openssl庫(支持ssl模塊)等
2)linux版本的nginx以及第三方模塊的下載:選擇需要的nginx版本佩伤,需要注意一般使用穩(wěn)定版髓霞,因為需要定制路徑以及添加第三方的模塊,因此是用源碼安裝方式畦戒。
3)預(yù)編譯:需要配置諸如—prefix=等路徑,因此先了解各個路徑代表的意義尤為重要结序。
4)編譯與安裝:利用make進行編譯障斋,make install進行安裝。
5)進行nginx的配置問及看是否有語法錯誤徐鹤、進行運行以及嘗試啟屠罚控制。
6)加入新的第三方模塊:需要注意的是通過返敬。configure進行重新預(yù)編譯遂庄,接著使用make進行編譯而不再使用make install安裝,否則會進行覆蓋劲赠,最后將把編譯目錄下objs/nginx文件直接覆蓋老的nginx文件即可涛目。
2、nginx的配置:
1)重點需要注意首先應(yīng)該了解nginx.conf的文件結(jié)構(gòu)凛澎,了解全局塊霹肝、events塊、http塊塑煎、server塊沫换、location塊的一般應(yīng)用場景。
2)了解常用的一些配置語句的功能最铁,如worker process數(shù)
3)了解nginx虛擬主機配置的結(jié)構(gòu)讯赏,以及每條語句實現(xiàn)的功能是什么垮兑。
nginx的模塊化、進程處理機制以及事件驅(qū)動模型
1漱挎、模塊化結(jié)構(gòu)(高拓展性):
以功能塊為單位進行程序設(shè)計系枪,,一個模塊負(fù)責(zé)一個功能识樱。各個模塊實行“高內(nèi)聚嗤无、低耦合”的方式,可以到達分布式開發(fā)的目的怜庸。
Nginx的模塊分為核心模塊当犯、標(biāo)準(zhǔn)HTTP模塊、HTTP模塊割疾、郵件服務(wù)模塊等五類嚎卫。
核心模塊:提供核心功能,一類是主體功能宏榕,包括進程管理拓诸、權(quán)限控制、錯誤日志等麻昼。另一類是用于響應(yīng)請求事件必須的功能奠支,包括事件驅(qū)動機制、正則表達式解析等抚芦。
標(biāo)準(zhǔn)HTTP模塊:快速編譯時默認(rèn)編譯倍谜。(基于IP地址的訪問控制)
可選HTTP模塊:快速編譯時默認(rèn)不編譯。(對HTTPS/SSL的支持)
郵件服務(wù)模塊:提供郵件服務(wù)叉抡。
2尔崔、進程處理機制(高處理能力):
1)一般的處理機制:多進程方式(Apache使用預(yù)生成進程)、多線程方式
2)網(wǎng)絡(luò)通信機制:異步機制褥民、同步機制季春、阻塞、非阻塞
四個概念:同步阻塞消返、同步非阻塞载弄、異步阻塞、異步非阻塞
Nginx能夠處理大量并發(fā)請求的與原因在于結(jié)合了多進程方式以及異步非阻塞的處理方式侦副,每個進程可以處理多個請求
3侦锯、nginx事件驅(qū)動模型(IO調(diào)用的高效率、低能耗)
輪詢or主動通知
Select模型(創(chuàng)建read秦驯、write尺碰、exception事件)、poll模型、epoll模型(把描述符的列表交給內(nèi)核負(fù)責(zé)亲桥,通過相關(guān)調(diào)用實現(xiàn)創(chuàng)建)
最后介紹一個Nginx中的小知識點
先看toot的用法
location /request_path/image/ {
root /local_path/image/;
}
這樣配置的結(jié)果就是當(dāng)客戶端請求 /request_path/image/cat.png 的時候洛心,
Nginx把請求映射為/local_path/image/request_path/image/cat.png **root是匹配后路徑追加到前面**
再看alias的用法
location /request_path/image/ {
alias /local_path/image/;
}
這時候,當(dāng)客戶端請求 /request_path/image/cat.png 的時候题篷,
Nginx把請求映射為/local_path/image/cat.png **alias是匹配后直接在alias路徑下查找词身,去除匹配內(nèi)容**
對比root就可以知道怎么用了吧~~ :)