序章

ngx_pagespeed、または単にpagespeedは、リソースのサイズを縮小し、クライアントのブラウザがサイトを読み込む必要がある時間を短縮することで、サイトを自動的に最適化するように設計されたNginxモジュールです。 まだご存じない方は、公式サイトをご確認ください。

この記事では、Nginxのpagespeedモジュールのインストールと構成について説明します。 Nginxは、Apacheなどの他のWebサーバーで利用可能なモジュールの動的ロードをサポートしていないことを知っておくことが重要です。 Nginxはこの機能をサポートしていないため、モジュールを追加するには、ソースからNginxをビルドする必要があります。

独自のカスタムパッケージを使用することには、1つの欠点があります。新しいバージョンがある場合は、それを更新する責任はユーザーが単独で負うことになります。 ngx_pagespeedを使用することの長所と短所を比較検討するときは、これを考慮に入れてください。

前提条件

このガイドはUbuntu14.04向けに書かれています。 CentOS7バージョンDebian8バージョンも利用できます。

このチュートリアルを実行する前に、次の前提条件を満たしていることを確認してください。

  • Ubuntu14.04ドロップレット
  • ルート以外のsudoユーザー(詳細については、 Ubuntu 14.04 を使用した初期サーバーセットアップを確認してください。)

特に明記されていない限り、このチュートリアルでroot権限を必要とするすべてのコマンドは、sudo権限を持つroot以外のユーザーとして実行する必要があります。

ステップ1—ソースとその依存関係をダウンロードする

何よりもまず、apt-getから入手できるパッケージのリストが更新されていることを確認する必要があります。

  1. sudo apt-get update

次に、Nginxを実行するために必要なすべての依存関係を満たす必要があります。 この目的のために、次のコマンドを実行します。

  1. sudo apt-get build-dep nginx

その後、ホームディレクトリにフォルダを作成して、Nginxのソースパッケージをダウンロードします。

  1. mkdir ~/custom-nginx

この新しく作成されたディレクトリに移動します。

  1. cd ~/custom-nginx

次に、次のコマンドを使用して、このディレクトリにあるNginxソースパッケージをダウンロードします。

  1. sudo apt-get source nginx

同じページにいることを確認するには、フォルダ~/custom-nginxの内容を一覧表示します。

  1. ls ~/custom-nginx

結果は次のようになります。

Output of ls ~/custom-nginx
nginx-1.4.6 nginx_1.4.6-1ubuntu3.3.debian.tar.gz nginx_1.4.6-1ubuntu3.3.dsc nginx_1.4.6.orig.tar.gz

ご覧のとおり、このチュートリアルの執筆時点では、Nginxソースパッケージのバージョンは1.4.6です。 ngx_pagespeedモジュールの追加を開始するには、最初に、抽出されたフォルダーnginx-1.4.6内のmodulesフォルダーに移動する必要があります。

  1. cd nginx-1.4.6/debian/modules

このディレクトリで、次のコマンドを使用して、Githubリポジトリから最新のngx_pagespeedソースアーカイブをダウンロードします。

  1. sudo wget https://github.com/pagespeed/ngx_pagespeed/archive/master.zip

ダウンロードが完了したら、それを抽出するためにunzipユーティリティが必要になります。 unzipをまだお持ちでない場合は、次のコマンドでインストールしてください。

  1. sudo apt-get install unzip

その後、コマンドを使用してダウンロードしたファイルを抽出します。

  1. sudo unzip master.zip

これにより、~/nginx-1.4.6/debian/modulesディレクトリ内にngx_pagespeed-masterという新しいディレクトリが作成されます。 便宜上、次のコマンドを使用して、このディレクトリの名前をngx_pagespeedに変更します。

  1. sudo mv ngx_pagespeed-master ngx_pagespeed

新しいngx_pagespeedディレクトリ内に移動します。

  1. cd ngx_pagespeed

そこから、コンパイルに必要なPageSpeed最適化ライブラリ(psol)をダウンロードします。

  1. sudo wget https://dl.google.com/dl/page-speed/psol/1.9.32.6.tar.gz

