Debian8でngx_pagespeedをNginxに追加する方法
序章
ngx_pagespeed、または単にpagespeedは、リソースのサイズを縮小し、クライアントのブラウザがサイトを読み込む必要がある時間を短縮することで、サイトを自動的に最適化するように設計されたNginxモジュールです。 まだご存じない方は、公式サイトをご確認ください。
この記事では、Nginxのpagespeedモジュールのインストールと構成について説明します。 Nginxは、Apacheなどの他のWebサーバーで利用可能なモジュールの動的ロードをサポートしていないことを知っておくことが重要です。 Nginxはこの機能をサポートしていないため、モジュールを追加するには、ソースからNginxをビルドする必要があります。
独自のカスタムパッケージを使用することには、1つの欠点があります。新しいバージョンがある場合は、それを更新する責任はユーザーが単独で負うことになります。 ngx_pagespeedを使用することの長所と短所を比較検討するときは、これを考慮に入れてください。
前提条件
このガイドはDebian8向けに書かれています。 Ubuntu14.04バージョンとCentOS7バージョンも利用できます。
このチュートリアルを実行する前に、次の前提条件を満たしていることを確認してください。
- Debian8ドロップレット
- ルート以外のsudoユーザー(詳細については、 Debian 8 を使用した初期サーバーセットアップを確認してください。)
特に明記されていない限り、このチュートリアルでroot権限を必要とするすべてのコマンドは、sudo権限を持つroot以外のユーザーとして実行する必要があります。
ステップ1—ソースとその依存関係をダウンロードする
何よりもまず、Nginxを実行するために必要なすべての依存関係を満たす必要があります。 この目的のために、次のコマンドを実行します。
- sudo apt-get build-dep nginx
次に、ホームディレクトリにフォルダを作成して、Nginxのソースパッケージをダウンロードします。
- mkdir ~/custom-nginx
この新しく作成されたディレクトリに移動します。
- cd ~/custom-nginx
次に、次のコマンドを使用して、このディレクトリにあるNginxソースパッケージをダウンロードします。
- sudo apt-get source nginx
同じページにいることを確認するには、フォルダ~/custom-nginx
の内容を一覧表示します。
- ls ~/custom-nginx
結果は次のようになります。
Output of ls ~/custom-nginxnginx-1.6.2 nginx_1.6.2-5.debian.tar.xz nginx_1.6.2-5.dsc nginx_1.6.2.orig.tar.gz
ご覧のとおり、このチュートリアルの執筆時点では、Nginxソースパッケージのバージョンは1.6.2です。 ngx_pagespeedモジュールの追加を開始するには、最初に、抽出されたフォルダーnginx-1.6.2
内のmodules
フォルダーに移動する必要があります。
- cd nginx-1.6.2/debian/modules
このディレクトリで、次のコマンドを使用して、Githubリポジトリから最新のngx_pagespeedソースアーカイブをダウンロードします。
- sudo wget https://github.com/pagespeed/ngx_pagespeed/archive/master.zip
ダウンロードが完了したら、それを抽出するためにunzip
ユーティリティが必要になります。 unzip
をまだお持ちでない場合は、次のコマンドでインストールしてください。
- sudo apt-get install unzip
その後、コマンドを使用してダウンロードしたファイルを抽出します。
- sudo unzip master.zip
これにより、~/nginx-1.6.2/debian/modules
ディレクトリ内にngx_pagespeed-master
という新しいディレクトリが作成されます。 便宜上、次のコマンドを使用して、このディレクトリの名前をngx_pagespeed
に変更します。
- sudo mv ngx_pagespeed-master ngx_pagespeed
新しいngx_pagespeed
ディレクトリ内に移動します。
- cd ngx_pagespeed
そこから、コンパイルに必要なPageSpeed最適化ライブラリ(psol)をダウンロードします。
- sudo wget https://dl.google.com/dl/page-speed/psol/1.9.32.6.tar.gz
この記事を読んでいるときにpsolアーカイブへのリンクが機能していない場合は、この手順をスキップしてください。 次の手順でコンパイル中にライブラリが欠落している場合は、後でパッケージを取得する方法の更新された手順でエラーが表示されます。
最後に、~/custom-nginx/nginx-1.6.2/debian/modules/ngx_pagespeed
ディレクトリ内にpsolパッケージを抽出します。
- sudo tar -xzvf 1.9.32.6.tar.gz
ステップ2—ソースをカスタマイズする
この時点で、コンパイルルールをカスタマイズし、インストールにngx_pagespeedを含める準備ができています。 この目的のために、お気に入りのエディタでファイル~/custom-nginx/nginx-1.6.2/debian/rules
を編集します。
- sudo nano ~/custom-nginx/nginx-1.6.2/debian/rules
Nginxのパッケージを構築するための4つの異なるシナリオがあります:common
、full
、light
、およびextras
。 その名前が示すように、common
にはサーバーなしの一般的なNginxファイルが含まれ、full
には最も人気のあるモジュールを備えたサーバーが含まれ、light
は必須モジュールのみを備えたサーバーを作成します。 extras
は、いくつかの追加のファンシーモジュールを含むサーバー用です。
light
Nginxセットアップとngx_pagespeedが必要であると仮定しましょう。 したがって、light_configure_flags
構成ブロックの最後に次の行を追加します。
--add-module=$(MODULESDIR)/ngx_pagespeed
前の行に円記号(\
)を追加することを忘れないでください。 構成ブロック全体は次のようになります。
light_configure_flags := \
$(common_configure_flags) \
--with-http_gzip_static_module \
--without-http_browser_module \
--without-http_geo_module \
--without-http_limit_req_module \
--without-http_limit_zone_module \
--without-http_memcached_module \
--without-http_referer_module \
--without-http_scgi_module \
--without-http_split_clients_module \
--without-http_ssi_module \
--without-http_userid_module \
--without-http_uwsgi_module \
--add-module=$(MODULESDIR)/nginx-echo \
--add-module=$(MODULESDIR)/ngx_pagespeed
別のNginxセットアップの方が便利な場合は、他のビルドシナリオにも同じ行を追加できます。
次に、ソースパッケージのバージョンを増やします。これは、後でパッケージを固定するのに役立ちます。 これを実現するには、テキストエディタでchangelog
ファイルを開きます。
- sudo nano ~/custom-nginx/nginx-1.6.2/debian/changelog
changelog
ファイルの最初の行は、現在のパッケージバージョン(1.6.2-5
)とDebianディストリビューション名(unstable
)を表しています。 次のようなハイフンを前に付けたバージョン番号の最後に、pagespeed
などのカスタムタグを追加します。
nginx (1.6.2-5-pagespeed) unstable; urgency=medium
ステップ3—Pagespeedモジュールを使用してNginxをビルドしてインストールする
ngx_pagespeedモジュールを含むようにビルドをカスタマイズしたので、Nginxをビルドする準備が整いました。
次のコマンドを使用して、ディレクトリ~/custom-nginx/nginx-1.6.2/
に移動します。
- cd ~/custom-nginx/nginx-1.6.2/
ここから、コマンドを実行して新しいカスタムNginxパッケージをビルドします。
- sudo dpkg-buildpackage -b
ビルドプロセスには最大で約10分かかります。 この間に切断される可能性がある場合は、この記事で説明されているようにscreen
を使用してみてください。
すべての指示に従った場合、ビルドプロセスはエラーなしで完了するはずです。 新しいカスタムNginxパッケージを見つけるには、次のコマンドを使用して、~/custom-nginx/
までの1つのディレクトリに移動します。
- cd ~/custom-nginx/
~/custom-nginx/
ディレクトリの内容を一覧表示します。
- ls ~/custom-nginx/
.deb
パッケージがたくさんあるはずです。 必要なものは、nginx-common_1.6.2-5-pagespeed_all.deb
(一般的なNginxファイルを含む)およびnginx-light_1.6.2-5-pagespeed_amd64.deb
(カスタムライトサーバーを含む)と呼ばれます。 changelog
ファイルで別のカスタムタグを指定した場合、pagespeed
の部分が異なる場合があります。
pagespeedモジュールを使用してカスタムNginxをインストールするには、次のコマンドを実行します。
- sudo dpkg -i nginx-common_1.6.2-5-pagespeed_all.deb nginx-light_1.6.2-5-pagespeed_amd64.deb
ステップ4—Pagespeedモジュールを有効にする
これでNginxがインストールされました。 次のステップは、ngx_pagespeedモジュールを有効にすることです。
モジュールを有効にする前に、Webサイトのファイルをキャッシュするフォルダーを作成する必要があります。
- sudo mkdir -p /var/ngx_pagespeed_cache
このフォルダの所有権をNginxユーザーに変更して、Webサーバーがそのフォルダにファイルを保存できるようにしてください。
- sudo chown -R www-data:www-data /var/ngx_pagespeed_cache
次に、メインのNginx構成ファイルnginx.conf
を、次のようなお気に入りのテキストエディターで開きます。
- sudo nano /etc/nginx/nginx.conf
このファイルで、http
ブロックに次の行を追加し、変更を保存します。
##
# Pagespeed Settings
##
pagespeed on;
pagespeed FileCachePath /var/ngx_pagespeed_cache;
これらの行はhttp
ブロックのどこにでも追加できますが、この例では、ブロックの最後に追加しています。
/etc/nginx/nginx.conf
ファイルは次のようになります。
...
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
##
# Pagespeed Settings
##
pagespeed on;
pagespeed FileCachePath /var/ngx_pagespeed_cache;
...
また、/etc/nginx/sites-available
にあるevery server
ブロックファイルにpagespeed設定行を追加する必要があります。 たとえば、/etc/nginx/sites-available/default
ファイルを編集します。
- sudo nano /etc/nginx/sites-available/default
server
ブロックに以下を追加します。
# Ensure requests for pagespeed optimized resources go to the pagespeed
# handler and no extraneous headers get set.
location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" { add_header "" ""; }
location ~ "^/ngx_pagespeed_static/" { }
location ~ "^/ngx_pagespeed_beacon" { }
上記のpagespeed構成行は、pagespeedがすべてのサイトのリソースを最適化することを保証します。
最後に、変更を有効にするためにNginxサーバーを再起動します。
- sudo service nginx restart
ステップ5—インストールをテストする
ngx_pagespeedモジュールが正常にインストールされているかどうかを確認するには、次のようにNginxバイナリを実行します。
- sudo /usr/sbin/nginx -V
インストールが成功すると、他のモジュールの中でngx_pagespeedモジュールが一覧表示されます。
Outputnginx version: nginx/1.6.2
...
--add-module=/home/your_user/custom-nginx/nginx-1.6.2/debian/modules/ngx_pagespeed
上記は、ページ速度が有効になっていて、サイトで機能することをまだ意味していません。 これを確認するには、curl
、ツール、およびクライアント側のURL転送用のライブラリを使用できます。 curl
がまだインストールされていない場合は、次のコマンドを使用してインストールします。
- sudo apt-get install curl
その後、次のようにX-Page-Speed
ヘッダーを確認します。
- curl -I -p http://localhost| grep X-Page-Speed
ngx_pagespeedモジュールが正常に機能する場合は、バージョンとともに出力に表示されます。
OutputX-Page-Speed: 1.9.32.6-7321
このヘッダーが表示されない場合は、前の手順の手順に従ってページスピードが有効になっていることを確認してください。
ステップ6—カスタムNginxパッケージを固定する
カスタムNginxパッケージが将来apt
に置き換えられないようにするには、次の手順でパッケージがアップグレードされないように固定(保持)する必要があります。
/etc/apt/preferences.d
に新しいnginx
ファイルを作成します。
- sudo nano /etc/apt/preferences.d/nginx
次に、次の行を貼り付けて保存します。
Package: nginx-light
Pin: version 1.6.2-5-pagespeed
Pin-Priority: 1001
使用することにしたNginxパッケージを必ず指定してください。 この例では、nginx-light
でした。 また、1.6.2-5-pagespeed
などのカスタムタグと一緒に正確なバージョンを指定します。
結論
これが、カスタムモジュールpagespeedを使用してNginxを構築する方法です。 これらの手順は、Nginxでまだ利用できない他のモジュールに対して有効です。 さらに、ソースからパッケージをインストールするプロセス全体は、カスタマイズが必要になる可能性のある他のソフトウェアパッケージと同様です。 新しいバージョンがある場合は、これらのパッケージを自分で保守して再インストールする必要があることを忘れないでください。