nginx原理了解

nginx原理了解

1乏悄、什么是nginx?

Nginx 是一款自由的、開源的陕凹、高性能的HTTP服務(wù)器和反向代理服務(wù)器悍抑;同時(shí)也是一個(gè)IMAP、POP3杜耙、SMTP代理服務(wù)器搜骡;Nginx可以作為一個(gè)HTTP服務(wù)器進(jìn)行網(wǎng)站的發(fā)布處理,另外Nginx可以作為反向代理進(jìn)行負(fù)載均衡的實(shí)現(xiàn)佑女。

1.1记靡、Nginx三個(gè)主要應(yīng)用場(chǎng)

  • 1谈竿、靜態(tài)資源服務(wù)(通過本地文件系統(tǒng)提供服務(wù))

  • 2、緩存摸吠、負(fù)載均衡服務(wù)器

  • 3榕订、API服務(wù)(OpenResty)

5.jpg

2、為什么選擇nginx?

(1)更快

????這表現(xiàn)在兩個(gè)方面:一方面蜕便,在正常情況下,單次請(qǐng)求會(huì)得到更快的響應(yīng)贩幻;另一方面轿腺,
在高峰期(如有數(shù)以萬計(jì)的并發(fā)請(qǐng)求),Nginx可以比其他Web服務(wù)器更快地響應(yīng)請(qǐng)求丛楚。
實(shí)際上族壳,

(2)高擴(kuò)展性

????Nginx的設(shè)計(jì)極具擴(kuò)展性,它完全是由多個(gè)不同功能趣些、不同層次仿荆、不同類型且耦合度極
低的模塊組成。因此坏平,當(dāng)對(duì)某一個(gè)模塊修復(fù) Bug 或進(jìn)行升級(jí)時(shí)拢操,可以專注于模塊自身,無須
在意其他舶替。
而且在HTTP模塊中令境,還設(shè)計(jì)了HTTP過濾器模塊:一個(gè)正常的HTTP模塊在處理
完請(qǐng)求后,會(huì)有一串HTTP過濾器模塊對(duì)請(qǐng)求的結(jié)果進(jìn)行再處理顾瞪。
這樣舔庶,當(dāng)我們開發(fā)一個(gè)新的HTTP模塊時(shí),不但可以使用諸如 HTTP核心模塊陈醒、events模塊惕橙、log模塊 等不同層次或者不同類型的模塊,還可以原封不動(dòng)地復(fù)用大量已有的HTTP過濾器模塊钉跷。
這種低耦合度的優(yōu)秀設(shè)計(jì)弥鹦,造就了Nginx龐大的第三方模塊,當(dāng)然爷辙,公開的第三方模塊也如官方發(fā)布的模塊一樣容易使用惶凝。

Nginx的模塊都是嵌入到二進(jìn)制文件中執(zhí)行的,無論官方發(fā)布的模塊還是第三方模塊都
是如此犬钢。這使得第三方模塊一樣具備極其優(yōu)秀的性能苍鲜,充分利用Nginx的高并發(fā)特性,因
此玷犹,許多高流量的網(wǎng)站都傾向于開發(fā)符合自己業(yè)務(wù)特性的定制模塊混滔。

(3)高可靠

????高可靠性是我們選擇Nginx的最基本條件洒疚,因?yàn)?code>Nginx的可靠性是大家有目共睹的,很多家高流量網(wǎng)站都在核心服務(wù)器上大規(guī)模使用Nginx坯屿。Nginx的高可靠性來自于其核心框架代碼的優(yōu)秀設(shè)計(jì)油湖、模塊設(shè)計(jì)的簡(jiǎn)單性;另外领跛,官方提供的常用模塊都非常穩(wěn)定乏德,每個(gè)worker進(jìn)程相對(duì)獨(dú)立,master進(jìn)程在1個(gè)worker進(jìn)程出錯(cuò)時(shí)可以快速“拉起”新的worker子進(jìn)程提供服務(wù)吠昭。

(4)低內(nèi)存消耗

