1. 程式人生 > 其它 >加速 Nginx 響應的 5 個措施

加速 Nginx 響應的 5 個措施

1. 啟用 Gzip 壓縮

Enabling Gzip Compression for HTML, CSS, and JavaScript Files

如您所知,在網站上構建頁面的 HTMLCSSJavaScript 檔案可能非常龐大。在大多數情況下,Web 伺服器可以即時壓縮這些和其他文字檔案,以節省網路頻寬。

檢視 Web 伺服器是否正在壓縮檔案的一種方法,就是使用瀏覽器中的開發人員工具。

對於許多瀏覽器,您可以使用 F12 鍵訪問該工具,相關資訊在 Network 選項卡上,可以得到如下所示的截圖例子。

正如您在左下角看到的,沒有壓縮:文字檔案的大小為 1.15 MB,傳輸了大量資料。

預設情況下,壓縮功能在 Nginx

中是禁用的,但因為安裝方式或 Linux 發行版的不同,一些情況下可能在預設的 nginx.conf 配置檔案中是啟用狀態。

這裡,我們在 NGINX 配置檔案中啟用了 gzip 壓縮:

正如下面螢幕截圖中看到的那樣,壓縮後資料傳輸減少到 260KB,相對來收減少了約 80% 資料傳輸!對於頁面上的每個新使用者,

您可以節省大約 917KB 的資料傳輸。對於長期使用我們網站的使用者,每天可以節省 62MB 頻寬,每月可以節省 1860MB 頻寬。

2. 設定快取頭

Setting Cache Headers

瀏覽器檢索網頁檔案時,會將副本保留在本地磁碟快取中。這樣,當你再次訪問該頁面時,瀏覽器就不必從伺服器重新獲取檔案。

每個瀏覽器都有自己的使用邏輯,來決定何時使用該檔案對應的本地副本,以及何時在伺服器更改了該檔案時再次獲取它。

但是,作為網站所有者,你可以在傳送的 HTTP 響應中設定快取控制和過期標頭,以提高瀏覽器的快取行為的效率,從而減少很多不必要的 HTTP 請求。

首先,可以為字型和影象設定較長的快取過期時間,這些字型和影象可能不會經常更改。在下面的示例中,設定客戶端瀏覽器將字型和影象在本地快取中保留一個月。

3. 啟用 HTTP2 協議

Enabling HTTP/2 Protocol Support

HTTP/2 是用於服務網頁的下一代協議,旨在更好地利用網路和主機伺服器。根據Google 文件,它可以更快地載入頁面內容和處理請求。

Nginx1.9.5 及更高版本中已經支援了 HTTP/2 協議,如果需要使用或啟用 HTTP/2 協議的話,在 Nginx 配置檔案的 listen 指令上包含 http2 引數,即可。

需要請注意的是,在大多數情況下,還需要啟用 TLS 才能正常使用 HTTP/2 協議。

下面這網站可以驗證自己管理的網站是否支援 HTTP/2 的協議。

4. 優化日誌

Optimizing Logging

我們在管理網站的時候,即使是有對應的監控服務,但是對應日誌分析還是不夠到位。你也可能只關注錯誤(400500 個狀態碼等等),

而不是成功的請求。通過減少不必要的日誌記錄,可以節省伺服器上的磁碟儲存、CPUI/O 操作。

這不僅可以讓我們伺服器更快一些,而且釋放的資源可以用來執行其他服務。

1、頁面資源請求的日誌記錄

如果我們不需要記錄檢索普通頁面資源的請求,比如影象檔案、JavaScript 檔案和 CSS 檔案等等,那麼這是一個快速而簡單的解決方案。

你所需要做的就是建立一個與這些檔案型別匹配的 location 塊,並配置禁用其中的日誌記錄。

2、禁用成功請求的日誌記錄

這是一種更好的方法,因為它會丟棄帶有 2xx3xx 的響應查詢,僅記錄錯誤請求。它比方法 1 稍微複雜一點,因為它取決於您的 Nginx 日誌記錄的配置方式。

使用 Nginx 官方文件中的示例,讓我們開啟條件日誌記錄。建立一個 $loggable 的變數並將其設定為 0

用於帶有 2xx3xx 響應程式碼的日誌請求,否則設定為 1,即可。然後在 access_log 指令中,將該變數作為條件引用。

3、最小化 I/O 操作

即使你要記錄所有請求,也可以通過開啟訪問日誌緩衝來最大程度地減少 I/O 操作。

使用此指令,Nginx 將等待將日誌資料寫入磁碟,直到填滿 512KB 緩衝區或自上次重新整理以來已過了 1 分鐘(以先發生者為準)。

5. 限制頻寬

Limiting Bandwidth for Particular URLs

如果伺服器提供較大的檔案(或較小但非常受歡迎的檔案,例如表單或報表檔案等),則設定客戶端下載檔案的最大速度可能是一個非常有用的選擇。

如果你的站點已經承受了很高的網路負載,則限制下載速度會留下更多頻寬,以使應用程式的關鍵部分保持響應,這是硬體製造商使用的非常受歡迎的解決方案。

使用 limit_rate 指令來限制特定 URL 的頻寬。在這裡,我們將 /download 下每個檔案的傳輸速率限制為每秒 50KB 的速度

你可能還希望僅對較大的檔案進行速率限制,這可以通過 limit_rate_after 指令進行。在此示例中,每個檔案(來自任何目錄)的前 500KB 都不受速度限制地進行傳輸,

之後的所有內容均以 50KB/s 的速度為上限。這樣可以加快網站關鍵部分的交付速度,同時降低其他部分的速度。

請注意,速率限制適用於瀏覽器和 Nginx 之間的單個 HTTP 連線,因此請不要阻止使用者使用下載管理器來繞開速率限制。

努力做一個偽程式設計師, 不管道路有多麼的艱苦......