Nginx 用 pagespeed モジュール ngx_pagespeed を試してみたよ

Google が提供してくれている高速化モジュール mod_pagespeed ですが、今までは Apache サーバ用のモジュールしかありませんでした。
以前、安定板が出た時に試してみましたが、中々感触が良かったです。
Apache サーバ向け高速化モジュール mod_pagespeed

Nginx 用のモジュールも提供してくれないかなーとか思ってたら出てましたよ!奥さん!
というわけで、とりあえずインストールしてみました。
どんな状況になるかは、このサイトの html ソースを見てみてください。
※:現在 ngx_pagespeed モジュールは無効にしてあります

ngx_pagespeed 入りの Nginx のビルド – インストール

Nginx では、サードパーティモジュールの動的読み込みができないため、ソースからビルドしてやる必要があります。
基本的に github の ngx_pagespeed に書いてある通りにやればビルドできます。

CentOS 6 でやるなら、こんな感じ。

Nginx のビルドとインストール

必要なライブラリのインストール

$ sudo yum install git gcc-c++ make
$ sudo yum install pcre-devel openssl-devel libxslt-devel gd-devel zlib-devel
$ sudo rpm -ivh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
$ sudo yum --enablerepo=rpmforge install geoip-devel

github から ngx_pagespeed のソースを取ってくる

$ cd ~
$ git clone https://github.com/pagespeed/ngx_pagespeed.git

Nginx の最新版ソースを取ってきてビルド

$ wget http://nginx.org/download/nginx-1.2.6.tar.gz
$ tar -xvzf nginx-1.2.6.tar.gz
$ cd nginx-1.2.6/
$ ./configure --add-module=$HOME/ngx_pagespeed
$ make
$ make install

Nginx の設定と起動

後は、nginx.conf の server ブロックに以下を追加して

pagespeed on;
pagespeed RewriteLevel CoreFilters;

# needs to exist and be writable by nginx
pagespeed FileCachePath /var/cache/ngx_pagespeed_cache;

ファイルキャッシュパスとして指定したディレクトリ( /var/cache/ngx_pagespeed_cache )は作っておいてください。

そんで、起動すればおっけ

$ sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

ngx_pagespeed モジュールが有効になっていると、リクエストした時に http ヘッダ X-Page-Speed が着いてきます。

$ wget -S --spider https://dogmap.jp/
Spider mode enabled. Check if remote file exists.
--2013-01-24 14:47:17--  https://dogmap.jp/
Resolving dogmap.jp... 175.41.250.186
Connecting to dogmap.jp|175.41.250.186|:80... connected.
HTTP request sent, awaiting response... 
  HTTP/1.1 200 OK
  Server: nginx
  Date: Thu, 24 Jan 2013 05:47:17 GMT
  Content-Type: text/html; charset=UTF-8
  Connection: keep-alive
  Vary: Accept-Encoding
  Cache-Control: max-age=0, no-cache
  X-Page-Speed: 1.1.0.0-2338
Length: unspecified [text/html]
Remote file exists and could contain further links,
but recursion is disabled -- not retrieving.

Nginx での設定

こんな感じにしてみました。

pagespeed on;
pagespeed RewriteLevel CoreFilters;
pagespeed FileCachePath /var/cache/nginx/ngx_pagespeed;
pagespeed EnableFilters collapse_whitespace,add_instrumentation,remove_comments;

pagespeed EnableFilters で有効にするフィルターを指定できます。
指定できるフィルターについては、 下記URLを参照してください。
ngx_pagespeed Examples Directory

気をつけたいのは「Cache-Control: max-age=0, no-cache」ヘッダが着いちゃうこと。
Nginx のリバースプロキシキャッシュを使用している場合、バックエンド側がこのヘッダを出しちゃうとリバースプロキシにキャッシュされないので、バックエンド側では、以下のように設定してキャッシュ時間を指示してあげましょう。

server {
    listen      8080;
    server_name example.com;
    root        /var/www/html;
    index       index.php index.html index.htm;

    access_log  /var/log/nginx/dogmap.jp.backend.access.log backend;

    keepalive_timeout 25;
    port_in_redirect  off;

    gzip              off;
    gzip_vary         off;

    add_header Cache-Control "public, max-age=43200";
    :

「add_header Cache-Control "public, max-age=43200";」で、43200秒(=12時間)キャッシュしてねって指示してます。

こんな感じかな。

おまけ

CentOS 6.3 (x86_64) 用に rpm パッケージを作ってみました。
http://dl.megumi-cloud.com/nginx-1.2.6-3.el6.x86_64.rpm

インストール方法は、こんな感じ

$ wget http://dl.megumi-cloud.com/nginx-1.2.6-3.el6.x86_64.rpm
$ sudo rpm -Uvh nginx-1.2.6-3.el6.x86_64.rpm

よい Nginx ライフを!

3 thoughts on “Nginx 用 pagespeed モジュール ngx_pagespeed を試してみたよ

  1. ピンバック: 2013-01-25のニュース | Re: spam news

  2. ピンバック: Daily Digest for 2013/01/24 | cync.jp

  3. ピンバック: Nginxでngx_pagespeedを使ってみたよ。 | アーシタン開発者ブログ

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください