5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Apacheのmod_brotliをインストールしてみる

Last updated at Posted at 2018-02-08

以前から気になっていたbrotli。
Googleが開発したというこの新しい圧縮技術を使って、ウェブページの配信をもっと速くできないかと思い、いろいろ調べてみました。

結論から言うと、既存の圧縮技術であるGzipに対して、圧縮後のサイズで優位性はあるとしても
私が現在携わっている環境、Amazon LinuxにyumでインストールしているApacheでは対応していないため
インストール方法を切り替えてまで採用するほどではないと思いました。

今回はbrotli、及びApacheのmod_brotliのLinux環境でのインストールについてまとめたいと思います。
また、gzipとの比較としてベンチマークも実施したので、それについては後日別の記事にてご紹介できればと思います。

apacheの公式ドキュメントを確認すると
Apacheの2.4.26以上で利用できるようです。

私が携わっている環境(Amazon Linux)にyumで入っているhttpdは2.4.25で、アウトでした。
新しいバージョンがないか調べてみると

$ yum info httpd24
Installed Packages
Name        : httpd24
Arch        : x86_64
Version     : 2.4.27
Release     : 3.75.amzn1
Size        : 4.1 M
Repo        : installed
From repo   : amzn-main
Summary     : Apache HTTP Server
URL         : http://httpd.apache.org/
License     : ASL 2.0
Description : The Apache HTTP Server is a powerful, efficient, and extensible
            : web server.

2.4.27、ということでいけそうです。

yum update httpd24でアップデートさせます。

gzip圧縮のモジュールであるmod_deflatellのように
SetOutputFilter BROTLI_COMPRESS
をconfファイルに追記して再起動します。

ところがブラウザで確認してみるも、レスポンスヘッダーには"br"の文字列がありません。
圧縮がかかっていないようです。
そこでapacheのエラーログを見てみると、

an unknown filter was not added: BROTLI_COMPRESS

というエラーが出力されていました。
そこで/etc/httpd/modules配下を探してみるもmod_brotli的なものはありません。
yumでアップデートしても入っているわけじゃないみたいですね。

ということでソースからインストールしてみようと思います。

mod_brotliをソースからコンパイルしてインストール

まずはbrotliのレポジトリをクローンします。
記載されている手順通り、cmakeでインストールします。
(cmakeはなかったのでyum install cmakeしてます)

git clone https://github.com/google/brotli
mkdir out && cd out
../configure-cmake
make
make test
make install

これで/usr/local/binにbrotliがインストールされます。

次にApache Httpdをソースからコンパイルしてインストールします。

こっからソースをダウンロードして伸長。
思えばapacheをソースからインストールしたのは初めてです。

brotliを使いたいので--with-brotliオプションを指定してconfigureします。

./configure --with-ssl --with-mpm=prefork --enable-rewrite --with-brotli=/usr/local
make
make install

すると/usr/local/apache2にhttpdがインストールされます。httpd.confを見ると

#LoadModule brotli_module modules/mod_brotli.so

があるので、こいつをコメントイン。modulesの下を探してみると。

/usr/local/apache2/modules/mod_brotli.so

があるのを確認できると思います。
いよいよapacheを起動してみようと思います。

/usr/local/apache2/bin/apachectl -t
httpd: Syntax error on line 106 of /usr/local/apache2/conf/httpd.conf: Cannot load modules/mod_brotli.so into server: libbrotlienc.so.1: cannot open shared object file: No such file or directory

何かがうまく行っていないようです。
ここで結構つまづいたのですが、調べてみたところ
ライブラリ関係がうまくいってなかったようです

echo /usr/local/lib > /etc/ld.so.conf.d/usr-local-lib.conf
ldconfig

これできちんとapacheがmod_brotli.soを認識してくれるようです。

適当なconfファイルに以下を追記する。

SetOutputFilter BROTLI_COMPRESS
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-brotli

ブラウザで確認すると・・・。

レスポンスヘッダーのContent-Encodingのところにbrがあるのが確認できる

Response Headerの"Content-Encoding"のところに"br"が見えました!
Gzipとの比較をしてみました。

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?