Nginx全能指南完整版_第1頁(yè)
Nginx全能指南完整版_第2頁(yè)
Nginx全能指南完整版_第3頁(yè)
Nginx全能指南完整版_第4頁(yè)
Nginx全能指南完整版_第5頁(yè)
已閱讀5頁(yè),還剩110頁(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)介

?:Web服務(wù)基礎(chǔ)介正常情況下的單次web服務(wù)訪問(wèn):互聯(lián)?發(fā)展歷程回顧1993年3?2?,中國(guó)科學(xué)院?能物理研究所租?AT&T公司的國(guó)際衛(wèi)星信道建?的接?美國(guó)SLAC國(guó)家實(shí)驗(yàn)室的專(zhuān)線正式開(kāi)通,成為我國(guó)連?Internet的第?根專(zhuān)1995年?云開(kāi)始創(chuàng)業(yè)并推出了?個(gè)web?站<<中國(guó)??>>,1999年創(chuàng)建阿?巴巴\h,年5?10?創(chuàng)?淘寶?,2004年12?,?云創(chuàng)?第三??上?付平臺(tái)?付寶(螞蟻?服旗下,共有螞蟻?服?付寶、余額寶、招財(cái)寶、螞蟻聚寶、?商銀?、螞蟻花唄、芝?信?等?業(yè)務(wù)板塊。),2009年開(kāi)始舉辦雙??購(gòu)物狂歡節(jié),以下是歷年交易成交額:2012年1?11?淘寶商城正式更名為“天貓”2014年9?19??巴巴集團(tuán)于紐約證券交易所正式掛牌上市年福布斯統(tǒng)計(jì)?云財(cái)富346億美:web服務(wù)介\h:Apace-早期的webApache起初由美國(guó)的伊利諾伊?學(xué)?檳分校的國(guó)家超級(jí)計(jì)算機(jī)應(yīng)?中?開(kāi)發(fā),?前經(jīng)歷了兩?版本分別是1.X和2.X,其可以通過(guò)編譯安裝實(shí)現(xiàn)特定的功能,?前?持三種不同的MPM(multi-pocessingmodule,塊,官??站:\hhttp://ww.apache.o。:Apacheprefork預(yù)派?模式,有?個(gè)主控制進(jìn)程,然后?成多個(gè)?進(jìn)程,使?select模型,最?并發(fā)1024,每個(gè)?進(jìn)程有?個(gè)獨(dú)的線程響應(yīng)??請(qǐng)求,相對(duì)?較占?內(nèi)存,但是?較穩(wěn)定,可以設(shè)置最?和最?進(jìn)程數(shù),是最古?的?種模式,是最穩(wěn)定的模式,適?于訪問(wèn)量不是很?的場(chǎng)景。優(yōu)點(diǎn):穩(wěn)定缺點(diǎn):?量??訪問(wèn)慢,占?資源,1024個(gè)進(jìn)程不適?于?并發(fā)場(chǎng)景:Apachewoker?種多進(jìn)程和多線程混合的模型,有?個(gè)控制進(jìn)程,啟動(dòng)多個(gè)?進(jìn)程,每個(gè)?進(jìn)程??包含固定的線程,使?程來(lái)處理請(qǐng)求,當(dāng)線程不夠使?的時(shí)候會(huì)再啟動(dòng)?個(gè)新的?進(jìn)程,然后在進(jìn)程??再啟動(dòng)線程處理請(qǐng)求,由于其?了線程處理請(qǐng)求,因此可以承受更?的并發(fā)。優(yōu)點(diǎn):相?pefork占?的內(nèi)存較少,可以同時(shí)處理更多的請(qǐng)求點(diǎn):使?eepalive的?連接?式,某個(gè)線程會(huì)?直被占據(jù),即使沒(méi)有傳輸數(shù)據(jù),也需要?直等待到超時(shí)才會(huì)被釋放。如果過(guò)多的線程,被這樣占據(jù),也會(huì)導(dǎo)致在?并發(fā)場(chǎng)景下的?服務(wù)線程可?。(該問(wèn)題在pefork模式下,同樣會(huì)發(fā)?):ApacheeventApache中最新的模式,2012年發(fā)布的apache2.4.X系列正式?持vent模型,屬于事件驅(qū)動(dòng)模型(epoll),每個(gè)進(jìn)程響應(yīng)多個(gè)請(qǐng)求,在現(xiàn)在版本?的已經(jīng)是穩(wěn)定可?的模式。它和worer模式很像,最?的區(qū)別在于,它解決了eepalive場(chǎng)景下,?期被占?的線程的資源浪費(fèi)問(wèn)題(某些線程因?yàn)楸籩epalive,空掛在哪?等待,中間?乎有請(qǐng)求過(guò)來(lái),甚?等到超時(shí))。ventMPM中,會(huì)有?個(gè)專(zhuān)?的線程來(lái)管理這些eepalive類(lèi)型的線程,當(dāng)有真實(shí)請(qǐng)求過(guò)來(lái)的時(shí)候,將請(qǐng)求傳遞給服務(wù)線程,執(zhí)?完畢后,?允許它釋放。這樣增強(qiáng)了?并發(fā)場(chǎng)景下的請(qǐng)求處理能?。優(yōu)點(diǎn):?jiǎn)尉€程響應(yīng)多請(qǐng)求,占據(jù)更少的內(nèi)存,?并發(fā)下表現(xiàn)更優(yōu)秀,會(huì)有?個(gè)專(zhuān)?的線程來(lái)管理eep-alive類(lèi)型的線程,當(dāng)有真實(shí)請(qǐng)求過(guò)來(lái)的時(shí)候,將請(qǐng)求傳遞給服務(wù)線程,執(zhí)?完畢后,?允許它釋放缺點(diǎn):沒(méi)有線程安全制:Nginx-?性能的web\hNginx歷經(jīng)??年的迭代更新\hhttps://nginx.og/en/CHANGE),?前功能已經(jīng)?常完善且運(yùn)?穩(wěn)定,另外Nginx的版本分為開(kāi)發(fā)版、穩(wěn)定版和過(guò)期版,Nginx以功能豐富著稱(chēng),它即可以作為http服務(wù)器,也可以作為反向代理服務(wù)器或者郵件服務(wù)器,能夠快速的響應(yīng)靜態(tài)??的請(qǐng)求,?持FastGI/SSL/VirtualHost/URLRwrite/Gzip/HTTPBasicAuth/http或者CP的負(fù)載均衡(1.9版本以上且開(kāi)啟steam模塊)等功能,并且?持第的功能擴(kuò)展。為什么使?Nginx天??163京東新浪等?線互聯(lián)?公司都在?Nginx或者進(jìn)??次開(kāi)發(fā):??訪問(wèn)體驗(yàn)互聯(lián)?存在??速度體驗(yàn)的1-3-10原則,即1秒最優(yōu),1-3秒較優(yōu),3~10秒?較慢,10秒以上???法接受。放棄?個(gè)產(chǎn)品的代價(jià)很低,只是換?個(gè)URL?已。\h\h/s?id=1643187950686234006&wfr=spider&for=pc??體驗(yàn)的重要性\h全球最?Google:慢500ms=20%將放棄訪問(wèn)全球最?的電商零售?站亞?遜:慢100ms=1%將:性有很多研究都表明,性能對(duì)??的?為有很?的影響:79%的??表?不太可能再次打開(kāi)?個(gè)緩慢的?站47%??期望??能在2秒鐘以內(nèi)加載40%的??表?如果加載時(shí)間超過(guò)三秒鐘,就會(huì)放棄這個(gè)?站??加載時(shí)間?秒可能導(dǎo)致轉(zhuǎn)換損失7%,??瀏覽量減少11%8秒定律:??訪問(wèn)?個(gè)?站時(shí),如果等待??打開(kāi)的時(shí)間超過(guò)秒,會(huì)有超過(guò)30%的??放:影響??體驗(yàn)的?個(gè)據(jù)說(shuō)?云在剛開(kāi)始創(chuàng)業(yè)在給客?演?時(shí),打開(kāi)?個(gè)?站花了兩個(gè)多?時(shí)\h客?端?客?端與服務(wù)端距服務(wù)端:應(yīng)?程序?prefork:進(jìn)程模型,兩級(jí)結(jié)構(gòu),主進(jìn)程master負(fù)責(zé)?成?進(jìn)程,每個(gè)?進(jìn)程負(fù)責(zé)響應(yīng)?個(gè)請(qǐng)?作進(jìn)程#直接處理客?的請(qǐng)線程驗(yàn)證?#cat/proc/PID/status#pstree-pPID:服務(wù)端機(jī)械磁機(jī)械磁盤(pán)的尋道時(shí)間、旋轉(zhuǎn)延遲和數(shù)據(jù)傳輸時(shí)間尋道時(shí)間:是指磁頭移動(dòng)到正確的磁道上所花費(fèi)的時(shí)間,尋道時(shí)間越短則I/O處理就越快,?前磁盤(pán)的尋道時(shí)間?3-15毫秒左右旋旋轉(zhuǎn)延遲:是指將磁盤(pán)?旋轉(zhuǎn)到數(shù)據(jù)所在的扇區(qū)到磁頭下?所花費(fèi)的時(shí)間,旋轉(zhuǎn)延遲取決于磁盤(pán)的轉(zhuǎn)速,通常使?磁意。。7200轉(zhuǎn)/分的磁盤(pán)平均物理尋道時(shí)間:9毫常?磁盤(pán)的平均延遲時(shí)間=7200轉(zhuǎn)的磁盤(pán)IOPS計(jì)算?式:1000毫秒/(9毫秒的尋道時(shí)間+4.17毫秒的平均旋轉(zhuǎn)延遲時(shí)間10000轉(zhuǎn)的磁盤(pán)的IOPS計(jì)算?式:1000毫秒/(6毫秒的尋道時(shí)間+3毫秒的平均旋轉(zhuǎn)延遲時(shí)間)=1000/9=111?次完整的I/O是??空間的進(jìn)程數(shù)據(jù)與內(nèi)核空間的內(nèi)核數(shù)據(jù)的報(bào)?的完整交換,但是由于內(nèi)核空間與??空間是嚴(yán)格隔離的,所以其數(shù)據(jù)交換過(guò)程中不能由??空間的進(jìn)程直接調(diào)?內(nèi)核空間的內(nèi)存數(shù)據(jù),?是需要經(jīng)歷?次核空間中的內(nèi)存數(shù)據(jù)coy到??空間的進(jìn)程內(nèi)存當(dāng)中,所以簡(jiǎn)單說(shuō)I/O就是把數(shù)據(jù)從內(nèi)核空間中的內(nèi)存數(shù)據(jù)復(fù)制到??空間中進(jìn)程的內(nèi)存當(dāng)中??絡(luò)通信就是?絡(luò)協(xié)議棧到??空間進(jìn)程的IO就是?絡(luò)磁盤(pán)I/O是進(jìn)程向內(nèi)核發(fā)起系統(tǒng)調(diào)?,請(qǐng)求磁盤(pán)上的某個(gè)資源?如是?件或者是圖?,然后內(nèi)核通過(guò)相應(yīng)的驅(qū)動(dòng)程序?qū)?標(biāo)圖?加載到內(nèi)核的內(nèi)存空間,加載完成之后把數(shù)據(jù)從內(nèi)核內(nèi)存再?gòu)?fù)制給進(jìn)程內(nèi)存,如果是?較?的數(shù)據(jù)需要等待時(shí)間。每每次IO,都要經(jīng)由兩個(gè)階段?:系統(tǒng)I/O步需要調(diào)?者主動(dòng)詢問(wèn)事情是否處理完成步:asynchronous,被調(diào)?者通過(guò)狀態(tài)、通知或回調(diào)機(jī)制主動(dòng)通知。異步:進(jìn)程發(fā)出請(qǐng)求調(diào)?后,不等內(nèi)核返回響應(yīng),接著處理下?個(gè)請(qǐng)求,Nginx是異步的阻塞/?阻塞:關(guān)注調(diào)?者在等待結(jié)果返回之前所處的狀塞:blocking,指IO操作需要徹底完成后才返回?空間,調(diào)?結(jié)果返回之前,調(diào)?者被掛起,?不了別的事情。?阻塞:nonblocking,指IO操作被調(diào)?后?即回給???個(gè)狀態(tài)值,?需等到IO操作徹底完成,最終的調(diào)?結(jié)果返回之前,調(diào)?者不會(huì)被掛起,可以去做情。:?絡(luò)I/O阻塞型、?阻塞型、復(fù)?型、信號(hào)驅(qū)動(dòng)型、異:同步阻塞型IO模型(blocking阻塞IO模型是最簡(jiǎn)單的IO模型,??線程在內(nèi)核進(jìn)?IO操作時(shí)被阻塞??線程通過(guò)系統(tǒng)調(diào)?read發(fā)起IO讀操作,由??空間轉(zhuǎn)到內(nèi)核空間。內(nèi)核等到數(shù)據(jù)包到達(dá)后,然后將接收的數(shù)據(jù)拷?到??空間,完成read??需要等待read將數(shù)據(jù)讀取到buffer后,才繼續(xù)處理接收的數(shù)據(jù)。整個(gè)IO請(qǐng)求的過(guò)程中,??線程是被阻塞的,這?在發(fā)起IO請(qǐng)求時(shí),不能做任何事情,對(duì)CPU的資源利?率不夠優(yōu)點(diǎn):程序簡(jiǎn)單,在阻塞等待數(shù)據(jù)期間進(jìn)程/線程掛起,基本不會(huì)占?CPU資源缺點(diǎn):每個(gè)連接需要獨(dú)?的進(jìn)程/線程單獨(dú)處理,當(dāng)并發(fā)請(qǐng)求量?時(shí)為了維護(hù)程序內(nèi)存、線程切換開(kāi)銷(xiāo)較?,apache的pefock使?的是這種模式。不。:同步?阻塞型I/O模型(nonblocking??線程發(fā)起IO請(qǐng)求時(shí)?即返回。但并未讀取到任何數(shù)據(jù),??線程需要不斷地發(fā)起IO請(qǐng)求,直到數(shù)據(jù)到達(dá)后,真正讀取到數(shù)據(jù),繼續(xù)執(zhí)?。即“輪詢”機(jī)制存在兩個(gè)問(wèn)題:如果有?量?件描述符都要等,那么就得?個(gè)?個(gè)的ead。這會(huì)帶來(lái)?量的ContxtSwitch(ead是系統(tǒng)調(diào)?,每調(diào)??次就得在??態(tài)和核?態(tài)切換?次)。輪詢時(shí)間不好把握。這?是要猜多久之后數(shù)據(jù)才能到。等待時(shí)間設(shè)的太?,程序響應(yīng)延遲就過(guò)?;設(shè)的太短,就會(huì)造成過(guò)于頻繁的重試,?耗CPU?已,是?較浪費(fèi)CPU的?式,?般很少直接使?這種模型,?是在其他IO模型中使??阻塞IO這?特性。:IO多路復(fù)?型(IOIOmultiplxing就是我們說(shuō)的select,poll,epoll,有些地?也稱(chēng)這種IO?式為ventdrivenIO。select/poll/epoll的好處就在于單個(gè)pocess就可以同時(shí)處理多個(gè)?絡(luò)連接的IO。它的基本原理就是epoll這個(gè)function會(huì)不斷的輪詢所負(fù)責(zé)的所有socet,當(dāng)某個(gè)socet有數(shù)據(jù)到達(dá)了,就通知??進(jìn)程。當(dāng)??進(jìn)程調(diào)?了select,那么整個(gè)進(jìn)程會(huì)被block,?同時(shí),ernel會(huì)“監(jiān)視”所有select負(fù)責(zé)的socet,當(dāng)任何?個(gè)socet中的數(shù)據(jù)準(zhǔn)備好了,select就會(huì)返回。這個(gè)時(shí)候??進(jìn)程再調(diào)?ead操作,將數(shù)據(jù)從ernel拷?到??進(jìn)程。ApacheApacheprefork是此模式的主進(jìn)程+多進(jìn)程/單線程+select,work是主進(jìn)程+多進(jìn)程/多線程+poll:信號(hào)驅(qū)動(dòng)式IO(signal-driven信號(hào)驅(qū)動(dòng)IO:signal-drivenI/O??進(jìn)程可以通過(guò)sigaction系統(tǒng)調(diào)?注冊(cè)?個(gè)信號(hào)處理程序,然后主程序可以繼續(xù)向下執(zhí)?,當(dāng)有IO操作準(zhǔn)備就緒時(shí),由內(nèi)核通知觸發(fā)?個(gè)SIGIO信號(hào)處理程序執(zhí)?,然后將??進(jìn)程所需要的數(shù)據(jù)從內(nèi)核空間拷?到??空間,此模型的優(yōu)勢(shì)在于等待數(shù)據(jù)報(bào)到達(dá)期間進(jìn)程不被阻塞。??主程序可以繼續(xù)執(zhí)?,要等待來(lái)?信號(hào)處理函數(shù)的通知。優(yōu)點(diǎn):線程并沒(méi)有在等待數(shù)據(jù)時(shí)被阻塞,內(nèi)核直接返回調(diào)?接收信號(hào),不程繼續(xù)處理其他請(qǐng)求因此可以提?資源的利?率缺點(diǎn):信號(hào)I/O在?量IO操作時(shí)可能會(huì)因?yàn)樾盘?hào)隊(duì)列溢出導(dǎo)致沒(méi)Oe相對(duì)于同步IO,異步IO不是順序執(zhí)?。??進(jìn)程進(jìn)?aio_ead系統(tǒng)調(diào)?之后,?論內(nèi)核數(shù)據(jù)是否準(zhǔn)備好,都會(huì)直返回給??進(jìn)程,然后??態(tài)進(jìn)程可以去做別的事情。等到socet數(shù)據(jù)準(zhǔn)備好了,內(nèi)核直接復(fù)制數(shù)據(jù)給進(jìn)程,然后從內(nèi)核向進(jìn)程發(fā)送通知。IO兩個(gè)階段,進(jìn)程都是?阻塞的。Linux提供了AIO庫(kù)函數(shù)實(shí)現(xiàn)異步,但是?的很少。?前有很多開(kāi)源的異步IO庫(kù),例如libvent、libv、libuv。異步過(guò)程如下圖所?:。:IO對(duì)?這五種?絡(luò)I/O模型中,越往后,阻塞越少,理論上效率也是最優(yōu)前四種屬于同步I/O,因?yàn)槠渲姓嬲腎/O(recvfrom)將阻塞進(jìn)程/線程,只有異步I/O模型才與POSIX定義的異步I/O相匹:實(shí)現(xiàn)?Nginx?持在多種不同的操作系統(tǒng)實(shí)現(xiàn)不同的事件驅(qū)動(dòng)模型,但是其在不同的操作系統(tǒng)甚?是不同的系統(tǒng)的實(shí)現(xiàn)?式不盡相同,主要有以下實(shí)現(xiàn)?式:1、select庫(kù)是在linux和windows平臺(tái)都基本?持的事件驅(qū)動(dòng)模型庫(kù),并且在接?的定義也基本相同,只是部分參數(shù)的2、在Linux的基本驅(qū)動(dòng)模型,windows不?持此驅(qū)動(dòng)模型,是select的升級(jí)版,取消了最?的并發(fā)限制,在編譯nginx3、O。4、不是?個(gè)常?事件驅(qū)動(dòng),最?隊(duì)列1024,不是很常5、?于?持BSD系列平臺(tái)的?校事件驅(qū)動(dòng)模型,主要?在FreeBSD4.1及以上版本、OpenBSD2.0級(jí)以上版本,NetBSD級(jí)以上版本及MacOSX平臺(tái)上,該模型也是poll庫(kù)的變種,因此和epoll沒(méi)有本質(zhì)上的區(qū)別,都是通過(guò)避免輪訓(xùn)操6、s列加7、該?案也是sun公司在開(kāi)發(fā)Solaris的時(shí)候提出的事件驅(qū)動(dòng)庫(kù),只是Solaris10以上的版本,該驅(qū)動(dòng)庫(kù)看防?內(nèi)核崩8、Windows系統(tǒng)上的實(shí)現(xiàn)?式,對(duì)應(yīng)第5種(異步I/O)模型:常?模型匯總:常?模型對(duì)??平觸發(fā)--多次通知,需要關(guān)?數(shù)據(jù)是否取完以避免重復(fù)通知,效邊緣觸發(fā)--?次通知,需要關(guān)?數(shù)據(jù)是否取?以避免數(shù)據(jù)丟失,效率較?缺再低核select采取了內(nèi)存拷??法來(lái)實(shí)現(xiàn)內(nèi)核將FD消息通知給??空間,這樣?個(gè)?來(lái)存放?量fd的數(shù)據(jù)結(jié)構(gòu),這樣會(huì)態(tài)的?量的fd的數(shù)組被整體復(fù)制于??態(tài)和內(nèi)核地址空間之間,?不管這樣的復(fù)制是不是有意poll特點(diǎn)是“?平觸發(fā)”,如果報(bào)告了fd后,沒(méi)有被處理,那么下次poll時(shí)會(huì)再次報(bào)告該在Linux2.6內(nèi)核中提出的select和poll的增強(qiáng)版次優(yōu)點(diǎn)內(nèi)存拷?,利?mmap(MemoryMapping)加速與內(nèi)核空間的消息傳遞;即epoll使?mmap減少?gòu)?fù)制:MMAP介mmap(memorymapping)系統(tǒng)調(diào)?使得進(jìn)程之間通過(guò)映射同?個(gè)普通?件實(shí)現(xiàn)共享內(nèi)存,普通?件被映射到地址空間后,進(jìn)程可以像訪問(wèn)普通內(nèi)存?樣對(duì)?件進(jìn)?訪問(wèn)。:mmap??:Nginx\hNginx則是免費(fèi)的、開(kāi)源的、?性能的HTTP和反向代理服務(wù)器、郵件代理服務(wù)器、以及TCP/UDP代理服務(wù)C10K問(wèn)題(10KConnections),\h/blog/archives/740.htmlNginx官?\h\hnginx的其它的?次發(fā)?版:engine:由淘寶?發(fā)起的eb服務(wù)器項(xiàng)?。它在Nginx的基礎(chǔ)上,針對(duì)?訪問(wèn)量?站的需求,添加了很多?級(jí)功能和特性。engine的性能和穩(wěn)定性已經(jīng)在?型的?站如淘寶?,天貓商城等得到了很好的檢驗(yàn)。它的最終?標(biāo)是打造?個(gè)?效、穩(wěn)定、安全、易?的eb平臺(tái),從2011年12?開(kāi)始,engine個(gè)開(kāi)源項(xiàng)?,官?\hhttp://tengine.taobao.og/OpenResty:基于Nginx與Lua語(yǔ)?的?性能eb平臺(tái),章亦春團(tuán)隊(duì)開(kāi)發(fā),官?:\hhttp://openest.og/cn/:Nginx功能介靜態(tài)的web資源服務(wù)器html,圖?,js,css,txt等靜態(tài)資源結(jié)合FastGI/uWSGI/SGI等協(xié)議反向代理動(dòng)態(tài)資請(qǐng)求http/https協(xié)議的反向代理imap4/pop3協(xié)議的反向代理tcp/udp協(xié)議的請(qǐng)求轉(zhuǎn)發(fā)(反向代理):基礎(chǔ)特性特特性?持熱部署:不停機(jī)更新配置?件,升級(jí)版本,更換?志?event-靜態(tài)資源的web服務(wù):和web服務(wù)相關(guān)的虛擬虛擬主機(jī)?持keep-alive和管道連接(利??個(gè)連接做多次請(qǐng)求)url路徑基于IP及??的訪問(wèn)控?持速率限制及并重新配置和在線升級(jí)??須中斷客?的?:Nginxweb請(qǐng)求處理機(jī)制:1、多進(jìn)程?式:服務(wù)器每接收到?個(gè)客?端請(qǐng)求就有服務(wù)器的主進(jìn)程?成?個(gè)??端,直到??關(guān)閉連接,這樣的優(yōu)勢(shì)是處理速度快,各?進(jìn)程之間相互獨(dú)?,但是如果訪問(wèn)過(guò)?會(huì)導(dǎo)致服務(wù)器資源耗盡??法提供請(qǐng)求。2、多線程?式:與多進(jìn)程?式類(lèi)似,但是每收到?個(gè)客?端請(qǐng)求會(huì)有服務(wù)進(jìn)程派?出?個(gè)線程來(lái)個(gè)客??進(jìn)?交互,?個(gè)線程的開(kāi)銷(xiāo)遠(yuǎn)遠(yuǎn)?于?個(gè)進(jìn)程,因此多線程?式在很?程度減輕了web服務(wù)器對(duì)系統(tǒng)資源的要求,但是多線程也有??的缺點(diǎn),即當(dāng)多個(gè)線程位于同?個(gè)進(jìn)程內(nèi)?作的時(shí)候,可以相互訪問(wèn)同樣的內(nèi)存地址空間,所以他們相互影響,另外?旦主進(jìn)程掛掉則所有?線程都不能?作了,IIS服務(wù)器使?了多線程式,需要間隔?段時(shí)間就重啟?次才能穩(wěn)定。Nginx是多進(jìn)程組織模型,?且是?個(gè)由Master主進(jìn)程和Worker?作進(jìn)程組成讀讀取Nginx配置?件并驗(yàn)證其有效性和正確性按照配置?成、管理和結(jié)束?令置接接受處理客?的請(qǐng)將請(qǐng)求以此送?各個(gè)功能模塊進(jìn)?IO調(diào)?,獲取響應(yīng)數(shù)接收主程序指令,?如重啟、升級(jí)和退出:進(jìn)程間?作進(jìn)程是有主進(jìn)程?成的,主進(jìn)程使?fork()函數(shù),在Nginx服務(wù)器啟動(dòng)過(guò)程中主進(jìn)程根據(jù)配置?件決定啟動(dòng)?進(jìn)程的數(shù)量,然后建??張全局的?作表?于存放當(dāng)前未退出的所有的?作進(jìn)程,主進(jìn)程?成?作進(jìn)程后會(huì)將新?成的?作進(jìn)程加?到?作進(jìn)程表中,并建??個(gè)單向的管道并將其傳遞給?作進(jìn)程,該管道與普通的管道不同,它是由主進(jìn)程指向?作進(jìn)程的單項(xiàng)通道,包含了主進(jìn)程向?作進(jìn)程發(fā)出的指令、?作進(jìn)程ID、?作進(jìn)程在?作進(jìn)程表中的索引和必要的?件描述符等信息。主進(jìn)程與外界通過(guò)信號(hào)機(jī)制進(jìn)?通信,當(dāng)接收到需要處理的信號(hào)時(shí),它通過(guò)管道向相關(guān)的?作進(jìn)程發(fā)送正確的指令,每個(gè)?作進(jìn)程都有能?捕獲管道中的可讀事件,當(dāng)管道中有可讀事件的時(shí)候,?作進(jìn)程就會(huì)從管道中讀取并解析指令,然后采取相應(yīng)的執(zhí)?動(dòng)作,這樣就完成了主進(jìn)程與?作進(jìn)程的交互。信能。針?biāo)?作進(jìn)程2捕獲到管道中的事件后,解析指令并進(jìn)?相關(guān)操作,這樣就完成了?作進(jìn)程之間的通信:Nginx模塊介核?Nginx服務(wù)器正常運(yùn)?必不可少的錯(cuò)誤?志置?事件驅(qū)動(dòng)機(jī)制、?功準(zhǔn)HTTPHTTP協(xié)議解析相關(guān)的功能,?如端?配置??編碼設(shè)置、HTTP響應(yīng)頭設(shè)置可選HTTP模塊:主要?于擴(kuò)展標(biāo)準(zhǔn)的HTTP功Nginx能處理?些特殊的服務(wù),?如FlashGeoIP請(qǐng)求?絡(luò)傳輸全協(xié)SSL?服務(wù)模塊:主要?于?持Nginx的郵件服務(wù),包括對(duì)POP3協(xié)IMAP協(xié)SMTP協(xié)議的?三?模塊:是為了擴(kuò)展Nginx服務(wù)器應(yīng)?,完成開(kāi)發(fā)者?定義功能,?如Json?Lua?持等nginx?度模塊化,但其模塊早期不?持DSO機(jī)制;1.9.11版本?持動(dòng)態(tài)裝載和卸分類(lèi)核核?模塊:core標(biāo)準(zhǔn)HTTPCore 默認(rèn)功 模 Stream第三?:NginxNginx的安裝版本分為Mainlineversion(主要開(kāi)發(fā)版本,其實(shí)就是還處于開(kāi)發(fā)版)、Stableversion(當(dāng)前最新穩(wěn)定版和Legacyversions(舊的穩(wěn)定版),Nginx安裝可以使?yum或源碼安裝,但是推薦使?源碼,?是yum的版本?較舊,?是編譯安裝可以更?便?定義相關(guān)路徑,三是使?源碼編譯可以?定義相關(guān)功能,更?便業(yè)務(wù)的上的使?,源碼安裝需要提前準(zhǔn)備標(biāo)準(zhǔn)的編譯器,GC的全稱(chēng)是(GNUCompilercollection),其有GNU開(kāi)發(fā),并以GPL即GPL許可,是?由的類(lèi)UNIX即蘋(píng)果電腦MacOSX操作系統(tǒng)的標(biāo)準(zhǔn)編譯器,因?yàn)镚C原本只能處理C語(yǔ)?,所以原名為GNUC語(yǔ)?編譯器,后來(lái)得到快速發(fā)展,可以處理C++,Fortan,pascal,objective-C,java以及Ada等其他語(yǔ)?,此外還需要Automae?具,以完成?動(dòng)創(chuàng)建Maefile的?作,Nginx的?些模塊需要依賴第三?庫(kù),?如pce(?持write),zlib(?持gzip模塊)和openssl(?持ssl模塊)等。:Nginxyum需要提前配置好epel[root@s1[root@s1~]#yuminstallepel-release-y[root@s1~]#yuminstall-ynginx[root@s1~]#rpm-qlnginx/etc/nginx/koi-/etc/nginx/koi-/etc/nginx/koi-/etc/nginx/win-/usr/bin/nginx-/usr/share/doc/nginx-[root@s1~]#which查看nginx安裝包[root@s1[root@s1~]#rpm-qinginx :nginx : : :1.el7InstallDate:Thu24Oct201903:14:50AMCST :Unspecified : : :RSA/SHA256,Fri04Oct201906:38:33AMCST,KeyID6a2faea2352c64e5SourceRPM:nginx-1.16.1-1.el7.src.rpmBuildDate:Thu03Oct201901:15:40PMCSTBuildHost:Relocations:(notrelocatable) :FedoraProject :Fedora :\hBug : :AhighperformancewebserverandreverseproxyserverDescription:NginxisawebserverandareverseproxyserverforHTTP,SMTP,POP3andIMAPprotocols,withastrongfocusonhighconcurrency,performanceandlowmemoryusage.:查看使?安裝完成的?進(jìn)制?件[root@s1~][root@s1~]#nginx-hUsage:nginx[-?hvVtTq][-ssignal][-cfilename][-pprefix][-g-?,- :this- :showversionand- showversionandconfigureoptionsthenexit#顯?版本和編譯- - testconfigurationdumpitandexit#測(cè)試并- :suppressnon-errormessagesduringconfigurationtesting#靜-s :sendsignaltoamasterprocess:stop,quit,reopen,reload#發(fā)送信-p :setprefixpath(default:/usr/share/nginx/)#指定Nginx?-c setconfigurationfile(default:/etc/nginx/nginx.conf)#配置?件路-gdirectives:setglobaldirectivesoutofconfigurationfile#設(shè)置全局指:驗(yàn)證[root@s1~]#nginx-nginx:theconfigurationfile/etc/nginx/nginx.confsyntaxisoknginx:configurationfile/etc/nginx/nginx.conftestissuccessful[root@s1~]#nginx-Vnginxversion:builtbygcc4.8.520150623(RedHat4.8.5-39)(GCC)builtwithOpenSSL1.0.2k-fips26Jan2017TLSSNIsupportpath=/usr/lib64/nginx/modules--conf-path=/etc/nginx/nginx.conf--error-log-path=/var/log/nginx/error.log--http-log-path=/var/log/nginx/access.log--http-client-body-temp-http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi--http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi--http-scgi-temp-path=/var/lib/nginx/tmp/scgi--pid-path=/run/nginx.pid--lock-path=/run/lock/subsys/nginx--user=nginx--group=nginx--with-file-aio--with-ipv6--with-http_ssl_module--with-http_v2_module--with-http_realip_module--with-stream_ssl_preread_module--with-http_addition_module--with-http_xslt_module=dynamic--with-http_image_filter_module=dynamic--withwith-http_dav_module--with-http_flv_module--with-http_mp4_module--with-http_gunzip_module--with-http_gzip_static_module--with-http_random_index_module--with-http_secure_link_module--with-http_degradation_module--with-http_slice_module--with-http_stub_status_module--with-http_perl_module=dynamic--with-pcre-jit--with-stream=dynamic--with-stream_ssl_module--with-google_perftools_module--with-debug--with-cc-opt='-O2-g-pipe-Wall-Wp,-D_FORTIFY_SOURCE=2-fexceptions-fstack-protector-strong--param=ssp-buffer-size=4-grecord-gcc-switches-specs=/usr/lib/rpm/redhat/redhat-hardened-cc1-m64-mtune=generic'--with-ld-opt='-Wl,-z,relro-specs=/usr/lib/rpm/redhat/redhat-hardened-ld-Wl,-E':NginxDescription=ThenginxHTTPandreverseproxyserver#Nginxwillfailtostartif/run/nginx.pidalreadyexistsbuthasthewrong#SELinuxcontext.Thismighthappenwhenrunning`nginx-t`fromthecmdline.#/show_bug.cgi?id=1268621ExecStartPre=/usr/sbin/nginx-tExecReload=/bin/kill-sHUP$MAINPIDWantedBy=multi-:配置[root@s1[root@s1~]#grep-v"#"/etc/nginx/nginx.conf|grep-v"^$"usernginx;worker_processeserror_log/var/log/nginx/error.log;pid/run/nginx.pid;include/usr/share/nginx/modules/*.conf;events{worker_connectionshttplog_formatmain'$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.logmain; types_hash_max_size include/etc/nginx/conf.d/*.conf;server 80 server_name_; include/etc/nginx/default.d/*.conf;location/{error_page404/404.html;location=/40x.htmlerror_page500502503504/50x.html;location=/50x.html{:?jiǎn)?dòng)[root@s1~]#systemctlstartnginx[root@s1~]#systemctlstatusnginxnginx.service-ThenginxHTTPandreverseproxy(running)sinceThu2019-10-2403:20:18CST;14sExecStart=/usr/sbin/nginx(code=exited,ExecStartPre=/usr/sbin/nginx-t(code=exited,ExecStartPre=/usr/bin/rm-f/run/nginx.pidMainPID:10879CGroup:├─10879nginx:masterprocess├─10880nginx:worker└─10881nginx:workerOct2403:20:17systemd[1]:StartingThenginxHTTPandreverseproxyserver...Oct2403:20:18systemd[1]:StartedThenginxHTTPandreverseproxyserver.[root@s1~]#ps-ef|grepprocess 4078003:20pts/000:00:00grep--color=auto:訪問(wèn):Nginx編準(zhǔn)備編譯安裝的[root@s2~]#yuminstall-yvimlrzsztreescreenpsmisclsoftcpdumpwgetntpdategccgcc-c++glibcglibc-develpcrepcre-developensslopenssl-develsystemd-develnet-toolsiotopbczipunzipzlib-develbash-completionnfs-utilsautomakelibxml2libxml2-devellibxsltlibxslt-develperlperl-ExtUtils-Embedgcc為GNUCompilerCollection的縮寫(xiě),可以編譯C和C++源代碼等,它是GNU開(kāi)發(fā)的C和C++以及其他很多種語(yǔ)?C、Java、Ada、Go等。gcc在編譯C++源代碼的階段,只能編譯C++源?件,?不能?動(dòng)和C++程序使?的庫(kù)鏈接(編譯過(guò)程分為編最?成?c。。pcrepcre-devel:在Nginx編譯需要PCRE(PerlCompatibleRegularExpression),因?yàn)镹ginxRewrite模塊和HTTP核?模塊會(huì)使?到PCRE正則表達(dá)式語(yǔ)法zlipzlib-devel:nginx啟?壓縮功能的時(shí)候,需要此模塊的?持。:安裝官?源碼包下\h[root@s2[root@s2~]#cd[root@s2src]#tarxfnginx-1.16.1.tar.gz[root@s2src]#cdnginx-[root@s2nginx-1.16.1]#./configure--prefix=/apps/nginx--user--user=nginx--group=nginx--with-http_ssl_module--with-http_v2_module--with-http_realip_module--with-http_stub_status_module--with-http_gzip_static_module--with-stream--with-stream_ssl_module--with-#[root@s2nginx-1.16.1]makeinstall創(chuàng)建?錄,并將?成的模塊和?件復(fù)制到相應(yīng)的?錄:[root@s2nginx-1.16.1]#useraddnginx-s/sbin/nologin-u2000#以普通??啟動(dòng)nginx[root@s2nginx-1.16.1]#chownnginx.nginx-R備注:nginx完成安裝以后,有四個(gè)主要的?。。sbin:該?錄?來(lái)保存nginx?進(jìn)制啟動(dòng)腳本,可以接受不同的參數(shù)以實(shí)現(xiàn)不同的功能:驗(yàn)證版本及編[root@s2[root@s2nginx-1.16.1]#/apps/nginx/sbin/nginx-Vnginxversion:nginx/1.16.1builtbygcc4.8.520150623(RedHat4.8.5-39)(GCC)builtwithOpenSSL1.0.2k-fips26Jan2017TLSSNIsupportconfigurearguments:--prefix=/apps/nginx--user=nginx--group=nginx--with-http_ssl_module--with-http_v2_module--with-http_realip_module--with-with-stream_ssl_module--with-stream_realip_module:訪問(wèn)編譯安裝的nginxweb界?:創(chuàng)建Nginx?[root@s1[root@s1~]#cat/usr/lib/systemd/system/nginx.serviceDescription=ThenginxHTTPandreverseproxyserver#Nginxwillfailtostartif/run/nginx.pidalreadyexistsbuthasthewrong#SELinuxcontext.Thismighthappenwhenrunning`nginx-t`fromthecmdline.#/show_bug.cgi?id=1268621ExecStartPre=/apps/nginx/sbin/nginx-tExecReload=/bin/kill-sHUP$MAINPIDWantedBy=multi-:驗(yàn)證Nginx?[root@s2[root@s2nginx-1.16.1]#systemctldaemon-reload[root@s2nginx-1.16.1]#systemctlstartnginx[root@s2nginx-1.16.1]#systemctlenablenginxCreatedsymlinkfrom/etc/systemd/system/multi-user.target.wants/nginx.service[root@s2nginx-1.16.1]#systemctl nginx.service-ThenginxHTTPandreverseproxyActive:active(running)sinceThu2019-10-2404:01:12CST;1min0sagoProcess:7853ExecStartPre=/apps/nginx/sbin/nginx-t(code=exited,MainPID:7858CGroup:├─7858nginx:masterprocess└─7859nginx:workerOct2404:01:12systemd[1]:StartingThenginxHTTPandreverseproxyserver...Oct2404:01:12systemd[1]:StartedThenginxHTTPandreverseproxyserver.:配置Nginx的配置?件的組成部分:主配置?件:nginx.conf,?配置?件includefastcgifastcgi,uwsgi,scgi等協(xié)議相關(guān)的配置?etl類(lèi)義。directivevalue[value2...];指令必須以分號(hào)結(jié)?持使?配內(nèi)建變量:由Nginx模塊引?,可直接引?定義變量:由??使?set命令定setvariable_name引?變量MIME參考?檔:\h/zh-:默認(rèn)配置?[root@s2[root@s2~]#grep-v"#"/apps/nginx/conf/nginx.conf|grep-vusernginxworker_processes #啟動(dòng)?作進(jìn)程s{哪。worker_connections #設(shè)置單個(gè)nginx?作進(jìn)程可以接受的最?并發(fā),作為web服務(wù)器的時(shí)p{。includee ;系內(nèi)盤(pán)lrt)。;server{#設(shè)置?個(gè)虛擬機(jī)主機(jī),可以包含??的全局快,同時(shí)也可以包含多個(gè)location模塊。?如本虛擬機(jī)監(jiān)聽(tīng)的端?、本虛擬機(jī)的名稱(chēng)和IP配置,多個(gè)server可以使??個(gè)端?,?如都使?80端?提供web服務(wù)、 ;n/{處。 html#相當(dāng)于默認(rèn)??的?錄名稱(chēng),默認(rèn)是相對(duì)路徑,可以使?絕對(duì)路徑配置。indexindex.htmlindex.htm;#默認(rèn)的???件名稱(chēng) 500502503504/50x.html#錯(cuò)誤??的?件名 html;#定義默認(rèn)??所在的?#mail{ mail協(xié)議相關(guān)配#stream{ stream服務(wù)器相關(guān)配#導(dǎo)?其他路徑的配置?#include三:Nginx核?配置詳解:全局配置worker_processes[number|auto]#啟動(dòng)Nginx?作進(jìn)程會(huì)與。[root@s2~]#psaxopid,cmd,psr,user|grepnginx4106nginx:masterprocess/apps 1root4181nginx:worker 04182nginx:worker 14184grep--color=auto 0#錯(cuò)誤?志記錄配置,語(yǔ)法:error_logfile[debug|info|notice|warn|error|crit|alert|emerg]#error_loglogs/error.log;#error_loglogs/error.lognotice;#pid?件保存路 ;worker_rlimit_nofile65536;#這個(gè)數(shù)字包括Nginx的所有連接(例如與代理服務(wù)器的連接等),?不僅僅是與[root@s2~]watchn1'psaxopid,cmd,nice|grepnginx驗(yàn);;;accept_mutexon;#優(yōu)化同?時(shí)刻只有?個(gè)請(qǐng)求?避免多個(gè)睡眠進(jìn)程被喚醒的設(shè)置,on為防?被同時(shí)喚醒默認(rèn)multi_accepton;Nginx服務(wù)器的每個(gè)?作進(jìn)程可以同時(shí)接受多個(gè)新的?絡(luò)連接,但是需要在配置?件中配:http詳細(xì)配置httphttp mime.types;#導(dǎo)??持的?#?志配置部'$remote_addr-$remote_user[$time_local]"$request"''$status$body_bytes_sent"$http_referer"''"$http_user_agent"logs/access.log#?定義優(yōu)on;#實(shí)現(xiàn)?件零拷 on;#在開(kāi)啟了sendfile的情況下,合并請(qǐng)求后統(tǒng)?發(fā)送給客?端 #keepalive_timeoutkeepalive_timeout6565#設(shè)置會(huì)話保持時(shí)間#gzipon;#開(kāi)啟?件壓縮server 80;#設(shè)置監(jiān)聽(tīng)地址和 www.magedu.*www.(site\d+)\.magedu\.com$default_server#access_loglogs/host.access.logmain;location/{ indexindex.html#error_page #redirectservererrorpagestothestaticpage/50x.html 500502503504/50x.html#定義錯(cuò)誤location=/50x.html{ #proxythePHPscriptstoApachelisteningon:80 \h#passthePHPscriptstoFastCGIserverlisteningon:9000 fastcgi_indexindex.php; fastcgi_paramSCRIPT_FILENAME/scripts$fastcgi_script_name; #denyaccessto.htaccessfiles,ifApache'sdocumentroot#concurswithnginx'sone denyall;location~/passwd.html{denyall;#anothervirtualhostusingmixofIP-,name-,andport-basedconfigurationsomenamealiaslocation #HTTPSserver 443ssl; server_namelocalhost; ssl_certificate_key ssl_session_timeout5m; ssl_ciphersHIGH:!aNULL:!MD5; location/ indexindex.htmlindex.htm; location/linux38/passwd.ht{denyall;:核?配置?基于不同的IP、不同的端?以及不?得域名實(shí)現(xiàn)不同的虛擬主機(jī),依賴于核?模塊ngx_http_core_module:新建?個(gè)PCweb[root@s2~][root@s2~]#mkdir/apps/nginx/conf/conf.dserver{listen\hlocation/{root[root@s2~]#echo"pcweb">/data/nginx/html/pc/index.html[root@s2~]#vim/apps/nginx/conf/nginx.confinclude[root@s2~]# reload:新建?個(gè)Mobileweb[root@s2[root@s2~]#cat/apps/nginx/conf/conf.d/mobile.confserver{listenlocation/{root[root@s2~]#mkdir/data/nginx/html/mobile-[root@s2~]#echo"mobileweb">>[root@s2~]# reload:root與server{listenserver{listen80;\hlocation/{rootlocation/aboutroot/data/nginx/html/pc;#必須要在html?錄中創(chuàng)建?個(gè)about?錄才可以訪問(wèn),否則報(bào)錯(cuò)index[root@s2~]#mkdir[root@s2~]#echoabout>重啟Nginx并訪問(wèn)alias:定義路徑別名,會(huì)把訪問(wèn)的路徑重新定義到其指定的路徑,如server{listenserver{listen80;\hlocation/{rootlocation/about{#使?alias的時(shí)候uri后?如果加了斜杠則下?的路徑配置必須加斜杠,否則index重啟Nginx并訪問(wèn)\h:location的詳細(xì)使?在沒(méi)有使?正則表達(dá)式的時(shí)候,nginx會(huì)先在server中的多個(gè)location選取匹配度最?的?個(gè)uri,uri是??請(qǐng)求的字符串,即域名后?的web?件路徑,然后使?該location模塊中的正則url和字符串,如果匹配成功就并使?此location處理此請(qǐng)求。語(yǔ)法語(yǔ)法規(guī)則location=|~|~*|^~/uri #?于標(biāo)準(zhǔn)uri前,需要請(qǐng)求字串與uri精確匹配,如果匹配成功就停?向下匹配并?即處理請(qǐng)求 #?于標(biāo)準(zhǔn)uri前,表?包含正則表達(dá)式并且區(qū)分??寫(xiě),并且匹!~#?于標(biāo)準(zhǔn)uri前,表?包含正則表達(dá)式并且區(qū)分??寫(xiě),并且不匹~*#?于標(biāo)準(zhǔn)uri前,表?包含正則表達(dá)式并且不區(qū)分?寫(xiě),并且匹!~*#?于標(biāo)準(zhǔn)uri前,表?包含正則表達(dá)式并且不區(qū)分??寫(xiě),并且不匹 #?于標(biāo)準(zhǔn)uri前,表?包含正則表達(dá)式并且匹配以什么結(jié) #?于標(biāo)準(zhǔn)uri前,表?包含正則表達(dá)式并且轉(zhuǎn)義字符??梢赞D(zhuǎn).*? #?于標(biāo)準(zhǔn)uri前,表?包含正則表達(dá)式并且代表任意?度的任意字:匹配案例-server{listen\hlocationlocation/rootlocation=/1.jpgindexindex.html;\h:匹配案例-區(qū)分??寫(xiě)如果uri中包含?寫(xiě)字?,組此條件不匹locationlocation~/A.?\.jpg{indexindex.html;root重啟Nginx并訪問(wèn)將只能訪問(wèn)以?寫(xiě)字符的AX.jpg圖?,不能識(shí)別?寫(xiě)的JPG結(jié)尾的圖\h:匹配案例-不區(qū)分??寫(xiě)對(duì)??請(qǐng)求的uri做模糊匹配,也就是uri中?論都是?寫(xiě)、都是?寫(xiě)或者??寫(xiě)混合,此模式也都會(huì)匹配,通常?此模式匹配??request中的靜態(tài)資源并繼續(xù)做下?步正則正則表達(dá)式匹#location~/A.?\.jpg{ indexindex.html; #}location~*/A.?\.jpg{indexindex.html;root\h#location~/aa.jpg{ index #}location~*/aa.jpg{indexindex.html;root。:匹配案例-URIlocationlocation^~/images{root/data/nginx;indexindex.html;location/images1indexindex.html;重啟Nginx并訪問(wèn)測(cè)試,實(shí)現(xiàn)效果是訪問(wèn)images和images1返回不同的[root@s2images]#curl\h/images/[root@s2images]#curl\h/images1/pcweb:匹配案例-?[root@s2[root@s2~]#mkdir#上傳?個(gè)和images?錄不?樣內(nèi)容的的圖?1.j到root/data/nginx/images1;index重啟Nginx并訪問(wèn):匹配案例-locationlocation~*/1.jpg{indexindex.html;rootindexindex.html;root匹配優(yōu)先級(jí):=,^~,?/?location優(yōu)先級(jí):(location=(location完整路徑(location^~路徑(location~,~*:?產(chǎn)使?案例直直接匹配?站根會(huì)加速Nginx訪問(wèn)處理location=/ location/ 靜態(tài)資源配置location^~/static/ location~*\.(gif|jpg|jpeg|png|css|js|ico)$ 多應(yīng)?配location~*/app1 location~*/app2 :Nginx四層訪問(wèn)控制訪問(wèn)控制基于模塊ngx_http_access_module實(shí)現(xiàn),可以通過(guò)匹配客?端源IP地址進(jìn)?限制locationlocation/aboutindexindex.html;deny;allow/16;;:Nginx賬?[root@s2[root@s2~]#yuminstallhttpd-tools-[root@s2~]#htpasswd-cbm/apps/nginx/conf/.htpasswduser1123456Addingpasswordforuseruser1[root@s2~]#htpasswd-bm/apps/nginx/conf/.htpasswduser2123456Addingpasswordforuseruser2[root@s2~]#vim/apps/nginx/conf/conf.d/pc.conflocation=/login/{indexindex.html; "loginpassword";重啟Nginx并訪問(wèn):?定義錯(cuò)誤??listenlisten\herror_page500502503504404/error.html;location=/error.html{ 重啟nginx并訪問(wèn)不存在的??進(jìn)?:?定義訪問(wèn)?志[root@s2[root@s2~]#mkdir/data/nginx/logslisten80;\herror_page500502503504404/error.html#默認(rèn)?錄下?創(chuàng)建error.htmlaccess_log/data/nginx/logs/www-magedu-net_access.log;error_log/data/nginx/logs/www-magedu-net_error.log;location=/error.html{ 重啟nginx并訪問(wèn)不存在的??進(jìn)?測(cè)試并驗(yàn)證是在指定?錄?成新的?志?:檢測(cè)?try_files會(huì)按順序檢查?件是否存在,返回第?個(gè)找到的?件或?件夾(結(jié)尾加斜線表?為?件夾),如果所有?件或?件夾都找不到,會(huì)進(jìn)??個(gè)內(nèi)部重定向到最后?個(gè)參數(shù)。只有最后?個(gè)參數(shù)可以引起?個(gè)內(nèi)部重定向,的參數(shù)只設(shè)置內(nèi)部URI的指向。最后?個(gè)參數(shù)是回退URI且必須存在,否則會(huì)出現(xiàn)內(nèi)部500錯(cuò)誤。locationlocation/aboutroot/data/nginx/html/pc;indexindex.html;#try_files$uritry_files$uri$uri/index.html$uri.html=489;[root@s2~]#echo"default">>\h[root@s2about]#curl--head\h/about/xx.htmlHTTP/1.1489#489就是?定義的狀態(tài)返回碼Server:Date:Thu,21Feb201900:11:40Content-Length:0:?連接配置keepalive_requestskeepalive_requestskeepalive_timeout65開(kāi)啟?連接后,返回客?端的會(huì)話保持時(shí)間為60s,單次?連接累計(jì)請(qǐng)求達(dá)到指定次數(shù)請(qǐng)求或65秒就會(huì)被斷開(kāi),如果設(shè)置為0表?關(guān)閉會(huì)話保持功能,將如下顯?[root@s3apps]#telnet\h80Trying02...\hEscapecharacteris'^]'.GET/HOST:\hHTTP/1.1200OKServer:Date:Thu,14Mar201917:23:46Content-Length:7Last-Modified:Thu,14Mar201914:54:50GMTConnection:keep-aliveETag:"5c8a6b3a-7"Accept-Ranges:bytespcweb:作為下載服務(wù)器配置[root@s2about]#mkdir/data/nginx/html/pc/download[root@s2about]#mkdir/data/nginx/html/pc/downloadlocation/download{autoindex #?動(dòng)索引功 on;#計(jì)算?件確切??(單位bytes),off只顯??概??(單位kb、mb on;#顯?本機(jī)時(shí)間??GMT(格林威治)root[root@s2pc]#cp/root/anaconda-ks.cfglimit_raterate;#限制響應(yīng)給客?端的傳輸速率,單位是bytes/second,默認(rèn)值0表??限制:作為上client_body_buffer_sizesize; :[root@s3~]#md5sum/data/nginx/html/pc/index.html95f6f65f498c74938064851b1bb963d4/data/nginx/html/pc/index.html1級(jí)?錄占1位16進(jìn)制,即2^4=16個(gè)?錄0-2級(jí)?錄占2位16進(jìn)制,即2^8=256個(gè)?錄00-3級(jí)?錄占2位16進(jìn)制,即2^8=256個(gè)?錄00-配置?client_max_body_sizeclient_body_buffer_size /apps/nginx/temp122#reloadNginx會(huì)?動(dòng)創(chuàng)建temp?:其他配置keepalive_disablenone|browser...;keepalive_disablenone|browser...;limit_exceptmethod,僅?于限制客?端使?除了指定的請(qǐng)求?法之外的其它?method:GET,HEAD,POST,PUT,DELETE,MKCOL,COPY,MOVE,OPTIONS,PROPPATCH,LOCK,UNLOCK,limit_exceptGETallow01;deny#除了GET和HEAD之外其它?法僅允許/24?段主機(jī)使[root@s2about]#mkdir[root@s2about]#vim/apps/nginx/conf/conf.d/pc.conflocation/upload{indexindex.html;limit_exceptGET{allowdeny#重啟Nginx并進(jìn)?測(cè)試上傳?[root@s2pc]#systemctlrestartnginx[root@s2pc]#[root@s2pc]#curl-XPUT/etc/issue\h/aboutcurl:(3)<url>malformed<body[root@s1~]#curl-XPUT/etc/issue\h/uploadcurl:(3)<url>malformed<head><title>403Forbidden</title></head>#Nginx拒絕上<body<center><h1>403aioaioon|off#是否啟?asynchronousfileI/O(AIO)功能,需要編譯開(kāi)啟1、SYS_io_setup:建?aio的context為關(guān)閉,當(dāng)?件?于等于給定??時(shí),例如directio4m,同步(直接)寫(xiě)磁盤(pán),??寫(xiě)緩存。open_file_cachemax=N[inactive=time];max=N:可緩存的緩存項(xiàng)上限數(shù)量;達(dá)到上限后會(huì)使?LRU(Leastrecentlyused,最近最少使?)管open_file_cache_errorsonopen_file_cache_errorson|open_file_cache_min_uses1open_file_cache_valid緩存項(xiàng)有效性的檢查驗(yàn)證頻率,默認(rèn)值為 on;#緩存錯(cuò)誤信息server_tokensoff;#隱藏Nginxserver版本四:Nginx?級(jí)配置:Nginx狀態(tài)?配配置?location/nginx_status{allow;denyall;serverserveracceptshandledrequests1663094816630948Reading:6Writing:179Waiting:Activeconnections:當(dāng)前處于活動(dòng)狀態(tài)的客?端連接數(shù),包括連接等待空閑連接數(shù)Waiting:當(dāng)前狀態(tài),正在等待客?端發(fā)出請(qǐng)求的空閑連接數(shù),開(kāi)啟keep-alive的情況下,這個(gè)值等于active:Nginx第三?第三模塊是對(duì)nginx的功能擴(kuò)展,第三?模塊需要在編譯安裝Nginx的時(shí)候使?參數(shù)--add-module=TH添加,有的模塊是由公司的開(kāi)發(fā)?員針對(duì)業(yè)務(wù)需求定制開(kāi)發(fā)的,有的模塊是開(kāi)源愛(ài)好者開(kāi)發(fā)好之后上傳到github進(jìn)\h?開(kāi)源的模塊,nginx?持第三?模塊需要從源碼重新編譯?持,?如開(kāi)源的echo模塊\hesty/echo-nginx-[root@s2[root@s2pc]#systemctlstoplocation/main{indexindex.html;default_typetext/html;echo_location/sub1;echo_location/sub2;echo"took$echo_timer_elapsedsecforlocation/sub1{echosub1;location/sub2{echosub2;#解決以上報(bào)[root@s2src]#yuminstallgit-[root@s2src]#cdnginx-1.12.2/[root@s2src]#./configure--prefix--prefix=/apps/nginx--user=nginx--group=nginx--with-http_ssl_module--with-http_v2_module--with-http_realip_module--with-http_stub_status_module--with-http_gzip_static_module--with-stream--with-stream_ssl_module--with-stream_realip_module--with-http_perl_module[root@s2src]#make&&makeinstallnginx:theconfigurationfile/apps/nginx/conf/nginx.confsyntaxisoknginx:configurationfile/apps/nginx/conf/nginx.conftestissuccessful[root@s2pc]#systemctlrestartnginx[root@s2pc]#curl\h/mainhelloworld,main-->took2.010secfor:Nginx變量使?nginx的變量可以在配置?件中引?,作為功能判斷或者?志等場(chǎng)景使?,變量可以分為內(nèi)置變量和?定義變量?jī)?nèi)置變量是由nginx模塊?帶,通過(guò)變量可以獲取到眾多的與客?端訪問(wèn)相關(guān)的值。:內(nèi)置#存放了#存放了客?端的地址,注意是客?端的公?IP,也就是?家?訪問(wèn)?個(gè)?站,則會(huì)顯?為路由器的公?IP#變量中存放了URL中的指令,例如\h中的#保存了針對(duì)當(dāng)前資源的請(qǐng)求的系統(tǒng)根?錄,如/apps/nginx/html\hid=20190221&partner=search會(huì)被定義為/main/index.do。#存放了請(qǐng)求的host名稱(chēng)#客?端的cookie信息echo#如果nginx服務(wù)器使?limit_rate配置了顯??絡(luò)速率,則會(huì)顯?,如果沒(méi)有設(shè)置,則顯?0#客?端請(qǐng)求Nginx服務(wù)器時(shí)隨機(jī)打開(kāi)的端?,這是每個(gè)客?端??的端?#做反向代理時(shí)發(fā)給后端服務(wù)器的本地資源的名稱(chēng)#請(qǐng)求資源的?式,GET/PUT/DELETE#請(qǐng)求的協(xié)議,如ftp,https,http等#保存了客?端請(qǐng)求資源使?的協(xié)議的版本,如HTTP/1.0,HTTP/1.1,HTTP/2.0等#保存了服務(wù)器的IP地址#請(qǐng)求的服務(wù)器的主機(jī)名#請(qǐng)求的服務(wù)器的端?號(hào):?定義假如需要?定義變量名稱(chēng)和值,使?指令set$variablevalue;,則?法如下:Syntax:set$variablevalue;Default:—Context:server,location,ifsetset$namemagedu;echo$name;echo$my_port;echo:Nginx?定義訪問(wèn)?志訪問(wèn)?志是記錄客?端即??的具體請(qǐng)求內(nèi)容信息,全局配置模塊中的eror_log是記錄nginx服務(wù)器運(yùn)?時(shí)的?志保存路徑和記錄?志的lvel,因此有著本質(zhì)的區(qū)別,?且Nginx的錯(cuò)誤?志?般只有?個(gè),但是訪問(wèn)?志可以在同server中定義多個(gè),定義?個(gè)?志需要使?access_log指定?志的保存路徑,使?log_format指定?志的格式中定義要保存的具體?志內(nèi)容。:?定義默認(rèn)格式?志如果是要保留?志的源格式,只是添加相應(yīng)的?志內(nèi)容,則配置如下log_formatlog_formatnginx_format1'$remote_addr-$remote_user[$time_local]"$request"''$status$body_bytes_sent"$http_referer"''"$http_user_agent""$http_x_forwarded_for"'access_loglogs/access.log#重啟nginx并訪問(wèn)測(cè)試?志==>/apps/nginx/logs/access.log--[22/Feb/2019:08:44:14+0800]"GET/favicon.icoHTTP/1.1"404162"-"Mozilla/5.0(WindowsNT6.1;Win64;x64;rv:65.0)Gecko/20100101Firefox/65.0""-"\h:80:?定義json格式?志Nginx的默認(rèn)訪問(wèn)?志記錄內(nèi)容相對(duì)?較單?,默認(rèn)的格式也不?便后期做?志統(tǒng)計(jì)分析,?產(chǎn)環(huán)境中通nginx?志轉(zhuǎn)換為json?志,然后配合使?ELK做?志收集-統(tǒng)計(jì)-分access_log/apps/nginx/logs/access_json.log\h\hx64;rv:65.0)Gecko/20100101Firefox/65.0","status":"404"}:json格式的?志訪問(wèn)#Author:ZhangShiJiestatus_200=[]status_404=[]withopen("access_json.log")asf:forlineinf.readlines():line=ifline.get("status")=="200":elifline.get("status")=="404":[root@s2~]#pythonnginx_json.py狀態(tài)碼200的有--:狀態(tài)碼404的有--::Nginx壓縮Nginx?持對(duì)指定類(lèi)型的?件進(jìn)?壓縮然后再傳輸給客?端,?且壓縮還可以設(shè)置壓縮?例,壓縮后的?件?源?件顯著變?,這樣有助于降低出?帶寬的利?率,降低企業(yè)的IT?出,不過(guò)會(huì)占?相應(yīng)的CPU資\hhttp_gzip_module.html置指令如下:gzipon|off;gzip_comp_levellevel;#禁?IE6gzip功能gzip_disable"MSIE[1-6]\.";gzip_min_length1k;gzip_http_version1.0|1.1;#指定Nginx服務(wù)需要向服務(wù)器申請(qǐng)的緩存空間的個(gè)數(shù)*??,默認(rèn)324k|168k;gzip_buffersnumbersize;#指明僅對(duì)哪些類(lèi)型的資源執(zhí)?壓縮操作;默認(rèn)為gzip_typestext/html,不?顯?指定,否則出錯(cuò)gzip_typesmime-type...;#如果啟?壓縮,是否在響應(yīng)報(bào)??部插?“Vary:Accept-Encoding”gzip_varyon|off;[root@s2pc]#cp/apps/nginx/logs/access.log/data/nginx/html/pc/test.html[root@s2pc]echo"test1/data/nginx/html/pc/test1.html?于1k的?件測(cè)試是否會(huì)壓

溫馨提示

  • 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)論