この記事を読んでいるときにpsolアーカイブへのリンクが機能していない場合は、この手順をスキップしてください。 次の手順でコンパイル中にライブラリが欠落している場合は、後でパッケージを取得する方法の更新された手順でエラーが表示されます。

最後に、~/custom-nginx/nginx-1.4.6/debian/modules/ngx_pagespeedディレクトリ内にpsolパッケージを抽出します。

  1. sudo tar -xzvf 1.9.32.6.tar.gz

ステップ2—ソースをカスタマイズする

この時点で、コンパイルルールをカスタマイズし、インストールにngx_pagespeedを含める準備ができています。 この目的のために、お気に入りのエディタでファイル~/custom-nginx/nginx-1.4.6/debian/rulesを編集します。

  1. sudo nano ~/custom-nginx/nginx-1.4.6/debian/rules

Nginxのパッケージを構築するための5つの異なるシナリオがあります:corefulllightextrasnaxsi。 その名前が示すように、commonにはサーバーなしの一般的なNginxファイルが含まれ、fullには最も人気のあるモジュールを備えたサーバーが含まれ、lightには必須モジュールのみを備えたサーバーが作成されます。 extrasは、いくつかの追加のファンシーモジュールを含むサーバー用であり、naxsiには、さらにnaxsiモジュール(Webアプリケーションファイアウォール)があります。

lightNginxセットアップとngx_pagespeedが必要であると仮定しましょう。 したがって、light_configure_flags構成ブロックの最後に、次の行を追加します。

〜/ custom-nginx / nginx-1.4.6 / debian / rules
--add-module=$(MODULESDIR)/ngx_pagespeed \

行の最後に円記号(\)を追加することを忘れないでください。 構成ブロック全体は次のようになります。

