---
title: "教你如何讓 nginx 使用 zstd"
author: "Kanade"
source: https://chunghwamc.com/nginx-zstd-zstandard%e6%95%99%e5%ad%b8/
date: 2024-10-21T23:47:03+08:00
modified: 2025-01-16T16:12:42+08:00
---

# 教你如何讓 nginx 使用 zstd

#### chrome 系瀏覽器在撰文當下支援 gzip, deflate, br, zstd 四種壓縮方法，gzip, deflate 非常悠久也非常普及，br(brotli) 壓縮率優秀但耗時，而 zstd 就是在接近 br 的壓縮率情況下大幅減少壓縮、解壓縮所需時間。

![](https://chunghwamc.com/traum/wp-content/uploads/2024/10/nginx_logo_dark.webp)

今年也剛好是第 20 年發行日。

![](https://chunghwamc.com/traum/wp-content/uploads/2024/10/ZStandard-Hero-1024x576.webp)

#### 此處將以 ubuntu 作為從無到有的示範教學。撰文當下所使用的版本依序為：nginx-1.26.2, openssl-3.3.0+quic, zstd-1.5.6, zstd-nginx-module-0.1.1。<span class="mark">版本隨時會更新，請依看見文章時當下的最新版本操作，無須使用與文章一模一樣的版本號，並且指令中的版本號也要跟著改</span>。

![](https://chunghwamc.com/traum/wp-content/uploads/2024/10/%E8%9E%A2%E5%B9%95%E5%BF%AB%E7%85%A7-2024-10-21-22-16-50.webp)

![](https://chunghwamc.com/traum/wp-content/uploads/2024/10/%E8%9E%A2%E5%B9%95%E5%BF%AB%E7%85%A7-2024-10-21-22-26-31.webp)

![](https://chunghwamc.com/traum/wp-content/uploads/2024/10/%E8%9E%A2%E5%B9%95%E5%BF%AB%E7%85%A7-2024-10-21-22-26-53.webp)

![](https://chunghwamc.com/traum/wp-content/uploads/2024/10/%E8%9E%A2%E5%B9%95%E5%BF%AB%E7%85%A7-2024-10-21-22-49-05.webp)

## 更新套件資訊

``` bash
sudo apt update
```

## 更新套件

``` bash
sudo apt upgrade
```

## 安裝編譯套件

``` bash
sudo apt install -y git build-essential libpcre3 libpcre3-dev zlib1g-dev
```

## 新增資料夾

``` bash
mkdir ~/nginx_build
```

## 進入到剛剛新增的資料夾

``` bash
cd ~/nginx_build
```

## 下載 nginx 原始碼

``` bash
wget -c https://nginx.org/download/nginx-1.26.2.tar.gz
```

## 解壓縮 nginx 原始碼

``` bash
tar zxf nginx-1.26.2.tar.gz
```

## 下載 openssl-quic 原始碼

``` bash
git clone https://github.com/quictls/openssl
```

## 下載 zstandard 原始碼

``` bash
git clone https://github.com/facebook/zstd
```

## 下載 zstd-nginx-module 原始碼

``` bash
git clone https://github.com/tokers/zstd-nginx-module
```

## 進入 zstd 資料夾

``` bash
cd zstd
```

## 編譯 zstd 函式庫

``` bash
make lib-mt
```

## 回到上一層資料夾

``` bash
cd ../
```

## 新增 zstd 函式庫臨時環境變數

``` bash
export ZSTD_INC=$(pwd)/zstd/lib
```

``` bash
export ZSTD_LIB=$(pwd)/zstd/lib
```

## 進入 nginx 資料夾

``` bash
cd nginx-1.26.2
```

## 開始組態設定

``` bash
./configure --with-threads --with-file-aio --with-http_ssl_module --with-http_v2_module --with-http_v3_module --add-module=../zstd-nginx-module --with-openssl=../openssl
```

## 開始編譯

``` bash
make
```

## 測試 (如果沒有出現 ERROR 相關字樣就會出現版本資訊)

``` bash
objs/nginx -V
```

## 安裝

``` bash
sudo make install
```

## 建立軟連結

``` bash
sudo ln -s /usr/local/nginx/sbin/nginx /usr/sbin/nginx
```

## 新增守護行程設定檔

``` bash
echo "# Stop dance for nginx
# =======================
#
# ExecStop sends SIGQUIT (graceful stop) to the nginx process.
# If, after 5s (--retry QUIT/5) nginx is still running, systemd takes control
# and sends SIGTERM (fast shutdown) to the main process.
# After another 5s (TimeoutStopSec=5), and if nginx is alive, systemd sends
# SIGKILL to all the remaining processes in the process group (KillMode=mixed).
#
# nginx signals reference doc:
# http://nginx.org/en/docs/control.html
#
[Unit]
Description=A high performance web server and a reverse proxy server
Documentation=man:nginx(8)
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -q -g 'daemon on; master_process on;'
ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;'
ExecReload=/usr/sbin/nginx -g 'daemon on; master_process on;' -s reload
ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid
TimeoutStopSec=5
KillMode=mixed

[Install]
WantedBy=multi-user.target
" > nginx.service
```

## 將守護行程設定檔放入該放的地方

``` bash
sudo mv nginx.service /usr/lib/systemd/system
```

## 進入修改 nginx.conf 畫面

``` bash
sudo nano /usr/local/nginx/conf/nginx.conf
```

## 在 nginx.conf 中的 http 區塊加入這段

### \*記得先找到『http {』這一行

``` nginx
zstd on;
zstd_static off;
zstd_min_length 64;
zstd_comp_level 3; # 3 是壓縮率，數字越小，速度越快但壓縮效果差，可任意指定 1 ~ 19。
zstd_types 

text/plain text/css text/xml text/javascript 

image/x-icon image/vnd.microsoft.icon image/bmp image/svg+xml 

application/atom+xml application/geo+json 
application/javascript application/x-javascript 
application/json application/ld+json application/manifest+json 
application/rdf+xml application/rss+xml application/xhtml+xml application/xml application/xml+rss  

font/eot font/otf font/ttf;
```

### \*然後按 Ctrl + S 存檔 再按 Ctrl + X 離開

## 啟動 nginx 並設定開機執行

``` bash
sudo systemctl enable --now nginx
```

## 驗證

### 於支援的瀏覽器(如 Chrome)按下 F12，上方切到 Network 頁籤

![](https://chunghwamc.com/traum/wp-content/uploads/2024/10/%E8%9E%A2%E5%B9%95%E5%BF%AB%E7%85%A7-2024-10-21-23-17-32.webp)

### 點一個屬於自己網站上的檔案，且有在設定指定的內容。(此處以 js 為例)

![](https://chunghwamc.com/traum/wp-content/uploads/2024/10/%E8%9E%A2%E5%B9%95%E5%BF%AB%E7%85%A7-2024-10-21-23-23-57.webp)

## <span class="mark">看見 Content-Encoding: zstd 即為成功！</span>
