Nginx高性能Web服務(wù)器應(yīng)用與實(shí)戰(zhàn)全書(shū)電子講義完整版課件_第1頁(yè)
Nginx高性能Web服務(wù)器應(yīng)用與實(shí)戰(zhàn)全書(shū)電子講義完整版課件_第2頁(yè)
Nginx高性能Web服務(wù)器應(yīng)用與實(shí)戰(zhàn)全書(shū)電子講義完整版課件_第3頁(yè)
Nginx高性能Web服務(wù)器應(yīng)用與實(shí)戰(zhàn)全書(shū)電子講義完整版課件_第4頁(yè)
Nginx高性能Web服務(wù)器應(yīng)用與實(shí)戰(zhàn)全書(shū)電子講義完整版課件_第5頁(yè)
已閱讀5頁(yè),還剩537頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Nginx優(yōu)勢(shì):I/O多路復(fù)用Web服務(wù)與Nginx安裝Nginx了解Web服務(wù)器軟件的整體發(fā)展趨勢(shì)掌握Nginx的安裝方式熟悉Nginx作為Web服務(wù)器軟件的優(yōu)勢(shì)熟悉多路復(fù)用的特點(diǎn)1.1Web服務(wù)與NginxWeb服務(wù)是給用戶提供登錄的平臺(tái),以達(dá)到上網(wǎng)目的的服務(wù)。常用的Web服務(wù)器軟件。1.ApacheApache是一款Web服務(wù)器軟件,由于它的跨平臺(tái)性和安全性,至今一直是世界最流行的Web服務(wù)器軟件之一。2.LighttpdLighttpd是開(kāi)源軟件中較為優(yōu)秀的Web服務(wù)器軟件之一,占用內(nèi)存少,對(duì)CPU處理速度進(jìn)行了優(yōu)化。1.1.1Web服務(wù)簡(jiǎn)介1.1Web服務(wù)與Nginx3.Node.jsNode.js是一款較為“年輕”的Web服務(wù)器軟件。4.NginxNginx是目前市場(chǎng)發(fā)展趨勢(shì)較為樂(lè)觀的一款Web服務(wù)器軟件,安裝更簡(jiǎn)單、配置文件更簡(jiǎn)潔、漏洞較少并且啟動(dòng)容易等一系列優(yōu)勢(shì)。1.1.1Web服務(wù)簡(jiǎn)介1.1Web服務(wù)與Nginx1.1.2

Web服務(wù)器軟件發(fā)展趨勢(shì)Web服務(wù)器軟件所占市場(chǎng)份額如表1.1所示。1.1Web服務(wù)與Nginx1.1.3

了解Nginx在互聯(lián)網(wǎng)普及之后,單臺(tái)服務(wù)器如何支持上萬(wàn)并發(fā)量成為亟待解決的問(wèn)題,這也是著名的“C10k問(wèn)題”,而Nginx的誕生近乎完美地解決了這個(gè)問(wèn)題。Nginx是一款高性能、輕量級(jí)的Web服務(wù)器軟件,是一款反向代理服務(wù)器軟件,也是一款郵箱代理服務(wù)器軟件。1.1Web服務(wù)與Nginx1.1.3

了解NginxApache與Nginx對(duì)比如表1.2所示。1.2Nginx優(yōu)勢(shì):I/O多路復(fù)用1.2.1

I/O接口與I/O流I是指輸入接口(Input),O是指輸出(Output)。當(dāng)傳輸數(shù)據(jù)時(shí),數(shù)據(jù)通過(guò)I/O接口出入源地址與目標(biāo)地址,I/O接口起到輸入和輸出的作用。I/O流可以抽象地理解為數(shù)據(jù)的序列以流的形式進(jìn)行傳輸,主要處理設(shè)備之間的數(shù)據(jù)傳輸。當(dāng)傳輸數(shù)據(jù)時(shí),源地址通過(guò)接口輸出一個(gè)I/O流,I/O程序去讀取數(shù)據(jù),再將讀到的數(shù)據(jù)通過(guò)接口寫(xiě)入目標(biāo)地址。其實(shí)傳輸數(shù)據(jù)就是一個(gè)讀取和寫(xiě)入的過(guò)程,如圖1.6、圖1.7所示。1.2Nginx優(yōu)勢(shì):I/O多路復(fù)用1.2.2

理論方法在傳統(tǒng)的多線程并發(fā)中,每一個(gè)I/O流進(jìn)入目標(biāo)主機(jī)的時(shí)候,系統(tǒng)都會(huì)分配一個(gè)線程管理,如圖1.8所示。這樣一來(lái),服務(wù)器與用戶之間就一直保持著同步聯(lián)系。如果服務(wù)器響應(yīng)時(shí)間長(zhǎng),將會(huì)非常浪費(fèi)資源。1.2Nginx優(yōu)勢(shì):I/O多路復(fù)用1.2.2

理論方法I/O多路復(fù)用的原理是單個(gè)線程通過(guò)監(jiān)控每個(gè)I/O流,以類似撥開(kāi)關(guān)的方式去管理多個(gè)會(huì)話,如圖1.9所示。其實(shí)就是當(dāng)請(qǐng)求等待數(shù)據(jù)庫(kù)處理時(shí),線程又去處理其他請(qǐng)求;當(dāng)之前的請(qǐng)求返回時(shí),線程又繼續(xù)處理之前的請(qǐng)求。這樣不僅增加了服務(wù)器的吞吐量,也就是在單位時(shí)間內(nèi)處理了更多請(qǐng)求,還減少了系統(tǒng)資源消耗。1.2Nginx優(yōu)勢(shì):I/O多路復(fù)用1.2.3

多路復(fù)用的實(shí)現(xiàn)方式epoll實(shí)現(xiàn)了多路復(fù)用,epoll最大的特點(diǎn)就是異步、非阻塞。異步是指線程在將請(qǐng)求發(fā)送給數(shù)據(jù)庫(kù)處理時(shí),它不會(huì)一直等待請(qǐng)求返回。而它不等待請(qǐng)求返回就去休息或者做別的事,這就是非阻塞。服務(wù)器端中每進(jìn)來(lái)一個(gè)請(qǐng)求,會(huì)有一個(gè)線程去處理。但當(dāng)它將請(qǐng)求發(fā)送給數(shù)據(jù)庫(kù)時(shí),數(shù)據(jù)庫(kù)無(wú)法立即將請(qǐng)求返回,這就發(fā)生了阻塞。這時(shí)線程并不會(huì)一直等著,而是先去注冊(cè)一個(gè)事件。一旦請(qǐng)求返回,就會(huì)觸發(fā)之前注冊(cè)的事件,系統(tǒng)會(huì)通知這個(gè)線程回來(lái)接著處理之前的請(qǐng)求,這就是異步回調(diào)調(diào),如圖1.10所示。1.3

安裝Nginx1.3.1

Nginx版本類型Nginx版本分為三種類型:主線版、穩(wěn)定版、舊版。主線版是最新發(fā)布的版本,也就是說(shuō)它的新漏洞還沒(méi)有被發(fā)現(xiàn),目前很少有人知道它的穩(wěn)定性如何。如果在生產(chǎn)環(huán)境中使用主線版,很可能出現(xiàn)新漏洞,為網(wǎng)站維護(hù)增加難度,還會(huì)對(duì)企業(yè)線上業(yè)務(wù)造成不必要的損失。舊版雖然相對(duì)主線版更加穩(wěn)定,但性能一般比穩(wěn)定版差。企業(yè)通常都選擇使用穩(wěn)定版,而主線版通常在測(cè)試環(huán)境中進(jìn)行試用1.3

安裝Nginx1.3.1

Nginx版本類型官方版本,如圖1.12所示。1.3

安裝Nginx1.3.2

YUM安裝NginxNginx的安裝鏈接在它的版本類型的下方,單擊鏈接,在新頁(yè)面中找到所使用系統(tǒng)版本的安裝方式,如圖1.13、1.14所示。1.3

安裝Nginx1.3.2

YUM安裝Nginx下載yum-utils包,它是YUM倉(cāng)庫(kù)的一個(gè)擴(kuò)展庫(kù)。配置YUM倉(cāng)庫(kù),創(chuàng)建一個(gè)/etc/yum.repos.d/nginx.repo文件1.3

安裝Nginx1.3.2

YUM安裝Nginx安裝Nginx的穩(wěn)定版。安裝主線版,需要在使用安裝命令之前再執(zhí)行一條命令。啟動(dòng)Nginx。1.3

安裝Nginx1.3.3

源碼安裝Nginx安裝編譯所需的工具和依賴庫(kù).獲取源碼包,有兩種方式。方式一是直接從Nginx官方網(wǎng)站下載源碼包到計(jì)算機(jī),然后通過(guò)終端模擬器用rz命令將其上傳。1.3

安裝Nginx1.3.3

源碼安裝Nginx彈出圖1.15所示的對(duì)話框,選擇源碼包所在路徑并單擊“確定”。1.3

安裝Nginx1.3.3

源碼安裝Nginx方式二是使用wget命令加源碼包鏈接直接將源碼包下載到服務(wù)器。將源碼包上傳至服務(wù)器后,創(chuàng)建一個(gè)放置它的文件夾。使用mv命令將源碼包移動(dòng)到創(chuàng)建的文件夾中。進(jìn)入放置源碼包的文件夾。解壓縮源碼包。1.3

安裝Nginx1.3.3

源碼安裝Nginx解壓之后會(huì)發(fā)現(xiàn)在文件夾中多了一個(gè)nginx-1.16.0文件夾,進(jìn)入這個(gè)文件夾開(kāi)始配置和檢測(cè)環(huán)境。接下來(lái)就是編譯和安裝。編譯和安裝停止和重啟需要用到絕對(duì)路徑。1.3

安裝Nginx1.3.4

訪問(wèn)NginxNginx為用戶提供了訪問(wèn)網(wǎng)站的平臺(tái),訪問(wèn)搭建好的Nginx服務(wù)。用戶在訪問(wèn)之前需要關(guān)閉服務(wù)器的外部防火墻與內(nèi)部防火墻,否則訪問(wèn)請(qǐng)求會(huì)被阻止。一種是永久關(guān)閉。另一種是臨時(shí)關(guān)閉。1.3

安裝Nginx1.3.4