????一般情況下喊括,10000個(gè)非活躍的HTTP Keep-Alive連接在Nginx中僅消耗2.5MB的內(nèi)存,這是Nginx支持高并發(fā)連接的基礎(chǔ)矢棚。

(5)單機(jī)支持10萬以上的并發(fā)連接

????這是一個(gè)非常重要的特性郑什!隨著互聯(lián)網(wǎng)的迅猛發(fā)展和互聯(lián)網(wǎng)用戶數(shù)量的成倍增長(zhǎng),各大公司蒲肋、網(wǎng)站都需要應(yīng)付海量并發(fā)請(qǐng)求蘑拯,一個(gè)能夠在峰值期頂住10萬以上并發(fā)請(qǐng)求的 Server,
無疑會(huì)得到大家的青睞兜粘。理論上申窘,Nginx支持的并發(fā)連接上限取決于內(nèi)存,當(dāng)然孔轴,能夠及時(shí)地處理更多的并發(fā)請(qǐng)求偶洋,是與業(yè)務(wù)特點(diǎn)緊密相關(guān)的

(6)熱部署

????master管理進(jìn)程與worker工作進(jìn)程的分離設(shè)計(jì),使得worker能夠提供熱部署功能距糖,即可以在7×24小時(shí)不間斷服務(wù)的前提下玄窝,升級(jí)worker的可執(zhí)行文件。當(dāng)然悍引,它也支持不停止服務(wù)就更新配置項(xiàng)恩脂、更換日志文件等功能。

(7)最自由的BSD許可協(xié)議

????這是worker可以快速發(fā)展的強(qiáng)大動(dòng)力趣斤。BSD許可協(xié)議不只是允許用戶免費(fèi)使用worker俩块,它還允許用戶在自己的項(xiàng)目中直接使用或修改worker源碼,然后發(fā)布浓领。這吸引了無數(shù)開發(fā)者繼續(xù)為worker貢獻(xiàn)自己的智慧玉凯。

3、Nginx相關(guān)的開源版本

????1联贩、阿里巴巴Tengine
Tengine是由淘寶網(wǎng)發(fā)起的Web服務(wù)器項(xiàng)目漫仆。它在Nginx的基礎(chǔ)上,針對(duì)大訪問量網(wǎng)站的需求泪幌,添加了很多高級(jí)功能和特性盲厌。

????2署照、openresty
OpenResty? 是一個(gè)基于 Nginx 與 Lua 的高性能 Web 平臺(tái),其內(nèi)部集成了大量精良的 Lua 庫吗浩、第三方模塊以及大多數(shù)的依賴項(xiàng)建芙。用于方便地搭建能夠處理超高并發(fā)、擴(kuò)展性極高的動(dòng)態(tài) Web 應(yīng)用懂扼、Web 服務(wù)和動(dòng)態(tài)網(wǎng)關(guān)禁荸。

3、Nginx高效的原因及原理解析

前面已經(jīng)大概了解了worker阀湿,接下來我們要了解下worker的基本架構(gòu)赶熟。

3.1、服務(wù)器的網(wǎng)絡(luò)服務(wù)模型

web服務(wù)器和客戶端是一對(duì)多的關(guān)系炕倘,Web服務(wù)器必須有能力同時(shí)為多個(gè)客戶端提供服務(wù)。一般來說完成并行處理請(qǐng)求工作有三種方式

1翰撑、單進(jìn)程阻塞的網(wǎng)絡(luò)服務(wù)器

1.jpg

???? ????
2.jpg

