CentOS7のNginxにngx_pagespeedを追加する方法
序章
ngx_pagespeed、または単にpagespeedは、リソースのサイズを縮小し、クライアントのブラウザがサイトを読み込む必要がある時間を短縮することで、サイトを自動的に最適化するように設計されたNginxモジュールです。 まだご存じない方は、公式サイトをご確認ください。
この記事では、Nginxのpagespeedモジュールのインストールと構成について説明します。 Nginxは、Apacheなどの他のWebサーバーで利用可能なモジュールの動的ロードをサポートしていないことを知っておくことが重要です。 Nginxはこの機能をサポートしていないため、モジュールを追加するには、ソースからNginxをビルドする必要があります。
独自のカスタムパッケージを使用することには、1つの欠点があります。新しいバージョンがある場合は、それを更新する責任はユーザーが単独で負うことになります。 ngx_pagespeedを使用することの長所と短所を比較検討するときは、これを考慮に入れてください。
前提条件
このガイドはCentOS7用に作成されています。 Ubuntu14.04バージョンとDebian8バージョンも利用できます。
このチュートリアルを実行する前に、次の前提条件を満たしていることを確認してください。
- CentOS7ドロップレット
- ルート以外のsudoユーザー(詳細については、 CentOS 7 を使用した初期サーバーセットアップを確認してください。)
特に明記されていない限り、このチュートリアルでroot権限を必要とするすべてのコマンドは、sudo権限を持つroot以外のユーザーとして実行する必要があります。
ステップ1—ソースとその依存関係をダウンロードする
Nginxのコンパイルとテストに必要なソフトウェアがすべて揃っていることを確認することから始めましょう。 次のコマンドを実行してください:
- sudo yum install wget curl unzip gcc-c++ pcre-devel zlib-devel
次に、ホームディレクトリにフォルダを作成して、Nginxのソースパッケージをダウンロードします。
- mkdir ~/custom-nginx
この新しく作成されたディレクトリに移動します。
- cd ~/custom-nginx
次に、このディレクトリのNginxソースパッケージをその公式サイトからダウンロードします。 現在、最新バージョンは1.8.0であり、次のコマンドでダウンロードできます。
- sudo wget http://nginx.org/download/nginx-1.8.0.tar.gz
その後、次のコマンドを使用して、新しくダウンロードしたパッケージを抽出します。
- sudo tar zxvf nginx-1.8.0.tar.gz
同じページにいることを確認するには、フォルダ~/custom-nginx
の内容を一覧表示します。
- ls ~/custom-nginx
結果は次のようになります。
Output of ls ~/custom-nginxnginx-1.8.0 nginx-1.8.0.tar.gz
ご覧のとおり、このチュートリアルの執筆時点では、Nginxソースパッケージのバージョンは1.8.0です。 ngx_pagespeedモジュールの追加を開始するには、最初に、抽出されたフォルダーnginx-1.8.0
内のmodules
フォルダーに移動する必要があります。
- cd nginx-1.8.0/src/http/modules/
このディレクトリで、次のコマンドを使用して、Githubリポジトリから最新のngx_pagespeedソースアーカイブをダウンロードします。
- sudo wget https://github.com/pagespeed/ngx_pagespeed/archive/master.zip
ダウンロードが完了したら、次のようなunzip
ユーティリティを使用してダウンロードします。
- sudo unzip master.zip
これにより、~/custom-nginx/nginx-1.8.0/src/http/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.4.6/debian/modules/ngx_pagespeed
ディレクトリ内にpsolパッケージを抽出します。
- sudo tar -xzvf 1.9.32.6.tar.gz
ステップ2—ソースを構成してコンパイルする
この時点で、Nginxソースを構成し、pagespeedモジュールを含める準備ができています。 Nginxソースの親ディレクトリに移動します。
- cd ~/custom-nginx/nginx-1.8.0/
次に、次のコマンドを使用してソースの構成を実行します。
- sudo ./configure --add-module=/home/your_user/custom-nginx/nginx-1.8.0/src/http/modules/ngx_pagespeed/ --user=nobody --group=nobody --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid
上記の中で最も重要な構成オプションは--add-module=/home/your_user/custom-nginx/nginx-1.8.0/src/http/modules/ngx_pagespeed/
です。 これにより、pagespeedモジュールがNginxコンパイルの一部になることが保証されます。 このパスでは、必ずyour_userをユーザーに置き換えてください。
便宜上、ログファイルの場所や、サーバーを実行するユーザー/グループなど、他のいくつかの設定をカスタマイズしました。 カスタマイズできるものの詳細については、コンパイル時オプションのドキュメントを確認してください。
構成が完了したら、次のコマンドを使用してコンパイルを開始します。
- sudo make
ドロップレットのリソースにもよりますが、これには最大10分かかります。 その後、次のコマンドでソフトウェアをインストールできます。
- sudo make install
カスタムNginxはディレクトリ/usr/local/nginx
にインストールされています。 さらに便利にするために、2つのシンボリックリンクを作成しましょう。 まず、構成ファイルについて:
- sudo ln -s /usr/local/nginx/conf/ /etc/nginx
このコマンドを使用すると、通常は構成ファイルが存在する/etc/nginx/
ディレクトリで構成ファイルを見つけることができます。
また、/usr/sbin/
ディレクトリにメインバイナリへのシンボリックリンクを作成して、より簡単に見つけて起動スクリプトに含めることができるようにする必要があります。 これは、後で使用する起動スクリプトにも必要になります。 この目的のために、次のコマンドを実行します。
- sudo ln -s /usr/local/nginx/sbin/nginx /usr/sbin/nginx
ステップ3—スタートアップスクリプトを作成する
前のインストールプロセスは、Nginxが実行される必要なnobodyユーザーとグループの作成など、いくつかのありふれたタスクを処理します。 ただし、手動で起動スクリプトを作成する必要があります。 幸い、CentOS 7のNginxには、nginx.comですぐに利用できるものがすでにあります。
まず、ディレクトリ/etc/init.d/
に新しいファイルを作成します。
- sudo nano /etc/init.d/nginx
次に、 https://www.nginx.com/resources/wiki/start/topics/examples/redhatnginxinit/ に移動し、スクリプトをコピーして、この新しいファイルに貼り付けます。
最後に、次のコマンドを実行して、このスクリプトを実行可能にします。
- sudo chmod +x /etc/init.d/nginx
その後、次のコマンドで初めてNginxを起動できます。
- sudo service nginx start
ドロップレットを使用してNginxが毎回開始および停止するようにするには、次のコマンドを使用して、ドロップレットをデフォルトのランレベルに追加します。
- sudo chkconfig nginx on
ステップ4—Pagespeedモジュールを有効にする
これでNginxがインストールされました。 次のステップは、ngx_pagespeedモジュールを有効にすることです。
モジュールを有効にする前に、Webサイトのファイルをキャッシュするフォルダーを作成する必要があります。
- sudo mkdir -p /var/ngx_pagespeed_cache
このフォルダの所有権をNginxユーザーに変更して、Webサーバーがそのフォルダにファイルを保存できるようにしてください。
- sudo chown -R nobody:nobody /var/ngx_pagespeed_cache
次に、メインのNginx構成ファイルnginx.conf
を、次のようなお気に入りのテキストエディターで開きます。
- sudo nano /etc/nginx/nginx.conf
このファイルで、server
ブロックに次の行を追加し、変更を保存します。
##
# Pagespeed main settings
pagespeed on;
pagespeed FileCachePath /var/ngx_pagespeed_cache;
# 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" { }
これらの行はブロック内のどこにでも追加できますが、この例では、ブロックの最後に追加しています。
/etc/nginx/nginx.conf
ファイルは次のようになります。
...
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
##
# Pagespeed main settings
pagespeed on;
pagespeed FileCachePath /var/ngx_pagespeed_cache;
# 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" { }
location / {
root html;
index index.html index.htm;
}
...
また、すべての追加のserver
ブロックファイルにpagespeed構成行を追加してください。
最後に、変更を有効にするためにNginxサーバーを再起動します。
- sudo service nginx restart
ステップ5—インストールをテストする
ngx_pagespeedモジュールが正常にインストールされているかどうかを確認するには、次のようにNginxバイナリを実行します。
- sudo /usr/sbin/nginx -V
インストールが成功した場合は、他のカスタム引数の中にngx_pagespeedモジュールがリストされているはずです。
Outputnginx version: nginx/1.8.0
...
configure arguments: --add-module=/home/your_user/custom-nginx/nginx-1.8.0/src/http/modules/ngx_pagespeed/
...
上記は、ページ速度が有効になっていて、サイトで機能することをまだ意味していません。 これを確認するには、curl
、ツール、およびクライアント側のURL転送用のライブラリを使用できます。 これを使用して、次のようにX-Page-Speed
ヘッダーを確認します。
- curl -I -p http://localhost| grep X-Page-Speed
ngx_pagespeedモジュールが正常に機能する場合は、バージョンとともに出力に表示されます。
OutputX-Page-Speed: 1.9.32.6-7321
このヘッダーが表示されない場合は、前の手順の手順に従ってページスピードが有効になっていることを確認してください。
結論
これが、カスタムモジュールpagespeedを使用してNginxを構築する方法です。 これらの手順は、Nginxでまだ利用できない他のモジュールに対して有効です。 さらに、ソースからパッケージをインストールするプロセス全体は、カスタマイズが必要になる可能性のある他のソフトウェアパッケージと同様です。 新しいバージョンがある場合は、これらのパッケージを自分で保守して再インストールする必要があることを忘れないでください。