認識Nginx,理解原理和功能


前端工程師在理解Nginx之后,就能更好的與后端工程師溝通,為了能提高工作效率,這兩天抽空讀了《Nginx高性能Web服務器實戰教程》。

一、Nginx

Nginx是一款高性能的Web服務器軟件,主要用於提供網上信息瀏覽服務,為高並發網站的應用場景而設計,可以在Linux、macOS和Windows等操作系統中運行,它的優點包括性能高、穩定性好、結構模塊化、配置簡單以及資源消耗非常低等。擁有HTTPS訪問、gzip壓縮、虛擬主機和URL重寫等功能,不但可以搭配FastCGI程序處理動態請求,還可以用於代理、反向代理、負載均衡和緩存服務器等功能。P2

1)進程和訪問控制

Nginx由一個主進程和多個工作進程組成,主進程接收客戶端請求,再轉交給工作進程處理,從而很好地利用多核心CPU的計算能力。P89

 

 

 

Nginx的訪問控制是網絡安全防范和保護的主要策略,其任務是保證網絡資源不被非法訪問。P93

2)日志記錄功能

Nginx提供了一個非常靈活的日志記錄功能,它可以使每個塊的配置擁有各自獨立的日志進行記錄,並且根據記錄內容的不同又分為訪問日志和錯誤日志。P101

(1)訪問日志用於記錄客戶端訪問Nginx的每一個請求。記錄用戶的IP、訪問時間、請求方式、響應狀態、地域來源、跳轉來源、使用終端等信息。

(2)錯誤日志記錄在訪問Nginx時出錯的記錄,可以查看某個服務的性能瓶頸。

3)虛擬主機技術

虛擬主機技術是指一台物理主機服務器上划分出多個磁盤空間,每個磁盤空間都是一台虛擬主機,每台虛擬主機都可以獨立對外提供Web服務,且互不干擾。

利用虛擬主機可把多個不同域名的網站部署在同一台服務器上,而不必再為建立一個網站單獨購買一台服務器,既解決了維護難題,又節省了硬件成本。P107

 

 

 

二、PHP與Nginx

對Nginx而言,PHP是一個外部程序,而非其內部的一個模塊。為了讓Web服務器的功能擴展性更強,就需要支持CGI(Common Interface,公共網關接口)規范。P124

1)CGI

CGI是Web服務器與外部程序之間的接口標准,用於兩種不同程序之間的信息傳遞。CGI規范允許Web服務器根據瀏覽器請求調用CGI程序,並將其輸出結果通過響應發送給瀏覽器,從而使Web服務器支持處理復雜的網站業務需求。

Web服務器支持CGI的意義不在於性能而在於開發,開發者只需要編寫一個CGI文件放在網站目錄中,當瀏覽器請求CGI文件,Web服務器就會調用CGI程序執行CGI文件,等待CGI程序處理完成后,再將程序的輸出結果返回給瀏覽器。

 

 

 

2)FastCGI和PHP-FPM

FastCGI主要用於解決CGI性能上的缺陷。傳統CGI方式是每當客戶端請求CGI時,Web服務器就通過操作系統創建一個新的CGI進程,一個CGI進程完成一個請求處理后就退出,下次請求再創建一個新CGI進程。由於這種方式需要不斷為每個請求創建進程,因此在網站並發量很大時顯得非常低效。FastCGI優化了這種工作方式,它由一個常駐的CGI進程管理器,通過管理一個進程池來處理Web服務器的請求,由此提高了性能。

PHP提供的PHP-FPM(FastCGI Process Manager)就是一個FastCGI進程管理器,其可執行文件位於PHP安裝的目錄中。

三、負載均衡與緩存

1)正向代理

代理也稱為正向代理,是一個位於客戶端和目標服務器之間的代理服務器,客戶端將發送的請求和指定的目標服務器提交給代理服務器,然后代理服務器向目標服務器發起請求,並將獲得的響應結果返回給客戶端。P158

 

 

 