說明:

   1罩旋、創(chuàng)建一個(gè)socket,綁定服務(wù)器端口(bind)眶诈,監(jiān)聽端口(listen)涨醋,在PHP中用stream_socket_server一個(gè)函數(shù)就能完成上面3個(gè)步驟
   2、進(jìn)入while循環(huán)逝撬,阻塞在accept操作上浴骂,等待客戶端連接進(jìn)入。此時(shí)程序會(huì)進(jìn)入睡眠狀態(tài)宪潮,直到有新的客戶端發(fā)起connect到服務(wù)器溯警,操作系統(tǒng)會(huì)喚醒此進(jìn)程。accept函數(shù)返回客戶端連接的socket
   3狡相、利用fread讀取客戶端socket當(dāng)中的數(shù)據(jù)收到數(shù)據(jù)后服務(wù)器程序進(jìn)行處理然后使用fwrite向客戶端發(fā)送響應(yīng)梯轻。長(zhǎng)連接的服務(wù)會(huì)持續(xù)與客戶端交互,而短連接服務(wù)一般收到響應(yīng)就會(huì)close尽棕。

缺點(diǎn):
一次只能處理一個(gè)連接喳挑,不支持多個(gè)長(zhǎng)連接同時(shí)處理

2、多進(jìn)程方式

多進(jìn)程方式指滔悉,服務(wù)器每當(dāng)收到一個(gè)客戶端請(qǐng)求時(shí)伊诵,就有服務(wù)器主進(jìn)程生成一個(gè)子進(jìn)程出來和客戶端建立連接進(jìn)行交互,直到連接斷開該子進(jìn)程就結(jié)束了回官。

7.jpg

說明:

前面流程一致就不補(bǔ)充了

1曹宴、程序啟動(dòng)后就會(huì)創(chuàng)建N個(gè)進(jìn)程。每個(gè)子進(jìn)程進(jìn)入 Accept歉提,等待新的連接進(jìn)入浙炼。當(dāng)客戶端連接到服務(wù)器時(shí)份氧,其中一個(gè)子進(jìn)程會(huì)被喚醒,開始處理客戶端請(qǐng)求弯屈,并且不再接受新的TCP連接蜗帜。
當(dāng)此連接關(guān)閉時(shí),子進(jìn)程會(huì)釋放资厉,重新進(jìn)入 Accept厅缺,參與處理新的連接。

這個(gè)模型的優(yōu)勢(shì)是完全可以復(fù)用進(jìn)程宴偿,不需要太多的上下文切換湘捎,比如php-fpm基于此模型來處理解析php

多進(jìn)程方式的優(yōu)點(diǎn)是設(shè)計(jì)簡(jiǎn)單,各個(gè)子進(jìn)程相對(duì)獨(dú)立窄刘,處理客戶端請(qǐng)求時(shí)彼此不受干擾窥妇;

缺點(diǎn)是操作系統(tǒng)生成一個(gè)子進(jìn)程需要進(jìn)行內(nèi)存復(fù)制等操作,在資源和時(shí)間上會(huì)產(chǎn)生一定的開銷娩践;當(dāng)有大量請(qǐng)求時(shí)活翩,會(huì)導(dǎo)致系統(tǒng)性能下降;

例如:即時(shí)聊天程序翻伺,一臺(tái)服務(wù)器可能要維持?jǐn)?shù)十萬的連接材泄,那么就要啟動(dòng)數(shù)十萬的進(jìn)程來維持。這顯然不可能

2吨岭、多線程方式

多線程方式指每當(dāng)服務(wù)器接收到一個(gè)請(qǐng)求后拉宗,會(huì)由服務(wù)器主進(jìn)程派生出一個(gè)線程出來和客戶端進(jìn)行交互。由于操作系統(tǒng)產(chǎn)生出一個(gè)線程的開銷遠(yuǎn)遠(yuǎn)小于一個(gè)進(jìn)程的開銷辣辫。故多線程方式在很大程度上減輕了Web服務(wù)器對(duì)系統(tǒng)資源的要求旦事。

缺點(diǎn):穩(wěn)定性!假設(shè)某個(gè)進(jìn)程突然關(guān)閉會(huì)造成整個(gè)進(jìn)程中的所有線程都崩潰急灭。

基于上面的模式我們發(fā)現(xiàn)單個(gè)進(jìn)程每次只能通過每次(accept)處理單個(gè)請(qǐng)求族檬,沒辦法一次性連接多個(gè)請(qǐng)求,需要的時(shí)候再處理呢化戳?

