chrome 系瀏覽器在撰文當下支援 gzip, deflate, br, zstd 四種壓縮方法,gzip, deflate 非常悠久也非常普及,br(brotli) 壓縮率優秀但耗時,而 zstd 就是在接近 br 的壓縮率情況下大幅減少壓縮、解壓縮所需時間。
此處將以 ubuntu 作為示範教學。撰文當下所使用的版本依序為:nginx-1.26.2, openssl-3.3.0+quic, zstd-1.5.6, zstd-nginx-module-0.1.1。版本隨時會更新,請依看見文章時當下的最新版本操作,無須使用與文章一模一樣的版本號,並且指令中的版本號也要跟著改。
更新套件資訊
sudo apt update
更新套件
sudo apt upgrade
安裝編譯套件
sudo apt install -y git build-essential libpcre3 libpcre3-dev zlib1g-dev
新增資料夾
mkdir ~/nginx_build
進入到剛剛新增的資料夾
cd ~/nginx_build
下載 nginx 原始碼
wget -c https://nginx.org/download/nginx-1.26.2.tar.gz
解壓縮 nginx 原始碼
tar zxf nginx-1.26.2.tar.gz
下載 openssl-quic 原始碼
git clone https://github.com/quictls/openssl
下載 zstandard 原始碼
git clone https://github.com/facebook/zstd
下載 zstd-nginx-module 原始碼
git clone https://github.com/tokers/zstd-nginx-module
進入 zstd 資料夾
cd zstd-1.5.6
編譯 zstd 函式庫
make lib-mt
回到上一層資料夾
cd ../
新增 zstd 函式庫臨時環境變數
export ZSTD_INC=$(pwd)/zstd-1.5.6/lib
export ZSTD_LIB=$(pwd)/zstd-1.5.6/lib
進入 nginx 資料夾
cd nginx-1.26.2
開始組態設定
./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-openssl-3.3.0-quic1
開始編譯
make
測試 (如果一切都成功的話)
./nginx -V
安裝與使用(包含開機自動啟動)皆跳過,本文著重於取得跟啟用。
在 nginx.conf 中的 http 區塊加入這段
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;