このエントリーをはてなブックマークに追加 Twitterでツイート ちょっとだけNGINXを

気にはなっていたけど手は出していなかった「NGINX」。さくらでVPS512で、軽く試してみた。まあ試してみたといってもホントに軽くで、次のサイトを参考に動くところまでを確認した程度である。
WordPress サイトに nginx を導入する
nginx+php-fpmをyumでインストールして、WordPress/CakePHPを動かす設定

ものぐさなので、NGINXはコンパイルせず安定版の1.0.8をインストール。PHPは、上記サイトで紹介されていた「spawn-fcgi」と「php-fpm」の両方を試してみた。なおWordPressは3.2.1をwpディレクトリにインストール済みでパーマリンクで「/%category%/%postname%.html」、apacheで動作させていたので、htdocs関連のソースはそのまま利用することにしました。

「NGINX」、「spawn-fcgi(php-fastcgi)」「php-fpm」それぞれをサービス登録。ここまではコピペでさくさく。nginx.confを慣れないviで地味に編集していく。
最初にやったのはPHP(fastcgi)の設定。赤字の部分を修正し、青字の部分を追加しました。

http {
    server {
        listen       80;
        server_name  example.com;

        location / {
            root   /var/www/html;
            index  index.php index.html index.htm;
        }

        location ~ \.php$ {
            root           /var/www/html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /var/www/html$fastcgi_script_name;
            include        fastcgi_params;
        }
    }
}

nginx.confを保存したら、apacheを停止させ、nginxとphp-fpmをスタート。お馴染みのTwentyElevenテーマでトップページが表示することを確認。次に「サンプルページ」を表示させてみたのですが、こちらはNG。NGINXではapacheの.htaccessは効かないので、それに相当する設定をnginx.confに指定する必要があるということ。そこで、さきほどコピペで修正したnginx.confのindexの記述の後に次の内容を追加。

            if (!-e $request_filename) {
                rewrite ^(.+)$  /index.php last;
            }

これでリクエストされたファイルが見つからない場合は/index.phpに振り分けられるようになり、投稿ページが表示されるようになった。

基本的にWordPressのサイトが表示できるようになったところで、php-fpmをいったん停止させ、php-fastcgiを実行。パフォーマンス的な違いがあるのかをapacheのabコマンドで比べてみたが、php-fastcgiのほうが多少スコアがよかったので、こちらを本命に変更した。

さて後やったことは、レスポンスのgzip圧縮。こちらは次の内容をserver指定の前に追加した。

    gzip             on;
    gzip_proxied     expired no-cache no-store private auth;
    gzip_types       text/css application/x-javascript;
    gzip_disable     "MSIE [1-6]\.";
    gzip_disable     "Mozilla/4";

    server {
        listen       80;

1.0.8ではgzipをonにすると、text/htmlやimage/pngといったいくつかのmimeタイプはgzipの圧縮対象になり、gzip_typesでそれらを指定すると、nginx起動時に重複している旨のエラーメッセージが表示される。ここではデフォルトで有効にならなかったCSSのJavaScriptファイル用を追加。また、gzip圧縮に対応していないブラウザとしてIE 6以下とMozilla/4を除外するようにしている。実際にgzip圧縮で送信されているかどうかは、Chromeの「デベロッパーツール」「Network」などで確認できる。デフォルトではimage/jpegも有効になっているのだが、JPEGイメージはあまり圧縮できないのが一般的なので、デフォルトから外してもいいんじゃないかと思う。

再度に微調整したのはnginx.confの冒頭で指定されていたworker_processesの値。

worker_processes  2;

あまり有効ではないかもしれないが、こちらを1から2に変更。VPSのCPU割り当てによっては多少効果があると思う。こちらはサーバーのCPUのプロセッサー数(スレッド数かも)次第で適宜指定すればいいだろう。

とやったことはここまで。プロキシーキャッシュは、少し試したけどコントロールが難しそうなのでやめちゃいました :smile:

投稿日:2011年10月17日
  • ※コメントは、スパム対策などのためIPアドレスにて制限しております。
  • ※誹謗や中傷、スパムなど、不適切な内容は公開いたしません。ご了承ください。