3单料、單進(jìn)程IO復(fù)用方

10.jpg

說明:

    1、保存所有的socket,通過select模型点楼,監(jiān)聽socket描述符的可讀事件

    2扫尖、Select會(huì)在內(nèi)核空間監(jiān)聽一旦發(fā)現(xiàn)socket可讀,會(huì)從內(nèi)核空間傳遞至用戶空間掠廓,在用戶空間通過邏輯判斷是服務(wù)端socket可讀换怖,還是客戶端的socket可讀

    3、如果是服務(wù)端的socket可讀蟀瞧,說明有新的客戶端建立沉颂,將socket保留到監(jiān)聽數(shù)組當(dāng)中

    4条摸、如果是客戶端的socket可讀,說明當(dāng)前已經(jīng)可以去讀取客戶端發(fā)送過來的內(nèi)容了铸屉,通過fread讀取socket內(nèi)容钉蒲,然后fwrite響應(yīng)給客戶端。

  • 優(yōu)點(diǎn):性能最好彻坛!一個(gè)進(jìn)程或線程處理多個(gè)請(qǐng)求顷啼,不需要額外開銷,性能最好昌屉,資源占用最低钙蒙。

  • 缺點(diǎn):穩(wěn)定性!某個(gè)進(jìn)程或線程出錯(cuò)间驮,可能導(dǎo)致大量請(qǐng)求無法處理躬厌,甚至導(dǎo)致整個(gè)服務(wù)宕機(jī),單進(jìn)程對(duì)于大量任務(wù)處理乏力

4.多進(jìn)程的master-workerIO復(fù)用方式

?? 4.1、nginx的基本架構(gòu)

4.jpg
1.Nginx啟動(dòng)后竞帽,會(huì)產(chǎn)生一個(gè)主進(jìn)程扛施,主進(jìn)程執(zhí)行一系列的工作后會(huì)產(chǎn)生一個(gè)或者多個(gè)工作進(jìn)程

2.在客戶端請(qǐng)求動(dòng)態(tài)站點(diǎn)的過程中,Nginx服務(wù)器還涉及和后端服務(wù)器的通信抢呆。Nginx將接收到的Web請(qǐng)求通過代理轉(zhuǎn)發(fā)到后端服務(wù)器煮嫌,由后端服務(wù)器進(jìn)行數(shù)據(jù)處理和組織笛谦;

3.Nginx為了提高對(duì)請(qǐng)求的響應(yīng)效率抱虐,降低網(wǎng)絡(luò)壓力,采用了緩存機(jī)制饥脑,將歷史應(yīng)答數(shù)據(jù)緩存到本地恳邀。保障對(duì)緩存文件的快速訪問

master進(jìn)程主要用來管理worker進(jìn)程,具體包括以下主要功能:

(1)接收來自外界的信號(hào)灶轰。
(2)處理配置文件讀取谣沸。
(3)創(chuàng)建,綁定和關(guān)閉套接字
(4)啟動(dòng)笋颤,終止和維護(hù)配置的工作(worker)進(jìn)程數(shù)
(5)當(dāng)woker進(jìn)程退出后(異常情況下)乳附,會(huì)自動(dòng)重新啟動(dòng)新的woker進(jìn)程。
6.jpg

worker進(jìn)程的主要任務(wù)是完成具體的任務(wù)邏輯伴澄。其主要關(guān)注點(diǎn)是與客戶端或后端真實(shí)服務(wù)器(此時(shí)worker作為中間代理)之間的數(shù)據(jù)可讀/可寫等I/O交互事件赋除。

