Skip to content

2026-08-22

/ 11 分鐘閱讀

/ Full Stack Fundamentals

Nginx 路徑重導向與 Gzip 壓縮:壓縮等級為什麼設 6 不設 9,圖片、音訊檔案為什麼壓不動

前面寫過 Nginx 虛擬伺服器設定的 location 區塊,這一節要在同一個地方多做兩件事:加入路徑重導向,以及認識 Gzip 壓縮的運作原理與適用場景。

在 Nginx 裡設定路徑重導向

Nginx 的虛擬伺服器設定可以加入重導向規則,把特定路徑導向到別的地方。例如可以設定當使用者連到 jemstack.lol/help 這個路徑時,直接重導向到 Mozilla 開發者文件(MDN)。這只是示範用途,不是必須執行的操作,主要用來說明 Nginx 怎麼處理這類重導向設定。

什麼是 Gzip

Gzip 是一種壓縮演算法,會在 Nginx 端運作。HTML 頁面等內容經常會先經過 Gzip 壓縮再傳送出去,這樣傳輸的就不是原始的龐大檔案,而是壓縮後、體積小得多的版本;瀏覽器則具備解壓縮的能力,收到壓縮過的內容後會自動還原,這正是瀏覽器少數內建、卻極其實用的能力之一。

調整 Gzip 壓縮等級:為什麼慣例是 6 而不是 9

Gzip 相關的設定可以在 /etc/nginx/nginx.conf 裡找到並調整,其中一項是壓縮等級。預設值通常是 6,很容易讓人有種「乾脆直接調到最高的 9」的衝動,但這麼做其實有代價:等級愈高,代表每一次連線都需要耗費更多 CPU 資源去做壓縮與解壓縮的運算。等級 6 一般被視為速度與壓縮效果之間比較理想的平衡點;如果確定伺服器上跑的流量不多、想榨出最大壓縮效果,才會考慮往上調到 9,但正式環境的伺服器通常不會這麼做。想實際調整可以用 vi /etc/nginx/nginx.conf 打開設定檔修改,不是必要操作,但知道它存在總是有幫助。

壓縮演算法的運作原理

用最簡化的方式理解壓縮演算法:任何一個檔案,核心終究都是由一長串 0 與 1 組成,這正是所有資料在電腦裡最底層的樣貌。與其把這一長串 0 與 1 原封不動地儲存下來,壓縮演算法會改用更精簡的方式描述同樣的內容,例如把「連續 4 個 0,接著 3 個 1,接著 1 個 0,接著 1 個 1,接著 5 個 0」這種重複出現的規律,改寫成更短的描述方式。只要這種重新描述的規則不斷套用下去,原本高達幾個 GB 的檔案,就有機會被壓縮到只剩幾 MB。

壓縮與雜湊的差異

壓縮和前面提過的雜湊,聽起來有點類似,但本質完全不同:壓縮追求的是盡可能縮小輸出的體積,而且一定要能夠被還原回原始內容,否則壓縮這件事就失去意義;雜湊則完全不在乎輸出的大小,而且原則上不是設計來被反向還原的。

為什麼圖片檔案沒辦法再被 Gzip 壓縮

一個有趣的冷知識:圖片檔案沒辦法透過 Gzip 有效壓縮,原因是圖片本身早就已經被壓縮過了。以點陣圖(bitmap)為例,同一張圖片如果存成點陣圖可能高達 5MB,但存成 PNG 格式,檔案大小可能只剩 30KB 左右,因為 PNG 這類格式本身就內建了自己的壓縮演算法;JPEG 則是另一種常見的圖片壓縮格式,只是它屬於有損壓縮(lossy),而 PNG 通常不是。

同樣的邏輯也適用於音訊格式:MP3 本質上就是把 WAV 檔案壓縮過的結果。JPEG 得名自 Joint Picture Experts Group,MP3 則源自 MPEG(Motion Picture Experts Group)制定的標準,兩者都是各自領域裡極具影響力的壓縮演算法。既然這些檔案格式本身早就已經被壓縮過了,再對它們套用一次 Gzip,實際上不會再帶來多少效果。

複習

Gzip 在網頁技術中是什麼,它的作用是什麼?

Gzip 是一種在 Nginx 上運作的壓縮演算法,會在檔案傳送出去之前先把體積壓縮縮小,瀏覽器則能自動解壓縮這些內容,藉此減少資料傳輸量、提升效能。

正式環境中,建議的 Gzip 壓縮等級是多少?

正式環境通常會把 Gzip 壓縮等級設在 6,這被視為速度與壓縮效果之間比較理想的平衡點;設成最高的 9 需要耗費更多 CPU 資源,一般不建議這麼做。

基本的壓縮演算法是怎麼運作的?

壓縮演算法會用更有效率的方式重新描述檔案的二進位內容,例如把一長串 0 與 1 改寫成「連續 4 個 0、接著 3 個 1、接著 1 個 0、接著 1 個 1、接著 5 個 0」這種精簡描述,藉此大幅縮小檔案體積。

壓縮與雜湊之間最關鍵的差異是什麼?

壓縮的目標是縮小檔案體積,並且必須能夠被還原(解壓縮)回原始內容;雜湊則不以縮小體積為主要目的,也不是設計來被還原回原始輸入的。

為什麼 Gzip 沒辦法有效壓縮圖片檔案?

因為圖片檔案本身早就已經用 PNG、JPEG 等自己的壓縮演算法處理過,這些格式已經把檔案體積縮小過一次,再套用 Gzip 壓縮不會再帶來明顯的效果。

小測驗

Gzip 在網頁技術中主要用來做什麼? 壓縮檔案以減少資料傳輸量
Nginx 建議的預設 Gzip 壓縮等級是多少? 等級 6
壓縮演算法基本上是怎麼運作的? 用更有效率的方式描述檔案內容的重複規律
為什麼預設的 Gzip 壓縮等級通常設定為 6,而不是最高的 9? 更高的壓縮等級需要每次連線耗費明顯更多的 CPU 資源

此文章是 FrontendMasters 上的 Full Stack Fundamentals, v3 課程筆記

最後更新時間:

Buy Me A Coffee

系列章節 第 35 篇 / 共 38 篇

0 %
MIT Licensed | Copyright © 2025-present Wen-Hsiu's Blog
Photo by Federica Galli on Unsplash