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 ライフを!
ピンバック: 2013-01-25のニュース | Re: spam news
ピンバック: Daily Digest for 2013/01/24 | cync.jp
ピンバック: Nginxでngx_pagespeedを使ってみたよ。 | アーシタン開発者ブログ