(1)接收客戶端請(qǐng)求汹忠;
(2)將請(qǐng)求一次送入各個(gè)功能模塊進(jìn)行過濾處理婉刀;
(3)與后端服務(wù)器通信,接收后端服務(wù)器處理結(jié)果腌且;
(4)數(shù)據(jù)緩存
(5)響應(yīng)客戶端請(qǐng)求
案例:實(shí)現(xiàn)一個(gè)簡(jiǎn)單的php多進(jìn)程版本的nginx
1敞嗡、能夠接收http請(qǐng)求
2颁糟、能夠響應(yīng)http
3航背、能夠接收多個(gè)客戶端長(zhǎng)連接請(qǐng)求
安裝pcntl模塊
http://cn2.php.net/distributions/php-7.1.14.tar.xz
tar xf php-7.1.14.tar.xz
cd php-7.1.14
cd ext/pcntl
phpize
./configure --with-php-config=/usr/bin/php-config
make
make install
echo "extension=pcntl.so" >> /etc/php.ini

從上面的代碼當(dāng)中我們發(fā)現(xiàn),如果是多進(jìn)程的模式棱貌,也就意味著我們需要大量的進(jìn)程玖媚,才能支持更多的連接請(qǐng)求,那么有沒有一種技術(shù)可以在一個(gè)進(jìn)程內(nèi)處理所有并發(fā)IO呢键畴?答案是有最盅,這就是IO復(fù)用技術(shù)。

4起惕、IO復(fù)用/EventLoop

? 1涡贱、IO復(fù)用是什么

????IO多路復(fù)用是指內(nèi)核一旦發(fā)現(xiàn)進(jìn)程指定的一個(gè)或者多個(gè)IO條件準(zhǔn)備讀取,它就通知該進(jìn)程惹想,目前支持I/O多路復(fù)用的系統(tǒng)調(diào)用有 select问词,pollepoll嘀粱,I/O多路復(fù)用就是通過一種機(jī)制激挪,一個(gè)進(jìn)程可以監(jiān)視多個(gè)描述符(socket),一旦某個(gè)描述符就緒(一般是讀就緒或者寫就緒)锋叨,能夠通知程序進(jìn)行相應(yīng)的讀寫操作垄分。

? 2、select跟poll

Select介紹

????監(jiān)視并等待多個(gè)文件描述符的屬性變化(可讀娃磺、可寫或錯(cuò)誤異常)薄湿。select函數(shù)監(jiān)視的文件描述符分 3 類,分別是writefds偷卧、readfds豺瘤、和 exceptfds。調(diào)用后 select會(huì)阻塞听诸,直到有描述符就緒(有數(shù)據(jù)可讀坐求、可寫、或者有錯(cuò)誤異常)晌梨,或者超時(shí)( timeout 指定等待時(shí)間)桥嗤,函數(shù)才返回。當(dāng) select()函數(shù)返回后仔蝌,可以通過遍歷 fdset泛领,來找到就緒的描述符,并且描述符最大不能超過1024

Poll 介紹:

????poll的機(jī)制與select類似掌逛,與select在本質(zhì)上沒有多大差別师逸,管理多個(gè)描述符也是進(jìn)行輪詢,根據(jù)描述符的狀態(tài)進(jìn)行處理,但是poll沒有最大文件描述符數(shù)量的限制篓像。pollselect同樣存在一個(gè)缺點(diǎn)就是动知,包含大量文件描述符的數(shù)組被整體復(fù)制于用戶態(tài)和內(nèi)核的地址空間之間,而不論這些文件描述符是否就緒员辩,它的開銷隨著文件描述符數(shù)量的增加而線性增大盒粮。

問題:

????select/poll 問題很明顯,它們需要循環(huán)檢測(cè)連接是否有事件奠滑。如果服務(wù)器有上百萬個(gè)連接丹皱,在某一時(shí)間只有一個(gè)連接向服務(wù)器發(fā)送了數(shù)據(jù),select/poll 需要做循環(huán)100萬次宋税,其中只有1次是命中的摊崭,剩下的99萬9999次都是無效的,白白浪費(fèi)了CPU資源杰赛。

epoll

????epoll 是在2.6內(nèi)核中提出的呢簸,是之前的 pollpoll 的增強(qiáng)版本。相對(duì)于 selectpoll 來說乏屯,epoll 更加靈活根时,沒有描述符限制,無需輪詢。epoll使用一個(gè)文件描述符管理多個(gè)描述符辰晕,將用戶關(guān)系的文件描述符的事件存放到內(nèi)核的一個(gè)事件表中蛤迎。

