Nginx的配置文件nginx.conf一共有三個部分組成,分別為全局塊庶喜、events塊和http塊小腊。在http塊中,又包含http全局塊久窟、多個server塊秩冈。每個server塊中,可以包含server全局塊和多個location塊斥扛。在同一配置塊中嵌套的配置塊入问,各個之間不存在次序關(guān)系。
配置文件支持大量可配置的指令,絕大多數(shù)指令不是特定屬于某一個塊的芬失。同一個指令放在不同層級的塊中楣黍,其作用域也不同,一般情況下棱烂,高一級塊中的指令可以作用于自身所在的塊和此塊包含的所有低層級塊租漂。如果某個指令在兩個不同層級的塊中同時出現(xiàn),則采用“就近原則”颊糜,即以較低層級塊中的配置為準(zhǔn)哩治。比如,某指令同時出現(xiàn)在http全局塊中和server塊中衬鱼,并且配置不同业筏,則應(yīng)該以server塊中的配置為準(zhǔn)。
1.全局塊
全局塊是默認(rèn)配置文件從開始到events塊之間的一部分內(nèi)容馁启,主要設(shè)置一些影響Nginx服務(wù)器整體運行的配置指令驾孔,因此芍秆,這些指令的作用域是Nginx服務(wù)器全局惯疙。
通常包含配置運行Nginx服務(wù)器的用戶(組)、允許生成的worker process數(shù)妖啥,Nginx進程PID存放路徑霉颠、日志的存放路徑和類型以及配置文件引入等。
2.events塊
events塊設(shè)計的指令主要影響Nginx服務(wù)器與用戶的網(wǎng)絡(luò)連接荆虱。常用到的設(shè)置包括是否開啟對多worker process下的網(wǎng)絡(luò)連接進行序列化蒿偎,是否允許同時接收多個網(wǎng)絡(luò)連接,選取哪種事件驅(qū)動模型處理連接請求怀读,每個worker process可以同時支持的最大連接數(shù)等诉位。
這一部分的指令對Nginx服務(wù)器的性能影響較大,在實際配置中應(yīng)該根據(jù)實際情況靈活調(diào)整菜枷。
3.http塊
http塊是Nginx服務(wù)器配置中的重要部分苍糠,代理、緩存和日志定義等絕大多數(shù)的功能和第三方模塊的配置都可以放在這個模塊中啤誊。
http塊中可以包含自己的全局塊岳瞭,也可以包含server塊,server塊中又進一步包含location塊蚊锹。
可以在http全局塊中配置的指令包括文件引入瞳筏、MIME-Type定義、日志自定義牡昆、是否使用sendfile傳輸文件姚炕、連接超時時間、單請求數(shù)上線等。
4.server塊
server塊和“虛擬主機”的概念有密切聯(lián)系钻心。虛擬主機凄硼,又稱虛擬服務(wù)器、主機空間或是網(wǎng)頁空間捷沸,這種技術(shù)是為了節(jié)省互聯(lián)網(wǎng)服務(wù)器硬件成本而實現(xiàn)的摊沉。這里的“主機”或“空間”是有實體的服務(wù)器延伸而來,硬件系統(tǒng)可以基于服務(wù)器群痒给,或者單個服務(wù)器等说墨。虛擬主機技術(shù)主要應(yīng)用于HTTP杠园、FTP及EMAIL等多項服務(wù)巍实,將一臺服務(wù)器的某項或者全部服務(wù)內(nèi)容邏輯劃分為多個服務(wù)單位,對外表現(xiàn)為多個服務(wù)器撩穿,從而充分利用服務(wù)器硬件資源试吁。從用戶角度看棺棵,一臺虛擬主機和一臺獨立的硬件主機是完全一樣的。
在使用Nginx服務(wù)器提供Web服務(wù)時熄捍,利用虛擬主機的技術(shù)就可以避免為每一個要運行的網(wǎng)站提供單獨的Nginx服務(wù)器烛恤,也無需為每個網(wǎng)站對應(yīng)運行一組Nginx進程。虛擬主機技術(shù)使得Nginx服務(wù)器可以在同一臺服務(wù)器上只運行一組Nginx進程余耽,就可以運行多個網(wǎng)站缚柏。
每一個http塊都可以包含多個server塊,而每個server塊就相當(dāng)于一臺虛擬主機碟贾,它內(nèi)部可有多臺主機聯(lián)合提供服務(wù)币喧,一起對外提供在邏輯上關(guān)系密切的一組服務(wù)(或網(wǎng)站)。server全局塊指令的作用域為本server塊袱耽,其不會影響到其他的server塊杀餐。
和http塊相同,server塊也可以包含自己的全局塊朱巨,同時可以包含多個location塊史翘。在server全局塊中,最常見的兩個配置項是本虛擬主機的監(jiān)聽配置和本虛擬主機的名稱或IP配置蔬崩。
5.location塊
每個server塊中可以包含多個location塊恶座。location塊的主要作用是,基于Nginx服務(wù)器接收到的請求字符串(例如沥阳,server_name/uri_string)跨琳,對除虛擬主機名稱(也可以是IP別名,后文有詳細(xì)闡述)之外的字符串(前例中“/uri_string”部分)進行匹配桐罕,對特定的請求進行處理脉让。地址定向桂敛、數(shù)據(jù)緩存和應(yīng)答控制等功能都是在這部分實現(xiàn)。許多第三方模塊的配置也是在location塊中提供功能溅潜。