訪問(wèn)Nginx打開(kāi)瀏覽器,輸入服務(wù)器的IP地址。當(dāng)瀏覽器出現(xiàn)圖1.16所示的頁(yè)面時(shí)代表訪問(wèn)成功。第2章網(wǎng)絡(luò)協(xié)議了解網(wǎng)絡(luò)協(xié)議了解HTTPHTTP詳解了解HTTP了解網(wǎng)絡(luò)協(xié)議HTTP詳解了解OSI模型熟悉URI、URL、URN三者的關(guān)系與含義熟悉TCP三次握手與四次揮手了解HTTP的工作原理2.1了解網(wǎng)絡(luò)協(xié)議網(wǎng)絡(luò)七層協(xié)議模型又叫作開(kāi)放系統(tǒng)互連模型,簡(jiǎn)稱OSI模型是一種常用的說(shuō)法,它將復(fù)雜的網(wǎng)絡(luò)劃分為七層,使用戶可以更好地理解,如圖2.1所示。OSI模型劃分為物理層、傳輸層、會(huì)話層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、表示層、應(yīng)用層。其中,層與層之間相互支持,每一層都服務(wù)于它的上一層,應(yīng)用層直接服務(wù)于用戶。從應(yīng)用層到傳輸層為高層,被稱為主機(jī)層,用來(lái)支持用戶操作;從網(wǎng)絡(luò)層到物理層為低層,被稱為媒體層,用來(lái)支持設(shè)備連接。2.1.1

OSI模型2.1了解網(wǎng)絡(luò)協(xié)議1.物理層物理層是OSI模型中的最底層,由物理設(shè)備(如計(jì)算機(jī)、服務(wù)器等)構(gòu)成。物理設(shè)備之間由媒體(如電纜、光纖等)連接,形成一個(gè)通路,供數(shù)據(jù)的傳輸。2.?dāng)?shù)據(jù)鏈路層數(shù)據(jù)鏈路層在物理層的傳輸基礎(chǔ)上優(yōu)化了傳輸功能。在這一層,協(xié)議規(guī)定數(shù)據(jù)傳輸?shù)穆肪€,每條數(shù)據(jù)都有特定的傳輸路線,這樣的傳輸路線就叫作數(shù)據(jù)鏈路。數(shù)據(jù)在數(shù)據(jù)鏈路中傳輸,保證了在傳輸過(guò)程中不會(huì)出錯(cuò),有助于更好地去服務(wù)網(wǎng)絡(luò)層,如圖2.3所示。2.1.1

OSI模型2.1了解網(wǎng)絡(luò)協(xié)議3.網(wǎng)絡(luò)層網(wǎng)絡(luò)層(NetworkLayer)解決在網(wǎng)絡(luò)中數(shù)據(jù)傳輸時(shí)的尋址、路由選擇以及連接的建立、保持、終止等問(wèn)題。尋址就是尋找目標(biāo)地址,路由是指數(shù)據(jù)傳輸?shù)穆肪€。4.傳輸層傳輸層(TransportLayer)基于網(wǎng)絡(luò)層進(jìn)行設(shè)備之間的通信。它使用端口尋址的方式在兩個(gè)主機(jī)的應(yīng)用程序之間進(jìn)行數(shù)據(jù)傳輸,在傳輸層傳輸?shù)臄?shù)據(jù)叫作報(bào)文。傳輸層為會(huì)話層提供了可靠的傳輸。報(bào)文傳輸如圖2.4所示。2.1.1

OSI模型2.1了解網(wǎng)絡(luò)協(xié)議5.會(huì)話層會(huì)話層負(fù)責(zé)兩個(gè)設(shè)備中應(yīng)用程序之間的會(huì)話管理、會(huì)話同步及重新同步。其中會(huì)話管理包括建立會(huì)話、會(huì)話保持及會(huì)話終止。在傳輸文件之前,源地址會(huì)給目標(biāo)地址發(fā)送一個(gè)請(qǐng)求消息。目標(biāo)地址收到請(qǐng)求消息后給源地址發(fā)送一個(gè)反饋,告訴它“我準(zhǔn)備好接收了”,使源地址了解目標(biāo)地址的狀態(tài),并作出相應(yīng)的動(dòng)作。當(dāng)傳輸下一個(gè)文件時(shí),又會(huì)發(fā)起這樣的會(huì)話,這就是會(huì)話同步。2.1.1

OSI模型2.1了解網(wǎng)絡(luò)協(xié)議會(huì)話連接會(huì)在一段完整的數(shù)據(jù)傳輸結(jié)束時(shí),創(chuàng)建一個(gè)校驗(yàn)點(diǎn)來(lái)記錄此刻的狀態(tài)。根據(jù)校驗(yàn)點(diǎn),可以在傳輸過(guò)程中發(fā)生中斷再重新開(kāi)始時(shí)按照之前的狀態(tài)傳輸,不需要再將傳輸過(guò)的數(shù)據(jù)重新傳輸,這就是重新同步,如圖2.5所示。2.1.1

OSI模型2.1了解網(wǎng)絡(luò)協(xié)議6.表示層表示層可以對(duì)數(shù)據(jù)進(jìn)行安全傳輸和語(yǔ)法翻譯,在會(huì)話層的基礎(chǔ)上使數(shù)據(jù)傳輸更加流暢。7.應(yīng)用層應(yīng)用層(ApplicationLayer)不同于其他層,它直接服務(wù)于用戶,為用戶提供應(yīng)用服務(wù)。2.1.1

OSI模型2.1了解網(wǎng)絡(luò)協(xié)議五層劃分為應(yīng)用層、傳輸層、網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層、物理層,四層劃分為應(yīng)用層、傳輸層、網(wǎng)絡(luò)層、網(wǎng)絡(luò)接口層。如圖2.6所示2.1.2TCP/IP模型2.1了解網(wǎng)絡(luò)協(xié)議2.1.2TCP/IP模型這里TCP/IP模型中的IP,不是指IP地址,而是指協(xié)議。IP通過(guò)IP地址與媒體訪問(wèn)控制地址定位源地址和目標(biāo)地址,達(dá)到傳輸數(shù)據(jù)的目的。四層與五層模型將七層模型做了簡(jiǎn)化,如表2.1所示。2.1了解網(wǎng)絡(luò)協(xié)議TCP是一種可靠的傳輸層通信協(xié)議,基于字節(jié)流?;赥CP/IP傳輸?shù)臄?shù)據(jù)都被分段壓縮之后再進(jìn)行傳輸,所以傳輸層傳輸?shù)臄?shù)據(jù)又被稱為包,也叫數(shù)據(jù)包。在傳輸過(guò)程中,TCP會(huì)將每個(gè)數(shù)據(jù)包編號(hào),這樣即使數(shù)據(jù)包丟失也能及時(shí)發(fā)現(xiàn)并重新傳輸,如圖2.7所示。2.1.3

TCP2.1了解網(wǎng)絡(luò)協(xié)議1.創(chuàng)建連接——三次握手(1)第一次握手首先,服務(wù)器端創(chuàng)建傳輸控制塊,并進(jìn)入監(jiān)聽(tīng)狀態(tài),隨時(shí)可以與客戶端進(jìn)行連接??蛻舳艘残枰?jiǎng)?chuàng)建傳輸控制塊,接著向服務(wù)器端發(fā)送請(qǐng)求連接的報(bào)文,這是第一次握手。其中,報(bào)文包括:頭部SYN=1和序列號(hào)seq=x。由于這是一個(gè)SYN報(bào)文,所以不會(huì)傳輸數(shù)據(jù),但會(huì)消耗掉一個(gè)序列號(hào),發(fā)送之后客戶端進(jìn)入同步已發(fā)送(SYN-SENT)狀態(tài)。2.1.3

TCP2.1了解網(wǎng)絡(luò)協(xié)議(2)第二次握手服務(wù)器端收到請(qǐng)求連接的報(bào)文后,向客戶端發(fā)送確認(rèn)報(bào)文,這是第二次握手。其中,報(bào)文中內(nèi)容為ACK=1、SYN=1、返回序列號(hào)ack=x+1,以及報(bào)文序列號(hào)seq=y,之后服務(wù)器端進(jìn)入同步收到(SYN-RCVD)狀態(tài)。由于這個(gè)報(bào)文中也含有SYN,所以同樣不會(huì)傳輸數(shù)據(jù),但仍會(huì)消耗序列號(hào)。2.1.3

TCP2.1了解網(wǎng)絡(luò)協(xié)議(3)第三次握手客戶端收到確認(rèn)報(bào)文后,同樣要給服務(wù)器端發(fā)送確認(rèn)報(bào)文,這是第三次握手。其中,報(bào)文頭部是ACK=1,返回序列號(hào)是ack=y+1,并加入該報(bào)文的序列號(hào)seq=x+1,之后客戶端進(jìn)入已建立連接(ESTABLISHED)狀態(tài)。這次的報(bào)文中不含有SYN,所以可以傳輸數(shù)據(jù)。如果不傳輸數(shù)據(jù),就不需要消耗序列號(hào)了。2.1.3

TCP2.1了解網(wǎng)絡(luò)協(xié)議服務(wù)器端收到來(lái)自客戶端的確認(rèn)報(bào)文后,也進(jìn)入已建立連接(ESTABLISHED)狀態(tài)。此時(shí),TCP連接創(chuàng)建完成,如圖2.8所示。2.1.3

TCP2.1了解網(wǎng)絡(luò)協(xié)議2.終止連接——四次揮手(1)第一次揮手首先,客戶端向服務(wù)器端發(fā)送釋放連接報(bào)文,同時(shí)停止數(shù)據(jù)傳輸。釋放連接報(bào)文頭部為FIN=1,序列號(hào)為seq=u。發(fā)送之后,客戶端進(jìn)入終止等待1(FIN-WAIT-1)狀態(tài)。無(wú)論FIN報(bào)文有沒(méi)有傳輸數(shù)據(jù),都需要消耗一個(gè)序列號(hào)。2.1.3

TCP2.1了解網(wǎng)絡(luò)協(xié)議(2)第二次揮手服務(wù)器端收到釋放連接報(bào)文之后,向客戶端發(fā)送確認(rèn)報(bào)文,報(bào)文頭部為ACK=1,返回序列號(hào)ack=u+1、報(bào)文本身的序列號(hào)seq=v。這條報(bào)文發(fā)送之后,服務(wù)器端就會(huì)進(jìn)入關(guān)閉等待(CLOSE-WAIT)狀態(tài)。這時(shí),客戶端不再發(fā)送數(shù)據(jù),但仍可以接收數(shù)據(jù),而服務(wù)器端仍可以向客戶端發(fā)送數(shù)據(jù),這個(gè)狀態(tài)叫作半關(guān)閉狀態(tài)。這個(gè)狀態(tài)會(huì)持續(xù)一段時(shí)間,直到服務(wù)器端將所有數(shù)據(jù)發(fā)送完畢。2.1.3