簡(jiǎn)單點(diǎn)來說就是當(dāng)連接有I/O流事件產(chǎn)生的時(shí)候,epoll就會(huì)去告訴進(jìn)程哪個(gè)連接有I/O流事件產(chǎn)生含友,然后進(jìn)程就去處理這個(gè)進(jìn)程替裆。

這里可以多加一個(gè)選擇worker的原因,因?yàn)?code>worker是基于epoll的異步非阻塞的服務(wù)器程序唱较。自然扎唾,worker能夠輕松處理10w+的并發(fā)連接召川,也就無可厚非了南缓。

實(shí)例

那么我們也可以基于 epoll ,實(shí)現(xiàn) IO復(fù)用異步非阻塞(eventloop或者叫Reactor),Event 是核心荧呐,Loop 是機(jī)制汉形,Loop 可以用 select|poll|epoll中的任意方式實(shí)現(xiàn)。

IO復(fù)用異步非阻塞程序使用經(jīng)典的Reactor模型倍阐,Reactor顧名思義就是反應(yīng)堆的意思概疆,它本身不處理任何數(shù)據(jù)收發(fā)。只是可以監(jiān)視一個(gè)socket(也可以是管道峰搪、eventfd岔冀、信號(hào))句柄的事件變化。

注:什么是句柄概耻?句柄英文為handler使套,可以形象的比喻為鍋柄罐呼、勺柄。也就是資源的唯一標(biāo)識(shí)符侦高、資源的ID嫉柴。通過這個(gè)ID可以操作資源。

php要使用epoll機(jī)制需要安裝libevent依賴奉呛,或者是swoole當(dāng)中的event機(jī)制计螺,從使用角度上看swoole的event更加簡(jiǎn)單,這里編譯下swoole擴(kuò)展

安裝event依賴:

Swoole安裝方式跟普通擴(kuò)展安裝方式是一樣的瞧壮,下載解壓登馒、編譯

    wget  https://pecl.php.net/get/swoole-4.4.4.tgz
    tar -zxf swoole-4.4.4.tgz
    phpize
    ./configure
    make
    make install

五、進(jìn)程相

1咆槽、fork函

??fork函數(shù)將創(chuàng)建調(diào)用的進(jìn)程副本谊娇,并非根據(jù)完全不同的程序創(chuàng)建進(jìn)程,而是復(fù)制正在運(yùn)行的罗晕、調(diào)用fork函數(shù)的進(jìn)程济欢,但因?yàn)橥ㄟ^同一個(gè)進(jìn)程、復(fù)制相同的內(nèi)存空間小渊,之后需要根據(jù)返回值加以區(qū)分:

  父進(jìn)程空間:fork函數(shù)會(huì)返回子進(jìn)程id
  子進(jìn)程空間:fork函數(shù)返回0
  如果小于0法褥,說明進(jìn)程創(chuàng)建失敗

2、處理僵尸進(jìn)程

     對(duì)于多進(jìn)程程序而言酬屉,父進(jìn)程一般需要跟蹤子進(jìn)程的退出狀態(tài)半等。因此,當(dāng)子進(jìn)程結(jié)束運(yùn)行時(shí)呐萨,內(nèi)核不會(huì)立即釋放該進(jìn)程的進(jìn)程表表項(xiàng)杀饵,以滿足父進(jìn)程后續(xù)對(duì)該子進(jìn)程退出信息的查詢 (如果父進(jìn)程還在運(yùn)行)。
     在子進(jìn)程結(jié)束運(yùn)行之后谬擦,父進(jìn)程讀取其退出狀態(tài)之前切距,我們稱該子進(jìn)程處于俚尸態(tài),另外一種使子進(jìn)程進(jìn)人僵尸狀態(tài)是:父進(jìn)程結(jié)束或者異常終止惨远,而子進(jìn)程繼續(xù)運(yùn)行谜悟。
     由此可見,無論哪種情況北秽,如果父進(jìn)程沒有正確地處理子進(jìn)程的返冋信息葡幸,子進(jìn)程都將停留在僵尸態(tài),并占據(jù)若內(nèi)核資源.這是絕對(duì)不能容許的贺氓,畢競(jìng)內(nèi)核資源有限蔚叨,所以我們需要做的就是在父進(jìn)程中調(diào)用wait函數(shù)等待查詢子進(jìn)程的信息,回收子進(jìn)程。

