Introduction
こんにちは、柳ケ瀬冬樹です。
今回はNginxにzstd圧縮を導入する手順を解説します。
私が運営しているサーバに「zstd」圧縮を導入したので、その手順を備忘録として残しておきます。
zstdは圧縮率とCPU負荷のバランスが良く、動的コンテンツの配信に適している圧縮方法です。
以前Brotliの導入を書きましたので、こちらも合わせてどうぞ!
Brotliは圧縮率が優秀である反面、圧縮速度が遅めなので静的コンテンツへの利用に向いています。
使用環境
私の検証環境は下記の通りです。
Debian系Linuxであれば、ほぼ同じ手順で進められます。
ご自身の環境とバージョンを念のためご確認ください。
OS : Ubuntu 24.04 LTS
サーバ : Nginx 1.24.0
準備
パッケージのインストール
sudo apt update
sudo apt install build-essential git wget libpcre3-dev zlib1g-dev libssl-dev libzstd-devzstd ソース取得
基本的な流れはBrotliと同じです。
GitHubのリポジトリをクローンしてNginxのzstdモジュールを取得します。
/usr/local/src に書き込み権限がない場合は、各コマンドの前に sudo を付けて実行してください
cd /usr/local/src
git clone https://github.com/tokers/zstd-nginx-module.gitNginxソース 取得
こちらもBrotliと同じく、zstdモジュールを組み込むには、ご利用中のNginxと同じバージョンのソースコードが必要です。
下記のコマンドでサーバのNginxバージョンを確認し、公式サイトからそのバージョンのソースをダウンロードします。
nginx -v私の場合は下記の実行結果になりましたので、1.24.0をダウンロードします。
nginx version: nginx/1.24.0 (Ubuntu)
cd /usr/local/src
wget https://nginx.org/download/nginx-1.24.0.tar.gz
tar xzf nginx-1.24.0.tar.gzzstd モジュールのビルド
3. で取得したNginxソースとzstdソースから、zstdモジュールをビルドします。
この方法なら既存のNginx本体はそのままでモジュールだけを追加できます。
cd /usr/local/src/nginx-1.24.0
./configure --with-compat --add-dynamic-module=../zstd-nginx-module
make modules下記コマンドで、zstdのビルド済みモジュールが生成されたか確認をしてください。
find objs -name "*.so" -print成功している場合、2つのファイルが作られているかと思います。
objs/ngx_http_zstd_filter_module.so
objs/ngx_http_zstd_static_module.so
環境によっては -fPIC 関連のエラーがでて、objsディレクトリに.soファイルが作られていないことがあります。
その場合、ZSTD_INCとZSTD_LIBを明示的に指定します。
make clean
export ZSTD_INC="/usr/include"
export ZSTD_LIB="/usr/lib/x86_64-linux-gnu/libzstd.so"
./configure --with-compat --add-dynamic-module=../zstd-nginx-module
make modules再度、find objs -name “*.so” -print を実行して.soが作成されているか確認します。
objs/ngx_http_zstd_filter_module.so
objs/ngx_http_zstd_static_module.so
これらのファイルができていれば、Nginxのmodulesへコピーします。
cp objs/ngx_http_zstd_filter_module.so /usr/lib/nginx/modules/
cp objs/ngx_http_zstd_static_module.so /usr/lib/nginx/modules/Nginx 設定
モジュール読み込み
/etc/nginx/nginx.conf の先頭に追記して、ビルドしたzstdモジュールを読み込ませます。
(ターミナルで記述する場合は nano などのコマンドをご使用ください)
load_module modules/ngx_http_zstd_filter_module.so;
load_module modules/ngx_http_zstd_static_module.so;nginx.confの先頭がこのようになっていればOKです!
user www-data;
worker_processes auto;
pid /run/nginx.pid;
error_log /var/log/nginx/error.log;
load_module modules/ngx_http_zstd_filter_module.so;
load_module modules/ngx_http_zstd_static_module.so;
include /etc/nginx/modules-enabled/*.conf;zstd の有効化
zstdモジュールを読み込んだら、実際にzstdによる圧縮を有効化し、どの種類のファイルで使うかなどを設定します。
- 全サイト一括で有効にしたい場合は、
/etc/nginx/nginx.confのhttpブロック内に書くのがおすすめです。 - 特定のサイトだけで有効化したい場合は、各サイトの設定ファイル(
/etc/nginx/sites-available/<your-site>など)のserverやlocationブロック内に記述します。
# Compress Settings Zstd
zstd on;
zstd_comp_level 6;
zstd_min_length 256;
zstd_types
text/plain
text/css
text/xml
text/javascript
application/javascript
application/json
application/xml
application/rss+xml
image/svg+xml;Nginxの再起動
設定を反映するためにNginxを再起動します。
再起動前に、nginx -t でエラーがないことを確認してください。
sudo nginx -t
sudo systemctl restart nginx
# ↓ systemctl が動作しない場合は
# service nginx restart動作確認
zstdによる圧縮が有効化されているか確認してみましょう!
下記のコマンドでzstdでの圧縮を要求してサーバにリクエストをしてみます。
(http://<your-site> の部分を自分のサーバのURLに変更してください)
curl -H "Accept-Encoding: zstd" -I https://<your-site>下記のような値が帰ってきました!
content-encoding: zstd になっていればzstdで圧縮されています!
souta@bebebe-Desktop:~$ curl -H "Accept-Encoding: zstd" -I https://<your-site>
HTTP/2 200
server: nginx
date: Fri, 06 Mar 2026 06:42:55 GMT
content-type: application/json
vary: Accept-Encoding
access-control-allow-origin: *
content-encoding: zstd
この記事が役に立ちましたらぜひ左下のGoodボタンをお願いします!
皆様のGoodが執筆の励みになります。



コメント