TCP2.1了解網(wǎng)絡(luò)協(xié)議(3)第三次揮手客戶端收到服務(wù)器端的確認(rèn)報(bào)文后,就會(huì)進(jìn)入終止等待2(FIN-WAIT-2)狀態(tài),同時(shí)接收數(shù)據(jù)并等待服務(wù)器端發(fā)送釋放連接報(bào)文。服務(wù)器端將數(shù)據(jù)發(fā)送完之后,接著向客戶端發(fā)送釋放連接報(bào)文。報(bào)文頭部為FIN=1,序列號(hào)為ack=u+1,而在之前的半關(guān)閉狀態(tài)服務(wù)器端可能發(fā)送了數(shù)據(jù),并消耗了序列號(hào),這里假設(shè)序列號(hào)為seq=w。將這條報(bào)文發(fā)送之后,服務(wù)器端就會(huì)進(jìn)入最后確認(rèn)(LAST-ACK)狀態(tài),并等待客戶端發(fā)送確認(rèn)報(bào)文。2.1.3

TCP2.1了解網(wǎng)絡(luò)協(xié)議(4)第四次揮手客戶端收到釋放連接報(bào)文后,向服務(wù)器端發(fā)送確認(rèn)報(bào)文。報(bào)文頭部為ACK=1,返回序列號(hào)為ack=w+1,報(bào)文本身的序列號(hào)為seq=u+1。發(fā)送之后,客戶端將進(jìn)入時(shí)間等待(TIME-WAIT)狀態(tài)。這時(shí),四次揮手已經(jīng)結(jié)束,但TCP連接仍然沒(méi)有釋放。2.1.3

TCP2.1了解網(wǎng)絡(luò)協(xié)議客戶端需要經(jīng)過(guò)最長(zhǎng)報(bào)文段壽命,這個(gè)時(shí)間通常為2分鐘,將傳輸控制塊撤銷后,才進(jìn)入關(guān)閉(CLOSED)狀態(tài)。而服務(wù)器端結(jié)束TCP連接要更早一些,它一收到確認(rèn)報(bào)文,就立即撤銷傳輸控制塊并進(jìn)入關(guān)閉狀態(tài),如圖2.9所示。2.1.3

TCP2.2了解HTTPHTTP是一種面向連接的、建立在TCP上的無(wú)狀態(tài)連接,服務(wù)于Web通信。HTTP先建立客戶端與服務(wù)器端的連接,再將客戶端的請(qǐng)求發(fā)送給服務(wù)器端,服務(wù)器端接收到請(qǐng)求后,按照請(qǐng)求給客戶端調(diào)用對(duì)應(yīng)的文件,同時(shí)給客戶端發(fā)送一個(gè)響應(yīng)信息。當(dāng)客戶端接收服務(wù)器端所返回的信息后,將請(qǐng)求到的資源通過(guò)瀏覽器顯示出來(lái),并斷開(kāi)連接,如圖2.10所示。2.2.1

HTTP簡(jiǎn)介2.2了解HTTPHTTP的連接基于TCP,具體連接流程如圖2.11所示。2.2.1

HTTP簡(jiǎn)介2.2了解HTTP如果連接過(guò)程中出現(xiàn)錯(cuò)誤,服務(wù)器端會(huì)將錯(cuò)誤信息返回到客戶端,并顯示到瀏覽器上,如圖2.12所示。2.2.1

HTTP簡(jiǎn)介2.2了解HTTP狀態(tài)碼是反映請(qǐng)求響應(yīng)結(jié)果的一種方式,用于告知用戶請(qǐng)求執(zhí)行的結(jié)果,不同的狀態(tài)碼代表著不同的響應(yīng)結(jié)果,狀態(tài)碼如表2.2~表2.6所示。2.2.1

HTTP簡(jiǎn)介2.2了解HTTP2.2.1

HTTP簡(jiǎn)介2.2了解HTTP2.2.1

HTTP簡(jiǎn)介2.2了解HTTP2.2.1

HTTP簡(jiǎn)介2.2了解HTTP在客戶端發(fā)送HTTP請(qǐng)求之前,要先與服務(wù)器端建立一個(gè)TCP連接,在TCP連接的基礎(chǔ)上完成HTTP請(qǐng)求與響應(yīng)。在一次HTTP請(qǐng)求完成后,客戶端與服務(wù)器端的TCP連接并沒(méi)有關(guān)閉。在下一次HTTP請(qǐng)求開(kāi)始時(shí),可以直接使用這個(gè)現(xiàn)有的連接,不需要再進(jìn)行三次握手,減少了資源消耗,這就是TCP長(zhǎng)連接,如圖2.13所示。2.2.2

版本類型2.2了解HTTP如果在一次HTTP請(qǐng)求完成后就關(guān)閉TCP連接,那么下次請(qǐng)求時(shí)需要重新建立連接,這就叫作TCP短連接,如圖2.14所示。2.2.2

版本類型2.2了解HTTP1.HTTP/0.9HTTP/0.9是HTTP的初始版本,它的結(jié)構(gòu)簡(jiǎn)單,只能執(zhí)行簡(jiǎn)單的GET請(qǐng)求方式,并且只能訪問(wèn)HTML格式的資源。2.HTTP/1.0它增加了POST和HEAD請(qǐng)求方式,同時(shí)可以訪問(wèn)很多不同格式的資源,支持多種數(shù)據(jù)格式。另外,也支持高速緩存器(Cache),在規(guī)定時(shí)間內(nèi)用戶再次訪問(wèn)之前的資源,只需要訪問(wèn)Cache即可,減少了響應(yīng)時(shí)間。但是1.0版本只能支持短連接,每一次請(qǐng)求都會(huì)經(jīng)歷三次握手和四次揮手,所以發(fā)送速度較慢。2.2.2

版本類型2.2了解HTTP資源格式類型的增多,又給1.0版本添加了一個(gè)任務(wù),那就是告訴客戶端所請(qǐng)求資源的格式類型。這些格式類型又被叫作多用途互聯(lián)網(wǎng)郵件擴(kuò)展類型。。常見(jiàn)的MIME如表2.7所示。2.2.2

版本類型2.2了解HTTP3.HTTP/1.1HTTP/1.1最大的優(yōu)勢(shì)就是在一個(gè)完整的HTTP請(qǐng)求結(jié)束之后,TCP連接是默認(rèn)不關(guān)閉的,可以在下一次HTTP請(qǐng)求的時(shí)候接著使用這個(gè)TCP連接,完美地支持了長(zhǎng)連接。在HTTP/1.1中,不僅TCP連接可以進(jìn)行復(fù)用,客戶端還可以在同一個(gè)TCP連接中同時(shí)發(fā)送多個(gè)請(qǐng)求,如圖2.16所示。2.2.2

版本類型2.2了解HTTP4.HTTP/2.0HTTP/2.0很好地解決了請(qǐng)求到達(dá)服務(wù)器端發(fā)生阻塞,服務(wù)器端只能依次處理單個(gè)請(qǐng)求這個(gè)問(wèn)題,它支持服務(wù)器端多個(gè)進(jìn)程同時(shí)處理,從請(qǐng)求到響應(yīng)形成了一個(gè)順暢的閉路,如圖2.18所示。HTTP/2.0還提供服務(wù)器推送。2.2.2

版本類型2.2了解HTTP在互聯(lián)網(wǎng)中,每個(gè)資源都由一個(gè)URI進(jìn)行標(biāo)識(shí),用來(lái)區(qū)分不同。URI包含了URL與URN。URL用于資源定位,也就是人們常說(shuō)的網(wǎng)頁(yè)地址。統(tǒng)一資源名稱(UniformResourceName,URN)用于標(biāo)記資源名稱,每一項(xiàng)資源都有其特定的URN,如圖2.19所示。2.2.3

URI2.2了解HTTPURL并不是單個(gè)的個(gè)體,而是由多個(gè)必要或可選的部分組成的。URL以字符串的形式來(lái)描述內(nèi)容,一個(gè)URL資源對(duì)應(yīng)一個(gè)Web資源,如圖2.20所示。2.2.4

URL語(yǔ)法2.2了解HTTP協(xié)議是指用戶告訴瀏覽器使用何種協(xié)議,大部分網(wǎng)站都是使用HTTP或者它的安全版協(xié)議(HTTPS)。一些常見(jiàn)的協(xié)議,如表2.8所示。2.2.4

URL語(yǔ)法用圖2.21所示的URL來(lái)詳細(xì)解析它的組成部分。2.2了解HTTP通常端口是指設(shè)備與外界通信的接口,這里的端口是指虛擬端口,如圖2.24所示。2.2.4

URL語(yǔ)法域名在URL中也被稱為主機(jī)名,如圖2.23所示。2.2了解HTTP不同協(xié)議對(duì)應(yīng)著不同端口,常見(jiàn)的端口號(hào)如表2.9所示。2.2.4

URL語(yǔ)法2.2了解HTTP在服務(wù)器端查詢信息時(shí),服務(wù)器端會(huì)根據(jù)用戶提供的信息進(jìn)行查詢,而用戶提供的信息將會(huì)以鍵值對(duì)的形式顯示到URL中,用戶所提供的信息就叫作用戶查詢參數(shù),如圖2.26所示。2.2.4

URL語(yǔ)法URL中顯示的路徑其實(shí)是虛構(gòu)的,它不是服務(wù)器中的真實(shí)路徑,而是象征性地顯示一個(gè)路徑,但路徑是真實(shí)存在的,如圖2.25所示。2.2了解HTTPURL中,“#”號(hào)之后的內(nèi)容叫作片段標(biāo)識(shí)符,字面上理解就是某些內(nèi)容的其中一段。用戶在網(wǎng)頁(yè)中單擊某一個(gè)標(biāo)題之后會(huì)顯示相關(guān)內(nèi)容,其實(shí)這也就是網(wǎng)站內(nèi)容的某一段,也叫作錨點(diǎn)。這個(gè)技術(shù)在前端HTML中也被稱作超鏈接,相當(dāng)于一個(gè)目錄。。片段標(biāo)識(shí)符不會(huì)與請(qǐng)求一起發(fā)送到服務(wù)器端,如圖2.27所示。2.2.4

URL語(yǔ)法2.3HTTP詳解HTTP是一種用戶服務(wù)協(xié)議,由一個(gè)用戶代理向服務(wù)器端發(fā)送請(qǐng)求。HTTP流程如圖2.28所示。2.3.1

HTTP系統(tǒng)組成在HTTP另一端的是Web服務(wù)器端,由它來(lái)提供客戶端所請(qǐng)求的資源。2.3HTTP詳解2.3.2

HTTP請(qǐng)求方式常見(jiàn)的HTTP請(qǐng)求方式如表2.10所示。2.3HTTP詳解1.GETGET是HTTP中最常用的請(qǐng)求方式之一,它代表獲取、取得。當(dāng)客戶端向服務(wù)器端“要”資源的時(shí)候,請(qǐng)求方式為GET,如圖2.30所示。2.3.2