〜/ custom-nginx / nginx-1.4.6 / debian / rules
config.status.light: config.env.light
        cd $(BUILDDIR_light) && ./configure  \
            $(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 \
            >$@
        touch $@

別のNginxセットアップの方が便利な場合は、他のビルドシナリオにも同じ行を追加できます。

次に、ソースパッケージのバージョンを増やします。これは、後でパッケージを固定するのに役立ちます。 これを実現するには、テキストエディタでchangelogファイルを開きます。

  1. sudo nano ~/custom-nginx/nginx-1.4.6/debian/changelog

changelogファイルの最初の行は、現在のパッケージバージョン(1.4.6-1ubuntu3.3)とUbuntuコードネーム(trusty)を表しています。 次のようなハイフンを前に付けたバージョン番号の最後に、pagespeedなどのカスタムタグを追加します。

変更ログ
nginx (1.4.6-1ubuntu3.3-pagespeed) trusty-proposed; urgency=medium

ステップ3—Pagespeedモジュールを使用してNginxをビルドしてインストールする

ngx_pagespeedモジュールを含むようにビルドをカスタマイズしたので、Nginxをビルドする準備が整いました。

次のコマンドを使用して、ディレクトリ~/custom-nginx/nginx-1.4.6/に移動します。

  1. cd ~/custom-nginx/nginx-1.4.6/

ここから、コマンドを実行して新しいカスタムNginxバイナリパッケージをビルドします。

  1. sudo dpkg-buildpackage -b

ビルドプロセスには最大で約10分かかります。 この間に切断される可能性がある場合は、この記事で説明されているようにscreenを使用してみてください。

すべての指示に従った場合、ビルドプロセスはエラーなしで完了するはずです。 新しいカスタムNginxパッケージを見つけるには、次のコマンドを使用して、~/custom-nginx/までの1つのディレクトリに移動します。

  1. cd ~/custom-nginx/

~/custom-nginx/ディレクトリの内容を一覧表示します。

  1. ls ~/custom-nginx/

.debパッケージがたくさんあるはずです。 必要なものは、nginx-common_1.4.6-1ubuntu3.3-pagespeed_all.deb(一般的なNginxファイルを含む)およびnginx-light_1.4.6-1ubuntu3.3-pagespeed_amd64.deb(カスタムライトサーバーを含む)と呼ばれます。 changelogファイルで別のカスタムタグを指定した場合、pagespeedの部分が異なる場合があります。

pagespeedモジュールを使用してカスタムNginxをインストールするには、次のコマンドを実行します。

  1. sudo dpkg -i nginx-common_1.4.6-1ubuntu3.3-pagespeed_all.deb nginx-light_1.4.6-1ubuntu3.3-pagespeed_amd64.deb

ステップ4—Pagespeedモジュールを有効にする

これでNginxがインストールされました。 次のステップは、ngx_pagespeedモジュールを有効にすることです。

モジュールを有効にする前に、Webサイトのファイルをキャッシュするフォルダーを作成する必要があります。

  1. sudo mkdir -p /var/ngx_pagespeed_cache

このフォルダの所有権をNginxユーザーに変更して、Webサーバーがそのフォルダにファイルを保存できるようにしてください。

  1. sudo chown -R www-data:www-data /var/ngx_pagespeed_cache

次に、メインのNginx構成ファイルnginx.confを、次のようなお気に入りのテキストエディターで開きます。

  1. sudo nano /etc/nginx/nginx.conf

このファイルで、httpブロックに次の行を追加し、変更を保存します。

/etc/nginx/nginx.conf
##
# Pagespeed Settings
##

pagespeed on;
pagespeed FileCachePath /var/ngx_pagespeed_cache;

これらの行はhttpブロックのどこにでも追加できますが、この例では、ブロックの最後に追加しています。

/etc/nginx/nginx.confファイルは次のようになります。

/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ファイルを編集します。

  1. sudo nano /etc/nginx/sites-available/default

serverブロックの最後に以下を追加します。

/ etc / nginx/sites-利用可能
#  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サーバーを再起動します。

  1. sudo service nginx restart

ステップ5—インストールをテストする

ngx_pagespeedモジュールが正常にインストールされているかどうかを確認するには、次のようにNginxバイナリを実行します。

  1. sudo /usr/sbin/nginx -V

インストールが成功すると、他のモジュールの中でngx_pagespeedモジュールが一覧表示されます。

Output
nginx version: nginx/1.4.6 ... --add-module=/home/your_user/custom-nginx/nginx-1.4.6/debian/modules/ngx_pagespeed

上記は、ページ速度が有効になっていて、サイトで機能することをまだ意味していません。 これを確認するには、curl、ツール、およびクライアント側のURL転送用のライブラリを使用できます。 curlがまだインストールされていない場合は、次のコマンドを使用してインストールします。

  1. sudo apt-get install curl

その後、次のようにX-Page-Speedヘッダーを確認します。

  1. curl -I -p http://localhost| grep X-Page-Speed

ngx_pagespeedモジュールが正常に機能する場合は、バージョンとともに出力に表示されます。

Output
X-Page-Speed: 1.9.32.6-7321

このヘッダーが表示されない場合は、前の手順の手順に従ってページスピードが有効になっていることを確認してください。

ステップ6—カスタムNginxパッケージを固定する

カスタムNginxパッケージが将来aptに置き換えられないようにするには、次の手順でパッケージがアップグレードされないように固定(保持)する必要があります。

/etc/apt/preferences.dに新しいnginxファイルを作成します。

  1. sudo nano /etc/apt/preferences.d/nginx

次に、次の行を貼り付けて保存します。

/etc/apt/preferences.d/nginx
Package: nginx-light
Pin: version 1.4.6-1ubuntu3.3-pagespeed
Pin-Priority: 1001

使用することにしたNginxパッケージを必ず指定してください。 この例では、nginx-lightでした。 また、1.4.6-1ubuntu3.3-pagespeedなどのカスタムタグと一緒に正確なバージョンを指定します。

結論

これが、カスタムモジュールpagespeedを使用してNginxを構築する方法です。 これらの手順は、Nginxでまだ利用できない他のモジュールに対して有効です。 さらに、ソースからパッケージをインストールするプロセス全体は、カスタマイズが必要になる可能性のある他のソフトウェアパッケージと同様です。 新しいバージョンがある場合は、これらのパッケージを自分で保守して再インストールする必要があることを忘れないでください。