六蔑水、nginx操作

6.1 nginx快速編譯安裝

yum -y install pcre pcre-devel zlib zlib-devel openssl openssl-devel

wget  http://nginx.org/download/nginx-1.14.1.tar.gz
tar -zxvf nginx-1.14.1.tar.gz
 ./configure --prefix=/usr/local/nginx \
  --with-http_stub_status_module \
  --with-http_gzip_static_module\
  --with-http_realip_module\
  --with-http_sub_module \
  --with-http_ssl_module\
  --with-http_realip_module \
  --with-http_sub_module \
  --with-http_gunzip_module\
  --with-http_gzip_static_module\
  --with-http_auth_request_module\
  --with-http_random_index_module  \
  --with-http_slice_module \
  --with-http_stub_status_module

make && make install

查看加載的模塊及版本信息

nginx -V

6.2 配置文件解釋

main(全局設(shè)置)悄泥,main部分設(shè)置的指令將影響其它所有部分的設(shè)置;

http(http服務(wù)器設(shè)置)肤粱,http標(biāo)準(zhǔn)核心模塊弹囚,http服務(wù)的相應(yīng)配置

server(主機(jī)設(shè)置)

接收請(qǐng)求的服務(wù)器需要將不同的請(qǐng)求按規(guī)則轉(zhuǎn)發(fā)到不同的后端服務(wù)器上,在 nginx 中我們可以通過構(gòu)建虛擬主機(jī)(server)的概念來將這些不同的服務(wù)配置隔離

location(URL匹配特定位置后的設(shè)置)领曼,location部分用于匹配網(wǎng)頁位置(比如鸥鹉,根目錄“/”,“/images”,等等),server 是對(duì)應(yīng)一個(gè)域名進(jìn)行的配置,而 location 是在一個(gè)域名下對(duì)更精細(xì)的路徑進(jìn)行配置.
[圖片上傳失敗...(image-e31ade-1571366341547)]

詳細(xì)解析

配置語法說明:

1庶骄、配置文件由指令與指令塊構(gòu)成
2毁渗、每條指令以;分號(hào)結(jié)尾,指令與參數(shù)間以空格符號(hào)分隔
3单刁、指令塊以{}大括號(hào)將多條指令組織在一起
4灸异、使用#符號(hào)添加注釋,提高可讀性
5羔飞、include語句允許組合多個(gè)配置文件以提升可維護(hù)性
6肺樟、使用$符號(hào)使用變量
7、部分指令的參數(shù)支持正則表達(dá)式

Nginx的各種指令以及配置繁多逻淌,有些配置可以在如下的鏈接 https://tengine.taobao.org/nginx_docs/cn/docs/ 或者在官方文檔上查看

6.3 nginx常用命令

1么伯、查看Nginx的版本號(hào):nginx  -V
2、停止 nginx -s stop
3卡儒、退出 nginx -s quit
4田柔、重啟加載配置 nginx -s reload
5、配置文件啟動(dòng) nginx  -c </path/to/config> 為 Nginx 指定一個(gè)配置文件骨望,來代替缺省的
6硬爆、nginx  -t 不運(yùn)行,而僅僅測(cè)試配置文件擎鸠。nginx 將檢查配置文件的語法的正確性缀磕,并嘗試打開配置文件中所引用到的文件。

6.4糠亩、nginx控制信號(hào)

