NginxにBrotliを導入してデータの圧縮率を上げる

環境構築

こんにちは、柳ヶ瀬です。
ここ最近は執筆ペースがすっかり落ちてしまい、ご無沙汰してしまいました。
それでも今年も引き続き、少しずつ記事を書いていこうと思いますので、引き続きよろしくお願いいたします!

さて、今回は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.confhttpブロック内に書くのがおすすめです。
  • 特定のサイトだけで有効化したい場合は、各サイトの設定ファイル(/etc/nginx/sites-available/<your-site>など)のserverlocationブロック内に記述します。
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が執筆の励みになります。

コメント

タイトルとURLをコピーしました