2)反向代理

反向代理對於客戶端而言就是目標服務器,客戶端反向代理服務器發送請求后,反向代理服務器將該請求轉發給內部網絡上的后端服務器,並從后端服務器上得到的響應結果返回給客戶端。

 

 

 

兩種代理的特性有:安全性和功能性。

3)負載均衡

負載均衡(load balance)就是將負載分攤到多個操作單元上執行,從而提高服務的可用性和響應速度,帶給用戶更好的體驗。P162

 

 

 

目前負載均衡有4種典型的配置方式,分別為輪詢、權重、ip_hash和利用第三方模塊的方式。

 

 

 

4)Web緩存方式

利用反向代理服務器對訪問頻率較多的內容進行緩存,有利於節省后端服務器的資源。Nginx提供了兩種Web緩存方式:永久性緩存和臨時性緩存。P168

永久性緩存:將內容源服務器響應的內容緩存到本地,若不手動刪除,該緩存文件會一直生效。

臨時性緩存:采用md5算法將請求連接進行哈希后,根據具體配置生成緩存文件目錄,保存響應的數據。

Web緩存服務器位於內容源Web服務器和客戶端之間,當客戶端用戶訪問一個URL時,Web緩存服務器就會請求相應的內容源Web服務器,並將響應的信息緩存至內存或磁盤;然后,當下一個請求到來時,如果訪問的是相同URL,Web緩存服務器會直接將已緩存的內容輸出給客戶端,而不用再次向內容源Web服務器發送請求。

 

 

 

四、模塊配置應用

由於Nginx的高度模塊化設計,使得每個模塊的功能相對簡單,便於實現功能的擴展性。P182

1)模塊化結構設計

模塊化結構設計就是以功能塊為單位進行程序設計,實現其求解算法的一種方法。模塊化結構設計的目的是為了降低程序復雜度,使程序設計、調試和維護等操作簡單化,方便團隊協作以及應用的擴展升級。

換句話說,Nginx就像是積木搭建的房子,在實現規范接口的前提下,各個團隊只要保持接口不變,可同時開發功能模塊,這樣就可以根據實際需求不斷地加入新的功能,或者去掉舊的功能,達到應用程序的高配置性、高擴展性、高定制性和高伸縮性。

Nginx分為5大模塊:核心模塊、標准HTTP模塊、可選HTTP模塊、郵件服務模塊和第三方模塊。

2)gzip

gzip(GNU-ZIP)是一種壓縮技術,經過gzip壓縮后,頁面大小可以變為原來的30%甚至更小。gzip網頁壓縮的實現需要瀏覽器和服務器的支持。P195

 

 

 

gzip的壓縮過程:首先在服務器端壓縮,然后傳到瀏覽器端后解壓。當瀏覽器支持gzip解壓時,會在請求消息頭中包含Accpet-Encoding:gzip,這樣Nginx就會向瀏覽器發送經過gzip后的內容,同時在響應消息頭中加入Content-Encoding:gzip,聲明這是gzip后的內容,告知瀏覽器要先解壓后才能解析輸出。

3)重寫與重定向

為了能夠在修改網站結構或域名后,避免造成網站中的鏈接或在其他網站中的外鏈失效,以及提高該網站在搜索引擎的收錄量和排名等目的。通常會采用URL重寫與重定向,在增強網站專業化的同時,為用戶提供更加舒適的使用體驗。P198

下面第6行通過if指令判斷訪問不到用戶請求或目錄時,執行第7行指令,^/.*用於匹配當前網絡下的所有請求,/default/default.html用於替換符合指定規則的請求。

 

 

 

下面第5行利用set指令為變量$name賦值,$1表示符合正則表達式第一個子模式的值。第6行用於在用戶請求“http://test.ng.test/img-數字.jpg”時,重定向到“http://test.ng.test/img/數字.jpg”。

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM