
こんにちは、柳ヶ瀬です。
ここ最近は執筆ペースがすっかり落ちてしまい、ご無沙汰してしまいました。
それでも今年も引き続き、少しずつ記事を書いていこうと思いますので、引き続きよろしくお願いいたします!
さて、今回はNginxサーバーに「Brotli」圧縮を導入したので、その手順を備忘録として残しておきます。
Brotliはgzipよりも圧縮率が高いので、Webサイトの速度改善にも効果的です!
使用環境
私の検証環境は下記の通りです。
Debian系Linuxであれば、ほぼ同じ手順で進められます。
ご自身の環境とバージョンを念のためご確認ください。
OS : Ubuntu 24.04 LTS
サーバ : Nginx 1.24.0
準備
パッケージのインストール
sudo apt update
sudo apt install build-essential git libpcre3 libpcre3-dev zlib1g-dev libbrotli-dev
Brotli ソース取得
GithubのリポジトリをクローンしてNginxのBrotliモジュールを取得します。
BrotliはNginxの標準機能ではなく、Googleが公開している外部モジュールを追加する形になります。
cd /usr/local/src
sudo git clone https://github.com/google/ngx_brotli.git
cd ngx_brotli
sudo git submodule update --init
git submodule update –init は、サブモジュールを取得するために必要となります。
Nginx ソース取得
Brotliモジュールを組み込むには、ご利用中のNginxと同じバージョンのソースコードが必要です。
下記のコマンドでサーバのNginxバージョンを確認し、公式サイトからそのバージョンのソースをダウンロードします。
nginx -v
私の場合は下記の実行結果になりましたので、1.24.0をダウンロードします。
nginx version: nginx/1.24.0 (Ubuntu)
cd /usr/local/src
sudo wget https://nginx.org/download/nginx-1.24.0.tar.gz
sudo tar zxvf nginx-1.24.0.tar.gz
Brotli ビルドと配置
先ほど取得したNginxソースとBrotliソースから、Brotliモジュールをビルドします。
この方法なら既存のNginx本体はそのままでモジュールだけを追加できます。
cd nginx-1.24.0
sudo ./configure --with-compat --add-dynamic-module=../ngx_brotli
sudo make modules
ビルドが完了したら生成された .soファイル(動的モジュール)をNginxのmodulesディレクトリへコピーします。
sudo cp objs/*.so /etc/nginx/modules/
Nginx 設定
モジュール読み込み
/etc/nginx/nginx.conf の先頭に追記して、ビルドしたBrotliモジュールを読み込ませます。
(ターミナルで記述する場合は nano などのコマンドをご使用ください)
load_module modules/ngx_http_brotli_filter_module.so;
load_module modules/ngx_http_brotli_static_module.so;
nginx.confの先頭がこのようになっていればOKです!
load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;
load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;
user www-data;
worker_processes auto;
pid /run/nginx.pid;
error_log /var/log/nginx/error.log;
include /etc/nginx/modules-enabled/*.conf;
Brotliの有効化
Brotliモジュールを読み込んだら、実際にBrotliによる圧縮を有効化し、どの種類のファイルで使うかなどを設定します。
- 全サイト一括で有効にしたい場合は、
/etc/nginx/nginx.conf
のhttp
ブロック内に書くのがおすすめです。 - 特定のサイトだけで有効化したい場合は、各サイトの設定ファイル(
/etc/nginx/sites-available/<your-site>
など)のserver
やlocation
ブロック内に記述します。
brotli on;
brotli_comp_level 6;
brotli_types
text/plain
text/css
text/javascript
application/javascript
application/json
application/xml
image/svg+xml
font/woff
font/woff2
application/font-woff2;
Nginxの再起動
設定を反映するためにNginxを再起動します。
再起動前に、nginx -t でエラーがないことを確認してください。
sudo nginx -t
sudo systemctl restart nginx
# ↓ systemctl が動作しない場合は
# service restart nginx
動作確認
Brotliによる圧縮が有効化されているか確認してみましょう!
下記のコマンドでbrotliでの圧縮を要求してサーバにリクエストをしてみます。
(https://fuyuki-connect.net の部分を自分のサーバのURLに変更してください)
curl -H "Accept-Encoding: br" -I https://fuyuki-connect.net
下記のような値が帰ってきました!
content-encodingが br になっているのでBrotli圧縮されています。
HTTP/2 200
server: nginx
date: Mon, 04 Aug 2025 08:30:06 GMT
content-type: text/html; charset=UTF-8
x-xss-protection: 1; mode=block
x-content-type-options: nosniff
x-pst-version: 3.1.29
x-pst-dynamic: EXPIRE/CREATE; 1.174 ms
x-b-cache: B=nil:D=EXPIRE/CREATE
x-pst-nginx-cache: MISS
x-debug-donot-cache: 0
x-debug-too-large: 0
x-debug-non-text: 0
x-signature-wexal: KUSANAGI
cache-control: max-age=0, no-cache
x-page-speed: 1.13.35.2-0
content-encoding: br
gzipよりも圧縮効率をあげて少しでもレスポンス速度が上がれば嬉しいですね!
この記事が役に立ちましたらぜひ左下のGoodボタンをお願いします!
皆様のGoodが執筆の励みになります。
コメント