HTTP請(qǐng)求方式2.POSTPOST是一種將數(shù)據(jù)交給服務(wù)器端去處理的HTTP請(qǐng)求方式??蛻舳藢⒄?qǐng)求與數(shù)據(jù)一起發(fā)送到服務(wù)器端,服務(wù)器端將處理結(jié)果返回給客戶端,如圖2.31所示。2.3HTTP詳解3.DELETEDELETE是刪除指定內(nèi)容的請(qǐng)求,也像POST一樣將請(qǐng)求發(fā)送到服務(wù)器端,只不過(guò)DELETE不會(huì)發(fā)送數(shù)據(jù),服務(wù)器端處理之后也會(huì)將處理結(jié)果返回給客戶端。4.PUTPUT是以指定數(shù)據(jù)替換指定內(nèi)容的請(qǐng)求方式。它也是將請(qǐng)求與要替換的數(shù)據(jù)一同發(fā)送到服務(wù)器端,服務(wù)器端處理好之后再將處理結(jié)果返回給客戶端。2.3.2

HTTP請(qǐng)求方式2.3HTTP詳解1.請(qǐng)求報(bào)文請(qǐng)求報(bào)文是客戶端發(fā)送給服務(wù)器端的報(bào)文,它的內(nèi)容由4部分組成,分別是請(qǐng)求行、請(qǐng)求頭部、空行、請(qǐng)求數(shù)據(jù),如圖2.32所示。請(qǐng)求行又分為三部分,分別是請(qǐng)求方式、URL、協(xié)議版本。請(qǐng)求方式是客戶端需要服務(wù)器端做的行為描述。URL是客戶端指定的網(wǎng)址。協(xié)議版本是瀏覽器所支持的HTTP版本。2.3.3

報(bào)文2.3HTTP詳解2.響應(yīng)報(bào)文響應(yīng)報(bào)文是在服務(wù)器端處理完請(qǐng)求報(bào)文之后,返回給客戶端的報(bào)文,如圖2.33所示。響應(yīng)報(bào)文由三部分組成,分別是狀態(tài)行、響應(yīng)頭部、響應(yīng)正文。行又分為三部分,分別是協(xié)議版本、狀態(tài)碼、狀態(tài)碼描述。2.3.3

報(bào)文2.3HTTP詳解1.Linux報(bào)頭在Linux操作系統(tǒng)中通過(guò)wget下載資源,分析報(bào)文頭部的信息。2.3.4

報(bào)頭分析2.3HTTP詳解在終端上就能看到HTTP請(qǐng)求的全部過(guò)程部的信息。2.3.4