再次回過頭看看nginx的原理圖虐骑,我們還可以通過信號(hào)去操作 nginx准验,默認(rèn)赎线,nginx 將其主進(jìn)程的 pid 寫入到 /usr/local/nginx/nginx.pid 文件中

命令 解釋
TERM, INT 快速關(guān)閉
QUIT 從容關(guān)閉
HUP 重載配置 用新的配置開始新的工作進(jìn)程 從容關(guān)閉舊的工作進(jìn)程
USR1 重新打開日志文件
USR2 平滑升級(jí)可執(zhí)行程序。
WINCH 從容關(guān)閉工作進(jìn)程

nginx 停止命令糊饱,等所有請(qǐng)求結(jié)束后關(guān)閉服務(wù)

Kill -QUIT nginx 主進(jìn)程號(hào)

重新載入配置

kill -HUP nginx 主進(jìn)程號(hào)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末垂寥,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌滞项,老刑警劉巖狭归,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異文判,居然都是意外死亡过椎,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門戏仓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來疚宇,“玉大人,你說我怎么就攤上這事赏殃》蟠” “怎么了?”我有些...
    開封第一講書人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵仁热,是天一觀的道長(zhǎng)榜揖。 經(jīng)常有香客問我,道長(zhǎng)抗蠢,這世上最難降的妖魔是什么举哟? 我笑而不...
    開封第一講書人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮迅矛,結(jié)果婚禮上炎滞,老公的妹妹穿的比我還像新娘。我一直安慰自己诬乞,他們只是感情好册赛,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著震嫉,像睡著了一般森瘪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上票堵,一...
    開封第一講書人閱讀 52,158評(píng)論 1 308
  • 那天扼睬,我揣著相機(jī)與錄音,去河邊找鬼悴势。 笑死窗宇,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的特纤。 我是一名探鬼主播军俊,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼捧存!你這毒婦竟也來了粪躬?” 一聲冷哼從身側(cè)響起担败,我...
    開封第一講書人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎镰官,沒想到半個(gè)月后提前,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡泳唠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年狈网,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片笨腥。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡孙援,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出扇雕,到底是詐尸還是另有隱情拓售,我是刑警寧澤,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布镶奉,位于F島的核電站础淤,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏哨苛。R本人自食惡果不足惜鸽凶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望建峭。 院中可真熱鬧玻侥,春花似錦、人聲如沸亿蒸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽边锁。三九已至姑食,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間茅坛,已是汗流浹背音半。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留贡蓖,地道東北人曹鸠。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像斥铺,于是被迫代替她去往敵國和親彻桃。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • Nginx才短短幾年仅父,就拿下了web服務(wù)器大筆江山叛薯,眾所周知浑吟,Nginx在處理大并發(fā)靜態(tài)請(qǐng)求方面笙纤,效率明顯高于ht...
    松江野人閱讀 1,077評(píng)論 0 2
  • 什么是Nginx耗溜? Nginx是一個(gè)高性能的HTTP和反向代理服務(wù)器,也是一個(gè)IMAP/POP3/SMTP服務(wù)器N...
    jiangmo閱讀 2,542評(píng)論 1 9
  • Nginx基本模塊: Nginx 默認(rèn)采用守護(hù)模式啟動(dòng)省容,守護(hù)模式讓master進(jìn)程啟動(dòng)后在后臺(tái)運(yùn)行抖拴。在Nginx運(yùn)...
    何笙閱讀 7,015評(píng)論 0 2
  • 必備的理論基礎(chǔ) 1.操作系統(tǒng)作用: 隱藏丑陋復(fù)雜的硬件接口,提供良好的抽象接口腥椒。 管理調(diào)度進(jìn)程阿宅,并將多個(gè)進(jìn)程對(duì)硬件...
    drfung閱讀 3,546評(píng)論 0 5
  • Nginx服務(wù)器架構(gòu)初探 Nginx模塊化結(jié)構(gòu) 核心模塊,是指Nginx服務(wù)器正常運(yùn)行必不可少的模塊笼蛛,它們提供了N...
    漸丶忘閱讀 622評(píng)論 1 0