報(bào)頭分析2.3HTTP詳解對(duì)參數(shù)做詳細(xì)解釋。Accept表示可以接收的文件類型,“*/*”表示可以接收任何格式類型的文件。Server表示服務(wù)器的信息。Date表示響應(yīng)的時(shí)間。Content-Type表示響應(yīng)的數(shù)據(jù)類型,這里是application/octet-stream。Content-Length表示源碼包的大小,它的單位是字節(jié)(Byte)。Last-Modified表示資源在服務(wù)器端最后被修改的時(shí)間。Connection表示連接類型。Keep-Alive表示連接有效期。ETag是HTTP響應(yīng)頭部中資源的特定版本的標(biāo)識(shí)符,可以讓資源緩存到客戶端。

Accept-Ranges是響應(yīng)頭部中服務(wù)器端用來(lái)表明是否指定范圍請(qǐng)求的信息,范圍2.3.4

報(bào)頭分析2.3HTTP詳解2.瀏覽器報(bào)頭打開(kāi)任意網(wǎng)頁(yè),如圖2.34所示。2.3.4

報(bào)頭分析2.3HTTP詳解先從報(bào)文標(biāo)頭開(kāi)始分析,這里的標(biāo)頭就是請(qǐng)求行,如圖2.36所示。2.3.4

報(bào)頭分析分析請(qǐng)求標(biāo)頭的內(nèi)容,如圖2.37所示。2.3HTTP詳解瀏覽器中的報(bào)文內(nèi)容與Linux操作系統(tǒng)不同的部分。Accept-Encoding表示可接受的編碼類型。Accept-Language表示可接受的語(yǔ)言與國(guó)家或地區(qū)。zh-CN中zh代表簡(jiǎn)體中文,CN代表中國(guó),表示可接受簡(jiǎn)體中文。有了這條信息,文本資源才會(huì)以簡(jiǎn)體中文的形式顯示到瀏覽器中。Cache-Control表示客戶端對(duì)服務(wù)器端資源緩存的要求,這里no-cache表示不需要進(jìn)行緩存。User-Agent是客戶端的附加信息,方便服務(wù)器端獲取客戶端的設(shè)備信息。2.3.4

報(bào)頭分析2.3HTTP詳解2.3.4

報(bào)頭分析對(duì)來(lái)自服務(wù)器端的報(bào)文進(jìn)行分析,如圖2.38所示。2.3HTTP詳解來(lái)自服務(wù)器端的響應(yīng)報(bào)文也叫作響應(yīng)標(biāo)頭,它的內(nèi)容相較于請(qǐng)求標(biāo)頭更加豐富。Cache-Control這一行內(nèi)容明顯與請(qǐng)求標(biāo)頭不同,之前客戶端并沒(méi)有對(duì)資源緩存進(jìn)行要求,于是這里就將緩存時(shí)間設(shè)為服務(wù)器端默認(rèn)的時(shí)間——604800秒。Content-Encoding表示資源內(nèi)容的編碼格式信息。Content-Type說(shuō)明了資源內(nèi)容的類型是文本與層疊樣式表,text指文本,css指層疊樣式表——HTML語(yǔ)言的一個(gè)應(yīng)用。

Expires表示資源過(guò)期時(shí)間。由于Cache-Control已經(jīng)設(shè)置了時(shí)間,所以這條信息將被忽略。Transfer-Encoding表示傳輸方式,chunked表示分段傳輸。Vary標(biāo)頭中的信息用于防止錯(cuò)誤的緩存,Accept-Encoding表示緩存“壓縮與非壓縮”兩種版本的資源,也表示接受編碼格式。2.3.4

報(bào)頭分析第3章Nginx基礎(chǔ)配置配置文件編譯參數(shù)配置文件詳解虛擬主機(jī)編譯參數(shù)配置文件配置文件詳解虛擬主機(jī)了解Nginx配置文件掌握Nginx基本配置熟悉Nginx編譯參數(shù)3.1配置文件查詢并列出配置文件。3.1.1

關(guān)鍵配置文件3.1配置文件1.日志輪轉(zhuǎn)文件/etc/logrotate.d/nginx是日志輪轉(zhuǎn)文件,日志輪轉(zhuǎn)的配置都在這里。2.主配置文件主配置文件/etc/nginx/nginx.conf中,記錄著Nginx的主要信息,通常擴(kuò)展名為“.conf”的都是配置文件,而文件名與主程序名一樣的配置文件就是主配置文件。3.1.1

關(guān)鍵配置文件3.1配置文件3.子配置文件/etc/nginx/conf.d是Nginx的子配置文件夾,這里包括默認(rèn)網(wǎng)站配置文件,還有后續(xù)增加的配置文件,通常擴(kuò)展名為“.d”的目錄為子配置文件夾。4.默認(rèn)網(wǎng)站配置文件/etc/nginx/conf.d/default.conf是最基礎(chǔ)的子配置文件,是Nginx訪問(wèn)頁(yè)面的配置文件。3.1.1

關(guān)鍵配置文件3.1配置文件5.文件關(guān)聯(lián)程序/etc/nginx/mime.types是文件關(guān)聯(lián)程序。它記錄著各種文件類型所對(duì)應(yīng)的程序,也就是什么類型的文件由什么程序來(lái)打開(kāi)。6.模塊文件夾模塊文件夾用來(lái)放置Nginx模塊,由于這些模塊的種類繁多,所以系統(tǒng)為它們創(chuàng)建了一個(gè)專門(mén)的文件夾。7.服務(wù)腳本服務(wù)腳本可以簡(jiǎn)化工程師對(duì)Nginx的操作,例如,YUM安裝的Nginx不需要絕對(duì)路徑就可以執(zhí)行啟動(dòng)、關(guān)閉、重啟,這都是服務(wù)腳本的功勞。3.1.1

關(guān)鍵配置文件3.1配置文件8.主程序Nginx的主程序都寫(xiě)在了/usr/sbin/nginx,不可隨意更改。9.文檔Nginx文檔都會(huì)在/usr/share/doc/nginx-1.16.1/中出現(xiàn)。其中,/usr/share/doc/nginx-1.16.1/COPYRIGHT是Nginx開(kāi)發(fā)者的聲明文檔。10.man手冊(cè)man手冊(cè)是指軟件的說(shuō)明書(shū),在使用之前都會(huì)先查看man手冊(cè)3.1.1

關(guān)鍵配置文件3.1配置文件11.默認(rèn)頁(yè)面文件默認(rèn)頁(yè)面文件在/usr/share/nginx/html中,這里通常默認(rèn)有兩個(gè)文件;/usr/share/nginx/html/index.html是默認(rèn)主頁(yè)的文件,/usr/share/nginx/html/50x.html是默認(rèn)錯(cuò)誤頁(yè)面文件。12.緩存文件緩存文件/var/cache/nginx/用于存放緩存。13.日志文件夾日志文件夾中存放著各種類型的日志。3.1.1

關(guān)鍵配置文件3.1配置文件其他配置文件對(duì)運(yùn)維工程師來(lái)說(shuō)很少會(huì)接觸到,在這里簡(jiǎn)單了解一下這些文件,/etc/nginx/fastcgi_params#動(dòng)態(tài)網(wǎng)站模塊文件/etc/nginx/koi-utf#字符集,文件編碼/usr/lib/systemd/system/nginx-debug.service#調(diào)試程序啟動(dòng)腳本/etc/sysconfig/nginx#系統(tǒng)守護(hù)進(jìn)程配置/etc/sysconfig/nginx-debug#管理器配置/usr/lib64/nginx#模塊目錄/usr/lib64/nginx/modules/usr/sbin/nginx-debug#調(diào)試程序3.1.2

其他配置文件3.1配置文件1.動(dòng)態(tài)網(wǎng)站模塊文件Nginx使用中間件(如Java、PHP等)去調(diào)用數(shù)據(jù),動(dòng)態(tài)網(wǎng)站模塊文件成為Nginx與中間件對(duì)接的接口,如圖3.1所示。3.1.2

其他配置文件3.1配置文件2.字符集字符集用來(lái)翻譯高級(jí)編程語(yǔ)言。/usr/lib/systemd/system/nginx-debug.service、/etc/sysconfig/nginx、/etc/sysconfig/nginx-debug都屬于系統(tǒng)守護(hù)進(jìn)程和管理器的相關(guān)配置,/usr/lib64/nginx是Nginx的模塊目錄,/usr/sbin/nginx-debug是Nginx調(diào)試程序,用來(lái)調(diào)試終端命令。3.1.2

其他配置文件3.2編譯參數(shù)使用命令查看Nginx所有參數(shù)[root@nginx~]#nginx-V3.2.1

基礎(chǔ)參數(shù)3.2編譯參數(shù)1.錯(cuò)誤日志錯(cuò)誤日志是記錄客戶端訪問(wèn)出錯(cuò)的日志文件。3.2.1

基礎(chǔ)參數(shù)2.程序ID程序ID,也叫pid,用來(lái)標(biāo)記程序的序號(hào),表明程序的身份,有了這個(gè)序號(hào)就可以防止同一個(gè)程序再次啟動(dòng)。執(zhí)行之后會(huì)看到一個(gè)數(shù)字,這個(gè)數(shù)字就是pid,如圖3.4所示3.2編譯參數(shù)3.網(wǎng)站客戶端臨時(shí)緩存用戶在一段時(shí)間內(nèi)訪問(wèn)過(guò)的資源都會(huì)被暫時(shí)存放到網(wǎng)站客戶端臨時(shí)緩存文件,當(dāng)用戶再次訪問(wèn)時(shí),方便調(diào)取。。http-proxy-temp-path是Nginx作為代理服務(wù)器時(shí)的緩存。http-fastcgi-temp-path、http-uwsgi-temp-path以及http-scgi-temp-path都是網(wǎng)站中間件緩存。3.2.1

基礎(chǔ)參數(shù)3.2編譯參數(shù)3.2.2

模塊參數(shù)Nginx的模塊編譯參數(shù)3.2編譯參數(shù)1.動(dòng)態(tài)兼容模塊動(dòng)態(tài)兼容模塊用于處理動(dòng)態(tài)的請(qǐng)求。2.a(chǎn)io模塊aio(file-aio)模塊就是I/O多路復(fù)用模塊,用于加速系統(tǒng)處理。3.多線程模塊多線程模塊(threads)支持Nginx開(kāi)啟多個(gè)線程,但軟件最終還是基于硬件。4.追加模塊追加模塊(addition_module)可以在網(wǎng)頁(yè)中追加內(nèi)容。5.認(rèn)證模塊認(rèn)證模塊(auth_request_module)用于認(rèn)證用戶信息。3.2.1

基礎(chǔ)參數(shù)3.2編譯參數(shù)當(dāng)Nginx服務(wù)器端處理請(qǐng)求時(shí),會(huì)在內(nèi)部生成一個(gè)子請(qǐng)求,這個(gè)子請(qǐng)求是屬于Nginx服務(wù)器端內(nèi)部的,與客戶端沒(méi)有關(guān)系。,如圖3.6所示3.2.1

基礎(chǔ)參數(shù)3.2編譯參數(shù)6.上傳下載模塊上傳下載模塊(dav_module)可供用戶在網(wǎng)站中上傳或下載資源。7.視頻模塊視頻模塊(flv_module)用于支持視頻資源的播放。8.解壓與壓縮模塊解壓縮模塊(gunzip_module)與壓縮模塊(gzip_static_module)用于解壓縮和壓縮文件。3.2.1

基礎(chǔ)參數(shù)3.2編譯參數(shù)9.多媒體模塊多媒體模塊(mp4_module)用于支持多媒體文件在網(wǎng)站中的正常運(yùn)行。10.隨機(jī)主頁(yè)模塊當(dāng)用戶登錄網(wǎng)站時(shí),隨機(jī)主頁(yè)模塊(random_index_module)將網(wǎng)頁(yè)文件夾中的網(wǎng)頁(yè)文件隨機(jī)打開(kāi)一個(gè)呈現(xiàn)給用戶。3.2.1

基礎(chǔ)參數(shù)3.2編譯參數(shù)11.獲取真實(shí)IP模塊獲取真實(shí)IP模塊開(kāi)啟之后,就會(huì)告訴Nginx哪個(gè)是反向代理的IP地址,當(dāng)Nginx獲取IP地址找到反向代理的IP地址時(shí),就會(huì)自動(dòng)忽略,接著去找用戶真實(shí)的IP地址,如圖3.7所示。3.2.1

基礎(chǔ)參數(shù)3.2編譯參數(shù)12.安全下載模塊在Nginx下載資源之前,它的安全下載模塊(secure_link_module)會(huì)對(duì)資源鏈接進(jìn)行檢查,檢查鏈接是否安全,是否過(guò)期。如圖3.8所示。3.2.1

基礎(chǔ)參數(shù)3.2編譯參數(shù)13.分片緩存模塊當(dāng)Nginx需要緩存較大的文件而難以處理時(shí),就通過(guò)分片緩存模塊(slice_module)將需要緩存的文件拆分成多個(gè)部分,再進(jìn)行緩存。14.安全模塊安全模塊(ssl_module)是維護(hù)Nginx信息安全的模塊,通過(guò)加密、解密(ssl)的手段對(duì)HTTPS進(jìn)行支持。15.訪問(wèn)狀態(tài)模塊訪問(wèn)狀態(tài)模塊(stub_status_module)為用戶的訪問(wèn)情況做一個(gè)統(tǒng)計(jì),如活躍的鏈接數(shù)、已接受的客戶端鏈接數(shù)、已處理的鏈接總數(shù)等。3.2.1

基礎(chǔ)參數(shù)3.2編譯參數(shù)16.網(wǎng)頁(yè)替換模塊當(dāng)網(wǎng)頁(yè)內(nèi)容需要進(jìn)行修改時(shí),可以通過(guò)網(wǎng)頁(yè)替換模塊(sub_module)進(jìn)行修改。17.HTTP/2.0模塊HTTP/2.0模塊(v2_module)是HTTP的2.0版本,默認(rèn)是關(guān)閉狀態(tài)。18.郵箱模塊通過(guò)開(kāi)啟郵箱模塊(mail),Nginx服務(wù)器就可以成為一臺(tái)郵箱服務(wù)。19.?dāng)?shù)據(jù)流模塊數(shù)據(jù)流模塊可以實(shí)現(xiàn)4層協(xié)議的流量轉(zhuǎn)發(fā)、反向代理、負(fù)載均衡等。3.2.1

基礎(chǔ)參數(shù)3.3

配置文件詳解對(duì)Nginx的主配置文件進(jìn)行詳解。主配置文件分為三個(gè)模塊:核心模塊(CoreModule)、事件驅(qū)動(dòng)模塊(EventsModule)、HTTP內(nèi)核模塊(HttpCoreModule)。1.核心模塊。user nginx;#運(yùn)行Nginx的用戶worker_processes 1;#啟動(dòng)的進(jìn)程數(shù)error_log /var/log/nginx/error.logwarn;#錯(cuò)誤日志存放位置的通知pid /var/run/nginx.pid;#pid存放位置3.3.1

主配置文件3.3

配置文件詳解2.事件驅(qū)動(dòng)模塊events{#事件worker_connections 1024;#每個(gè)進(jìn)程允許的最大連接數(shù)accept_mutexon;#防止浪費(fèi)進(jìn)程資源multi_acceptoff;#一個(gè)進(jìn)程連接能否有多個(gè)網(wǎng)絡(luò)連接client_header_buffer_size4k;#請(qǐng)求頭部大小open_file_cachemax=2000inactive=60s;#最大緩存數(shù)和最長(zhǎng)緩存時(shí)長(zhǎng)open_file_cache_valid60s;#檢查緩存時(shí)間open_file_cache_min_uses1#緩存最少使用次數(shù)}3.3.1

主配置文件3.3

配置文件詳解1.a(chǎn)ccept_mutex當(dāng)有請(qǐng)求進(jìn)入服務(wù)器端時(shí),accept_mutex會(huì)防止所有休眠中的進(jìn)程被喚醒。2.multi_accept通過(guò)multi_accept設(shè)置一個(gè)進(jìn)程是否可以同時(shí)接收多個(gè)網(wǎng)絡(luò)連接,通常默認(rèn)為關(guān)閉。3.client_header_buffer_sizeclient_header_buffer_size用來(lái)設(shè)置服務(wù)器端要求的請(qǐng)求頭部大小。4.open_file_cacheopen_file_cache是關(guān)于緩存的配置,其中max表示最大緩存數(shù),inactive表示多長(zhǎng)時(shí)間內(nèi)資源沒(méi)有被調(diào)用將被刪除。valid表示多長(zhǎng)時(shí)間檢查一次緩存。3.3.1

主配置文件3.3

配置文件詳解內(nèi)核模塊http{include/etc/nginx/mime.types;#包含文件關(guān)聯(lián)程序default_type application/octet-stream;#默認(rèn)處理信息方式,字節(jié)流log_format main '$remote_addr-$remote_user[$time_local]"$request"''$status$body_bytes_sent"$http_referer"''"$http_user_agent""$http_x_forwarded_for"';#日志格式access_log /var/log/nginx/access.log main;#成功訪問(wèn)日志sendfileon;#優(yōu)化參數(shù),高效傳輸文件模式#tcp_nopushon;#優(yōu)化參數(shù),避免網(wǎng)絡(luò)阻塞keepalive_timeout65;#優(yōu)化參數(shù),長(zhǎng)連接#gzipon;#解壓參數(shù)include/etc/nginx/conf.d/*.conf;#包含子配置的文件夾}3.3.1

主配置文件3.3

配置文件詳解5.includeinclude表示包含的意思,后面是一個(gè)文件路徑,代表在這里包含了這個(gè)文件的內(nèi)容。6.default_typedefault_type表示默認(rèn)的處理信息方式,通常默認(rèn)方式是字節(jié)流。7.log_formatmainlog_format是日志格式,也就是Nginx寫(xiě)日志的格式,也可以進(jìn)行合理修改。8.a(chǎn)ccess_logaccess_log是指成功訪問(wèn)的日志,后面是存放它的路徑。3.3.1

主配置文件3.3

配置文件詳解3.3.2

默認(rèn)配置文件觀察Nginx的默認(rèn)虛擬主機(jī)配置文件3.3

配置文件詳解1.listenlisten表示監(jiān)聽(tīng),通常后面是端口號(hào),代表服務(wù)運(yùn)行的端口。2.server_nameserver_name表示服務(wù)名,也叫主機(jī)名,其實(shí)是指網(wǎng)站域名。location{}中的內(nèi)容是Nginx作為Web服務(wù)器的網(wǎng)頁(yè)文件信息。3.rootroot在系統(tǒng)中是超級(jí)用戶的意思,在這里表示網(wǎng)站網(wǎng)頁(yè)主目錄。4.indexindex在這里表示默認(rèn)頁(yè)面,后面是存放默認(rèn)頁(yè)面的路徑。3.3.2

默認(rèn)配置文件3.3

配置文件詳解這些內(nèi)容定位了主頁(yè)目錄與網(wǎng)頁(yè)文件,保存退出之后需要去創(chuàng)建這些文件與目錄。3.3.3

修改配置文件創(chuàng)建成功之后,在網(wǎng)頁(yè)文件中追加一些簡(jiǎn)單的內(nèi)容,這就是網(wǎng)頁(yè)要顯示的內(nèi)容。3.3

配置文件詳解本地解析,在文件中添加服務(wù)器的IP地址與配置文件中的主機(jī)名,如圖3.13所示。3.3.3

修改配置文件3.3

配置文件詳解添加字符集。3.3.3

修改配置文件修改之后,接著訪問(wèn)服務(wù)器主機(jī),訪問(wèn)結(jié)果如圖3.15所示。3.4虛擬主機(jī)首先使用端口區(qū)分。創(chuàng)建網(wǎng)頁(yè)配置文件。3.4.1

基于端口在文件中添加相關(guān)配置。3.4虛擬主機(jī)重啟Nginx服務(wù),使配置生效3.4.1

基于端口添加放置網(wǎng)站內(nèi)容的文件夾添加第一個(gè)網(wǎng)頁(yè)文件,這里的文件名與目錄名必須按照配置文件中的內(nèi)容創(chuàng)建。3.4虛擬主機(jī)將第一個(gè)網(wǎng)頁(yè)文件備份到同一文件夾下,作為第二個(gè)網(wǎng)頁(yè)文件。3.4.1

基于端口index2.html文件中的內(nèi)容進(jìn)行修改,這樣便于區(qū)分。3.4虛擬主機(jī)使用IP地址加端口訪問(wèn)服務(wù)器的8080端口,如圖3.16所示。3.4.1

基于端口訪問(wèn)服務(wù)器的8081端口,如圖3.17所示。3.4虛擬主機(jī)進(jìn)入網(wǎng)卡配置文件所在的目錄將網(wǎng)卡配置文件進(jìn)行備份。打開(kāi)備份后的文件,將文件中的設(shè)備選項(xiàng)(DEVICE)改為當(dāng)前文件名。3.4.2

基于IP3.4虛擬主機(jī)網(wǎng)卡配置已經(jīng)完成,將網(wǎng)絡(luò)重啟,使配置生效。查看IP地址,驗(yàn)證是否成功。3.4.2

基于IP3.4虛擬主機(jī)3.4.2

基于IP通過(guò)主機(jī)配置文件進(jìn)行配置。3.4虛擬主機(jī)3.4.2

基于IP網(wǎng)頁(yè)文件創(chuàng)建成功之后,開(kāi)始訪問(wèn)第一個(gè)IP地址,結(jié)果如圖3.18所示。第一個(gè)網(wǎng)站訪問(wèn)成功之后,接著訪問(wèn)第二個(gè)IP地址,訪問(wèn)結(jié)果如圖3.19所示。3.4虛擬主機(jī)當(dāng)主配置文件需要調(diào)用某一子配置文件時(shí),就通過(guò)在主配置文件中寫(xiě)入命令與需要調(diào)用的子配置文件路徑來(lái)進(jìn)行調(diào)用。

在Nginx中,主配置文件與頁(yè)面配置文件是分開(kāi)寫(xiě)的,但在HTTP內(nèi)核模塊中,使用包含命令引入頁(yè)面配置文件。3.4.3

引入子配置文件3.4虛擬主機(jī)進(jìn)行實(shí)驗(yàn)操作。先創(chuàng)建放置自定義子配置文件的目錄。

3.4.3

引入子配置文件創(chuàng)建自定義子配置文件并添加內(nèi)容。 3.4虛擬主機(jī)3.4.3

引入子配置文件創(chuàng)建網(wǎng)頁(yè)目錄與文件,并添加自定義內(nèi)容。 修改主配置文件。 3.4虛擬主機(jī)3.4.3

引入子配置文件在主配置文件中將默認(rèn)網(wǎng)頁(yè)配置一行注釋。修改并重啟服務(wù)之后,再次對(duì)服務(wù)器IP地址進(jìn)行訪問(wèn),訪問(wèn)結(jié)果如圖3.20所示。第4章Nginx日志日志配置日志輪轉(zhuǎn)與切割日志分析日志輪轉(zhuǎn)與切割日志配置日志分析了解訪問(wèn)日志與錯(cuò)誤日志掌握統(tǒng)計(jì)日志方式熟悉日志輪轉(zhuǎn)與切割4.1日志配置日志模塊會(huì)在客戶端訪問(wèn)服務(wù)器端時(shí),從Web服務(wù)中讀取數(shù)據(jù),再將讀取到的數(shù)據(jù)寫(xiě)入日志文件,如圖4.1所示。4.1日志配置訪問(wèn)日志語(yǔ)法:查看Nginx日志配置:4.1.1格式與命令4.1日志配置4.1.1格式與命令1.$remote_addr客戶端的IP地址。2.$remote_user客戶端的用戶名。3.[$time_local]服務(wù)器時(shí)間。4.$request請(qǐng)求。5.$status表示請(qǐng)求結(jié)果,即狀態(tài)碼。4.1日志配置4.1.1格式與命令6.$body_bytes_sent服務(wù)器端發(fā)送給客戶端內(nèi)容的字節(jié)數(shù)。7.$http_referer引用。8.$http_user_agent表示客戶端信息。9.$http_x_forwarded_for表示代理IP地址。4.1日志配置4.1.2訪問(wèn)日志與錯(cuò)誤日志1.訪問(wèn)日志4.1日志配置4.1.2訪問(wèn)日志與錯(cuò)誤日志將該日志拆分為多個(gè)片段進(jìn)行講解。05是遠(yuǎn)程客戶端的IP地址。此處的用戶由占位符表示。[17/Dec/2017:14:45:59+0800]表示服務(wù)器系統(tǒng)時(shí)間。GET是客戶端的請(qǐng)求方式。/nginx-logo.png表示客戶端所請(qǐng)求的文件,此處為圖片文件。HTTP/1.1為HTTP版本。200表示狀態(tài)碼。368表示文件大小。0/表示引用的鏈接。Mozilla/5.0(WindowsNT6.1;WOW64;rv:57.0)Gecko/20100101Firefox/57.0表示客戶端信息,如瀏覽器版本、瀏覽器名稱等。末尾的占位符表示代理IP地址,此處沒(méi)有代理服務(wù)器,所以由占位符表示。4.1日志配置4.1.2訪問(wèn)日志與錯(cuò)誤日志2.錯(cuò)誤日志演示將404界面?zhèn)€性化的操作。在Nginx主頁(yè)配置文件中添加相關(guān)配置。4.1日志配置4.1.2訪問(wèn)日志與錯(cuò)誤日志按照主頁(yè)配置文件中的內(nèi)容,創(chuàng)建對(duì)應(yīng)的目錄與文件。需要添加的圖片上傳至服務(wù)器/qianfeng目錄下,并授予圖片相關(guān)權(quán)限。4.2日志輪轉(zhuǎn)與切割日志輪轉(zhuǎn)規(guī)則文件。4.2日志輪轉(zhuǎn)與切割/var/log/nginx/*.log表示日志輪轉(zhuǎn)對(duì)象。daily表示日志輪轉(zhuǎn)周期,即一天輪轉(zhuǎn)一次,可根據(jù)日志大小配置。missingok表示丟失不提示。rotate52表示保留份數(shù),此處為52份,超過(guò)52份將進(jìn)行輪轉(zhuǎn)。compress表示需要對(duì)日志進(jìn)行壓縮。Delaycompress表示延遲壓縮,為節(jié)省CPU,可以在日志積累到一定量時(shí),再進(jìn)行壓縮。4.2日志輪轉(zhuǎn)與切割Notifempty表示空文件不輪轉(zhuǎn),即在日志文件中沒(méi)有內(nèi)容時(shí),不進(jìn)行輪轉(zhuǎn)。create640nginxadm表示創(chuàng)建新日志文件,授予其640權(quán)限,并將屬主設(shè)為nginx,屬組設(shè)為adm。sharedscripts表示所有文件歸檔完成后執(zhí)行腳本。postrotate表示日志切割后執(zhí)行的命令。endscript表示腳本終止。4.2日志輪轉(zhuǎn)與切割日志輪轉(zhuǎn)過(guò)程。第一步,對(duì)舊日志文件的文件名稱進(jìn)行修改。第二步,向Nginx主進(jìn)程發(fā)送USR1信號(hào),Nginx收到信號(hào)后將會(huì)創(chuàng)建新日志文件,并以Nginx進(jìn)程的屬主作為新日志文件的屬主。此時(shí)Nginx將會(huì)把日志寫(xiě)入新日志文件,并可以對(duì)舊日志文件進(jìn)行切割。4.2日志輪轉(zhuǎn)與切割Nginx日志文件還可以進(jìn)行手動(dòng)輪轉(zhuǎn),查看/var/log/nginx/下的文件。4.3日志分析PV是指在特定時(shí)間內(nèi)服務(wù)器端被訪問(wèn)的總次數(shù),UV是指在特定時(shí)間內(nèi)訪問(wèn)服務(wù)器端用戶的數(shù)量。日志分析的本質(zhì)是對(duì)服務(wù)器端的訪問(wèn)量進(jìn)行多角度的統(tǒng)計(jì),如PV、UV等。1.統(tǒng)計(jì)PV量2.統(tǒng)計(jì)UV量4.3日志分析3.統(tǒng)計(jì)多次訪問(wèn)的用戶IP地址4.統(tǒng)計(jì)訪問(wèn)最多的頁(yè)面4.3日志分析5.統(tǒng)計(jì)訪問(wèn)內(nèi)容大小6.統(tǒng)計(jì)狀態(tài)碼第5章Web模塊隨機(jī)主頁(yè)模塊替換模塊文件讀取模塊文件壓縮模塊緩存模塊防盜鏈模塊連接狀態(tài)模塊替換模塊隨機(jī)主頁(yè)模塊文件讀取模塊緩存模塊文件壓縮模塊防盜鏈模塊連接狀態(tài)模塊熟悉

連接狀態(tài)的查詢方式掌握Web模塊的使用方式了解

Web模塊的工作原理5.1隨即主頁(yè)模塊演示隨機(jī)主頁(yè)的配置方式。創(chuàng)建一個(gè)放置主頁(yè)面文件的目錄.再創(chuàng)建多個(gè)主頁(yè)面文件。在d.html文件之前添加了一個(gè)“.”,表示這是一個(gè)隱藏文件,通常不會(huì)顯示出來(lái)。由于d.html是隱藏文件,當(dāng)查看文件時(shí)需要添加-a參數(shù)。5.1隨即主頁(yè)模塊在不同文件中添加不同的內(nèi)容5.1隨即主頁(yè)模塊當(dāng)配置d.html文件時(shí),必須在文件名稱前添加“.”,否則默認(rèn)為創(chuàng)建新文件。5.1隨即主頁(yè)模塊主頁(yè)文件都配置完成之后,開(kāi)始修改配置文件.5.1隨即主頁(yè)模塊重啟Nginx服務(wù)之后,通過(guò)瀏覽器訪問(wèn)服務(wù)器IP地址址,如圖5.2、圖5.3、圖5.4所示。5.2替換模塊在主頁(yè)配置文件中添加替換模塊配置。5.2替換模塊配置完成之后,訪問(wèn)服務(wù)器IP地址,如圖5.7所示。5.2替換模塊將配置文件中單次替換的配置關(guān)閉,即可進(jìn)行全局替換。5.3文件讀取模塊sendfile表示文件發(fā)送,是用于管理文件發(fā)送的模塊。sendfile的具體語(yǔ)法。5.3.1sendfile5.3文件讀取模塊相較于傳統(tǒng)的文件發(fā)送方式,sendfile為Nginx在發(fā)送文件時(shí)節(jié)省了時(shí)間,提高了文件發(fā)送的效率,如圖5.10所示。5.3.1sendfile5.3文件讀取模塊tcp_nopush是負(fù)責(zé)管理流量發(fā)送的模塊。tcp_nopush的具體語(yǔ)法。5.3.2

tcp_nopush5.3文件讀取模塊tcp_nopush類似于連接中的一個(gè)開(kāi)關(guān),當(dāng)流量積攢到一定量時(shí),開(kāi)關(guān)打開(kāi)發(fā)送流量,當(dāng)一個(gè)數(shù)據(jù)包發(fā)送完成之后又關(guān)閉開(kāi)關(guān),如圖5.12所示。5.3.2

tcp_nopush5.3文件讀取模塊tcp_nodelay同樣是負(fù)責(zé)管理流量發(fā)送的模塊,但與tcp_nopush不同,tcp_nodelay允許Nginx即時(shí)發(fā)送數(shù)據(jù)。tcp_nodelay的具體語(yǔ)法。5.3.3

tcp_nodelay5.3文件讀取模塊tcp_nodelay只有在TCP連接轉(zhuǎn)變?yōu)殚L(zhǎng)連接時(shí)才會(huì)被啟用,并且會(huì)禁用Nagle算法,也就是將數(shù)據(jù)包立即發(fā)送出去,如圖5.13所示。5.3.3

tcp_nodelay5.3文件讀取模塊查看Nginx主配置文件中關(guān)于文件讀取模塊的配置。5.3.3

tcp_nodelay文件讀取模塊中有sendfile和tcp_nopush,但由于不確定用戶的業(yè)務(wù)情況,所以tcp_nopush的配置前有一個(gè)注釋符,當(dāng)用戶需要時(shí)刪除注釋符即可。而Nginx主配置文件中沒(méi)有關(guān)于tcp_nodelay的配置,說(shuō)明它默認(rèn)是關(guān)閉的,當(dāng)用戶需要時(shí)在文件中添加“tcp_nodelayon”即可。5.4文件壓縮模塊文件壓縮是計(jì)算機(jī)中常用的功能,它將多個(gè)文件或多個(gè)目錄整合,最終生成一個(gè)小的壓縮包文件。將壓縮包文件傳輸給其他用戶,其他用戶收到壓縮包文件后,再將文件解壓縮,使文件恢復(fù)到原來(lái)的體積。5.4.1

原理與語(yǔ)法5.4文件壓縮模塊文件壓縮模塊的語(yǔ)法分為三種:開(kāi)啟或關(guān)閉、壓縮比例、模塊版本。1.開(kāi)啟或關(guān)閉5.4.1

原理與語(yǔ)法2.壓縮比例3.模塊版本5.4文件壓縮模塊通過(guò)在頁(yè)面中GET文件的方式,驗(yàn)證壓縮模塊的應(yīng)用效果。首先準(zhǔn)備一臺(tái)服務(wù)器,在主頁(yè)面文件所在目錄下分別上傳圖片、壓縮包及文本文件。5.4.2

示例與驗(yàn)證5.4文件壓縮模塊在URL后添加文件路徑即可訪問(wèn)文件,如圖5.15所示。5.4.2

示例與驗(yàn)證此處訪問(wèn)的是文本文件,在開(kāi)發(fā)者模式界面中選擇“網(wǎng)絡(luò)”,將會(huì)看到該文件傳輸時(shí)的體積,如圖5.16所示。5.4文件壓縮模塊訪問(wèn)圖片文件,如圖5.17所示。5.4.2

示例與驗(yàn)證訪問(wèn)壓縮包文件,如圖5.18所示。5.4文件壓縮模塊修改Nginx主配置文件,為Nginx添加文件壓縮模塊。5.4.2

示例與驗(yàn)證5.4文件壓縮模塊配置完成后,重啟Nginx服務(wù),訪問(wèn)文本文件,如圖5.19所示5.4.2

示例與驗(yàn)證訪問(wèn)圖片文件,如圖5.20所示。5.5緩存模塊緩存是指不將數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中,而直接存儲(chǔ)到Web服務(wù)器的內(nèi)存中,方便服務(wù)器隨時(shí)調(diào)用數(shù)據(jù)。下面通過(guò)瀏覽器訪問(wèn)任意網(wǎng)站,如圖5.21所示。5.5緩存模塊下面將取消選擇瀏覽器中“禁用緩存”,也就是開(kāi)啟緩存,并再次訪問(wèn)該網(wǎng)站,如圖5.22所示。5.5緩存模塊在第二次訪問(wèn)時(shí),客戶端并不是沒(méi)有向服務(wù)器端發(fā)送請(qǐng)求,而是發(fā)送了一個(gè)校對(duì)Etag標(biāo)簽的請(qǐng)求,如圖5.23所示。5.5緩存模塊在HTTP頭部中有一項(xiàng)expires值,用于控制緩存存在的時(shí)間。expires可以控制頁(yè)面緩存,合理配置expires可以減少來(lái)自客戶端的請(qǐng)求,從而減小服務(wù)器端的壓力。epoch用于指定expires為1January,1970,00:00:01GMT;max用于指定expires為10年;?1用于指定expires的值為當(dāng)前服務(wù)器時(shí)間?1s,即永遠(yuǎn)過(guò)期;off表示不修改expires和Cache-Control的值。5.5緩存模塊為Nginx配置緩存模塊,在頁(yè)面配置文件中添加相關(guān)內(nèi)容。重啟Nginx服務(wù)之后,訪問(wèn)兩次網(wǎng)站主頁(yè),如圖5.24所示。5.6防盜鏈模塊在Nginx中,使用防盜鏈模塊可以防止盜鏈行為的發(fā)生。valid_referersnone表示沒(méi)有人可以引用,意為開(kāi)啟防盜鏈;server_names表示可以引用的白名單;

Nginx默認(rèn)沒(méi)有配置防盜鏈,需要用戶手動(dòng)配置。5.6防盜鏈模塊通過(guò)示例演示防盜鏈的啟用方式。1.創(chuàng)建

網(wǎng)站主頁(yè)配置文件創(chuàng)建完成之后,開(kāi)始創(chuàng)建頁(yè)面文件。將圖片上傳至/fd目錄下并授予其相應(yīng)的權(quán)限。5.6防盜鏈模塊2.創(chuàng)建

網(wǎng)站主頁(yè)配置文件創(chuàng)建完成之后,開(kāi)始創(chuàng)建頁(yè)面文件。5.6防盜鏈模塊3.訪問(wèn)網(wǎng)站進(jìn)行域名解析,如圖5.25所示。5.6防盜鏈模塊解析完成之后,分別訪問(wèn)兩個(gè)網(wǎng)站,如圖5.26、圖5.27所示。5.6防盜鏈模塊4.查看日志網(wǎng)站的訪問(wèn)日志很正常,沒(méi)有特殊變化。網(wǎng)站的訪問(wèn)日志中比網(wǎng)站增加了引用的URL,這個(gè)URL正是的。5.6防盜鏈模塊5.開(kāi)啟防盜鏈防盜鏈配置完成之后,重啟Nginx服務(wù)并訪問(wèn),如圖5.28所示。5.6防盜鏈模塊6.防盜鏈白名單在主頁(yè)配置文件中配置防盜鏈白名單。5.7連接狀態(tài)模塊訪問(wèn)Nginx網(wǎng)站之后,查看Nginx程序狀態(tài)。對(duì)Nginx網(wǎng)站的連接狀態(tài)進(jìn)行訪問(wèn),如圖5.29所示。5.7連接狀態(tài)模塊在主頁(yè)配置文件中添加連接狀態(tài)模塊配置。保存配置之后,重啟Nginx服務(wù),并再次訪問(wèn)連接狀態(tài)模塊,如圖5.30所示。5.7連接狀態(tài)模塊刷新頁(yè)面,觀察連接參數(shù),如圖5.31所示。5.31中,對(duì)Nginx進(jìn)行了兩次訪問(wèn),處理了兩次請(qǐng)求,但只創(chuàng)建了一次連接。這說(shuō)明,此時(shí)客戶端與服務(wù)器端保持了長(zhǎng)連接,不需要再次創(chuàng)建連接。5.7連接狀態(tài)模塊在Nginx主配置文件中,調(diào)整長(zhǎng)連接配置。間隔5秒刷新一次連接狀態(tài)模塊的訪問(wèn)頁(yè)面,如圖5.32所示。5.7連接狀態(tài)模塊在5秒內(nèi)多次刷新頁(yè)面,觀察連接參數(shù),如圖5.33所示。第6章訪問(wèn)限制與訪問(wèn)控制訪問(wèn)限制訪問(wèn)控制訪問(wèn)控制訪問(wèn)限制了解訪問(wèn)限制與訪問(wèn)控制的概念了解訪問(wèn)限制與訪問(wèn)控制對(duì)網(wǎng)站安全的影響熟悉訪問(wèn)限制與訪問(wèn)控制的原理掌握訪問(wèn)限制與訪問(wèn)控制的啟動(dòng)方法6.1訪問(wèn)限制訪問(wèn)限制是一種防止惡意訪問(wèn)的常用手段,可以指定同一IP地址在固定時(shí)間內(nèi)的訪問(wèn)次數(shù),或者指定同一IP地址在固定時(shí)間內(nèi)建立連接的次數(shù),若超過(guò)網(wǎng)站指定的次數(shù)訪問(wèn)將不成功。如此一來(lái),不僅可增加網(wǎng)站安全,還可減小Web服務(wù)器的壓力。6.1訪問(wèn)限制1.啟動(dòng)請(qǐng)求頻率限制(1)定義6.1.1

請(qǐng)求頻率限制limit_req_zone表示限制請(qǐng)求規(guī)則,其中zone也有空間的意思;$binary_remote_addr表示二進(jìn)制形式的客戶端地址;req_zone表示規(guī)則名稱,為了便于引用,允許用戶自定義;10m表示存儲(chǔ)客戶端IP地址的空間大??;rate表示訪問(wèn)頻率的限制范圍,1r/s表示1秒鐘一次。6.1訪問(wèn)限制(2)引用限制規(guī)則定義完成之后,在主頁(yè)配置文件中直接引用即可。6.1.1

請(qǐng)求頻率限制6.1訪問(wèn)限制6.1.1

請(qǐng)求頻率限制(3)訪問(wèn)引用配置之后,創(chuàng)建頁(yè)面文件,并重啟Nginx服務(wù),最后訪問(wèn)該網(wǎng)站,如圖6.1所示。6.1訪問(wèn)限制6.1.1

請(qǐng)求頻率限制直接訪問(wèn)網(wǎng)站中的圖片,如圖6.2所示。6.1訪問(wèn)限制6.1.1

請(qǐng)求頻率限制快速多次刷新頁(yè)面,如圖6.3所示。6.1訪問(wèn)限制(4)優(yōu)化配置為了減少503狀態(tài)碼的出現(xiàn),可以在文件中配置請(qǐng)求延遲。6.1.1

請(qǐng)求頻率限制burst表示并發(fā)請(qǐng)求數(shù)量,即在請(qǐng)求限制規(guī)則中所配置的時(shí)間內(nèi)發(fā)起的請(qǐng)求數(shù)。并發(fā)請(qǐng)求數(shù)量一旦超過(guò)自定義的數(shù)量,也會(huì)出現(xiàn)503狀態(tài)碼。6.1訪問(wèn)限制6.1.1

請(qǐng)求頻率限制保存配置并重啟Nginx服務(wù),對(duì)訪問(wèn)頁(yè)面進(jìn)行多次快速刷新,觀察結(jié)果。在刷新的過(guò)程中,頁(yè)面通常會(huì)出現(xiàn)“加載中”狀態(tài),如圖6.4所示?!凹虞d中”狀態(tài)的原因并非網(wǎng)絡(luò)原因,而是服務(wù)器對(duì)請(qǐng)求進(jìn)行了延遲操作。6.1訪問(wèn)限制6.1.1

請(qǐng)求頻率限制更改請(qǐng)求限制的配置,取消請(qǐng)求延遲現(xiàn)象的發(fā)生。6.1訪問(wèn)限制2.工具測(cè)試6.1.1

請(qǐng)求頻率限制ab表示該命令是針對(duì)ApacheBench的-n表示總訪問(wèn)次數(shù)-c表示分幾次訪問(wèn)6.1訪問(wèn)限制6.1.1

請(qǐng)求頻率限制執(zhí)行命令之后,ApacheBench將通過(guò)終端顯示對(duì)網(wǎng)站訪問(wèn)測(cè)試的結(jié)果,以及各項(xiàng)訪問(wèn)參數(shù)。服務(wù)器端信息。訪問(wèn)內(nèi)容信息。6.1訪問(wèn)限制6.1.1

請(qǐng)求頻率限制ApacheBench的訪問(wèn)結(jié)果信息。ConcurrencyLevel表示并發(fā)數(shù),由于訪問(wèn)總次數(shù)是100次,分10次訪問(wèn),每次并發(fā)數(shù)為10。Timetakenfortests表示測(cè)試時(shí)間,也就是100次訪問(wèn)所消耗的時(shí)間。Completerequests表示完成的請(qǐng)求總數(shù)。

Failedrequests表示失敗的請(qǐng)求總數(shù),此處失敗請(qǐng)求總數(shù)為99次6.1訪問(wèn)限制3.觀察日志查看錯(cuò)誤日志,了解請(qǐng)求限制對(duì)服務(wù)。6.1.1

請(qǐng)求頻率限制6.1訪問(wèn)限制1.定義連接頻率限制需要進(jìn)行定義。6.1.2連接頻率限制6.1訪問(wèn)限制6.1.2連接頻率限制2.引用限制名稱與IP地址存儲(chǔ)空間定義完成之后,在主頁(yè)配置文件中直接引用即可。6.2訪問(wèn)控制1.原理基于主機(jī)的訪問(wèn)控制是指通過(guò)主機(jī)的信息,來(lái)判斷是否接受請(qǐng)求,該功能基于Nginx模塊——ngx_http_access_module。通常配置文件中會(huì)添加訪問(wèn)白名單或訪問(wèn)黑名單。若服務(wù)器收到來(lái)自白名單中IP地址的請(qǐng)求,則可以成功訪問(wèn)網(wǎng)站。白名單與黑名單在配置文件中通常由allow與deny來(lái)表示,將指定的IP地址寫(xiě)在參數(shù)后即可。6.2.1

基于主機(jī)6.2訪問(wèn)控制2.配置在主頁(yè)配置文件中添加基于主機(jī)的訪問(wèn)控制。6.2.1

基于主機(jī)6.2訪問(wèn)控制通過(guò)本機(jī)瀏覽器訪問(wèn)網(wǎng)站,如圖6.6所示。6.2.1

基于主機(jī)6.2訪問(wèn)控制3

對(duì)剛剛的訪問(wèn)控制配置進(jìn)行更改。6.2.1

基于主機(jī)上述示例中,將兩條配置調(diào)換了順序,如此一來(lái),無(wú)論是誰(shuí)都無(wú)法訪問(wèn)到網(wǎng)站。因?yàn)橄到y(tǒng)對(duì)文件的讀取是有順序的,所以優(yōu)先讀取的信息將被優(yōu)先執(zhí)行。由于這兩條配置具有矛盾性,所以此時(shí)allow無(wú)法被執(zhí)行。6.2訪問(wèn)控制3.再次更改配置。6.2.1

基于主機(jī)上述示例中,將本地IP地址配置為否認(rèn)IP地址,將其他所有IP地址配置為允許IP地址。再次訪問(wèn)時(shí),本機(jī)將無(wú)法訪問(wèn),而其他計(jì)算機(jī)可以正常訪問(wèn)。6.2訪問(wèn)控制4.更改配置文件創(chuàng)建兩個(gè)網(wǎng)站。6.2.1

基于主機(jī)6.2訪問(wèn)控制在Nginx主配置文件中添加基于主機(jī)的訪問(wèn)控制配置6.2.1

基于主機(jī)6.2訪問(wèn)控制通過(guò)本機(jī)訪問(wèn)網(wǎng)站,如圖6.7、圖6.8所示。6.2.1

基于主機(jī)6.2訪問(wèn)控制1.原理基于用戶的訪問(wèn)控制是指通過(guò)用戶的信息,來(lái)判斷是否接受請(qǐng)求,該功能基于Nginx模塊——ngx_http_auth_basic_module。6.2.2 基于用戶6.2訪問(wèn)控制2.創(chuàng)建認(rèn)證文件演示基于用戶訪問(wèn)控制的啟用方式。創(chuàng)建兩個(gè)用戶并設(shè)置密碼。6.2.2 基于用戶6.2訪問(wèn)控制3.啟動(dòng)認(rèn)證在主頁(yè)配置文件中啟動(dòng)用戶認(rèn)證,并調(diào)用密碼文件中的信息。6.2.2 基于用戶6.2訪問(wèn)控制保存好配置之后,重啟Nginx服務(wù),并對(duì)網(wǎng)站進(jìn)行訪問(wèn),如圖6.9所示。6.2.2 基于用戶6.2訪問(wèn)控制填寫(xiě)之前密碼文件中的賬戶與密碼即可成功訪問(wèn)該網(wǎng)站,如圖6.10所示。6.2.2 基于用戶6.2訪問(wèn)控制6.2.2 基于用戶訪問(wèn)網(wǎng)站之后,在終端查看訪問(wèn)日志。第7章反向代理代理原理代理配置代理緩存郵箱代理服務(wù)器代理配置代理原理代理緩存郵箱代理服務(wù)器了解

反向代理與正向代理的原理掌握Nginx代理緩存的原理與配置熟悉

Nginx反向代理的配置7.1代理原理代理器是外網(wǎng)與內(nèi)網(wǎng)之間的橋梁,可以代理客戶端訪問(wèn)服務(wù)器端,也可以代理服務(wù)器端響應(yīng)客戶端。代理器分為正向代理與反向代理。7.1代理原理正向代理是處于客戶端與服務(wù)器端之間的代理節(jié)點(diǎn),客戶端將請(qǐng)求發(fā)送給正向代理,正向代理再向服務(wù)器端進(jìn)行請(qǐng)求,最終正向代理將響應(yīng)返回給客戶端,作用是代理內(nèi)網(wǎng)客戶端訪問(wèn)外網(wǎng),并使外網(wǎng)服務(wù)器端對(duì)客戶端不可見(jiàn),如圖7.1所示。7.1代理原理反向代理是服務(wù)于服務(wù)器端的代理節(jié)點(diǎn)??蛻舳说恼?qǐng)求不會(huì)直接發(fā)送給服務(wù)器端,而是先由反向代理服務(wù)器接收,再由反向代理服務(wù)器發(fā)送給服務(wù)器端,如圖7.2所示。7.1代理原理將通過(guò)域名解析工具查看域名的IP地址,觀察服務(wù)器端域名所綁定的IP地址。7.1代理原理訪問(wèn)兩個(gè)反向代理服務(wù)器IP地址,如圖7.3所示。7.2代理配置Nginx的反向代理功能基于它的代理模塊(ngx_http_proxy_module)實(shí)現(xiàn)。1.代理配置7.2.1

代理語(yǔ)法2.真實(shí)IP地址配置7.2代理配置3.緩沖區(qū)配置7.2.1

代理語(yǔ)法4.超時(shí)配置7.2代理配置1.啟動(dòng)網(wǎng)站配置反向代理示例服務(wù)器信息,如表7.1所示。7.2.2 配置示例7.2代理配置7.2.2 配置示例在第一臺(tái)服務(wù)器中創(chuàng)建一個(gè)網(wǎng)站。7.2代理配置2.啟動(dòng)代理反向代理的配置可以寫(xiě)在主頁(yè)配置文件中,也可以寫(xiě)在主配置文件中。此處以主頁(yè)配置文件為例。7.2.2 配置示例7.2代理配置參數(shù)詳解。proxy_pass表示真實(shí)服務(wù)器的IP地址,也就是Web服務(wù)器的IP地址;proxy_set_headerHost$http_host表示重新定義轉(zhuǎn)發(fā)給Web服務(wù)器的請(qǐng)求頭部,即在請(qǐng)求頭部添加客戶端的真實(shí)IP地址;proxy_set_headerX-Real-IP$remote_addr表示記錄客戶端的真實(shí)IP地址;proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for表示記錄服務(wù)器端反向代理服務(wù)器的IP地址;proxy_connect_timeout表示反向代理服務(wù)器對(duì)Web服務(wù)器發(fā)起TCP三次握手的連接超時(shí)時(shí)間;7.2.2 配置示例7.2代理配置proxy

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論