blogPHPでWEB+DBシステムの開発をやっています。42分42秒www.1×1.jpの環境をApache+mod_phpな環境から、nginx+php-fpmな環境へ移行しました。さくらVPSのCentOS5.5環境にnginx+php-fpmをyumでインストールして、CakePHPとWordPressを動かす設定を行いました。このエントリでは導入ということで、インストールから、とりあえず動作するところまでをご紹介します。構成nginx+php-fpm環境にCakePHPとWordPressをインストールします。それぞれ以下のURLでアクセスできるようにします。インストールnginxとphp-fpmだとソースからインストールするパターンが多いですが、ここではyumでインストールします。remiリポジトリを登録します。yumでインストールnginxとphp-fpmをyumでインストールします。1-1で登録したremiリポジトリを指定することを忘れないようにしましょう。他にphp-mbstringやphp-cliなんかもいれてますが、このあたりはお好みで。--enablerepo=remi2011/05/16現在インストールされるバージョンは以下です。nginxの設定nginxの設定を行います。/etc/nginx/nginx.confがメインの設定ファイルになっているのでこれを編集します。Apacheの設定を知っていれば何となく理解できるかと思いますが、リクエストURIがlocationディレクティブにマッチすれば該当ブロックの設定が適用されます。バージョン情報の出力をoffHTTPレスポンスヘッダやエラーページでnginxのバージョン情報を出力しないようにします。gzipをongzipをonにします。/blogをWordPressに/blogというURLに対してWordPress用の設定を行っています。内容はなんとなく分かるかと思いますが、前半のブロックでApacheでいうmod_rewriteのような設定を行っています。これにより存在しないディレクトリ、ファイルへのアクセスがあった場合は/blog/index.php?q=PATHへURLをリライトします。後半のブロックがphp-fpm(FastCGI)の設定です。^/blog/.+\.php$にマッチするリクエストであれば、php-fpmへリクエストを送信します。/blog以外のURLはCakePHPに/blog以外のURLに対してCakePHP用の設定を行っています。2-3と同じく、前半のブロックでURLリライトの設定を行っています。存在しないディレクトリ、ファイルへのアクセスがあった場合は/index.php?url=PATHへURLをリライトします。後半のブロックでは、\.php$にマッチするリクエストであれば、php-fpmへリクエストを送信します。.svnはアクセスできないようにしています。次にphp-fpmを設定します。yumでインストールすると設定ファイルが/etc/php-fpm.confと/etc/php-fpm.d/www.confに配置されます。php-fpm.confはとりあえずデフォルトのままで、www.confを編集します。変更するのは4箇所です。実行ユーザphp-fpmの実行ユーザをnginxと同一にしておきます。実行グループ実行ユーザと同じく実行グループもnginxと同一にしておきます。プロセス生成方法php-fpmの実行プロセス生成方法を指定します。動的にプロセス数を増減するならdynamicを、設定したプロセス数に固定するならstaticを指定します。ここでは利用するリソースが把握しやすいstaticにします。生成するphp-fpmプロセス数を指定します。ここでは10プロセスを生成します。pm.max_spare_serversといったプロセス数に関する設定がありますが、pm=staticの場合は影響ありません。expose_phpをoffにHTTPレスポンスヘッダに含まれるPHPバージョン情報を出力しないようにexpose_phpをoffにしています。このようにPHP関連の設定はwww.confで記述することもできます。(もちろんphp.iniで設定しても良いです。php-fpmの起動nginxとphp-fpmを起動します。start起動に成功すれば、0.0.0.0:80と127.0.0.1:9000がLISTENになっているはずです。サーバ起動時に自動実行されるようにchkconfigで登録しておきます。WordPressをインストールすればokです。実際に使ってみてApache+mod_phpからの移行ということで基本Apache感覚で触りだしたわけですが、つまづいたというか気になったことを。AliasはaliasでApacheのAliasのようなことをやりたい場合、locationディレクティブでURIを指定して、そのブロック内ではrootではなく、aliasにてディレクトリを指定します。.htaccessは使えないCakePHPでもWordPressでも使われている.htaccessですが、nginxでは利用できません(反映されません)。nginxには.htaccessのようにサーバが設定ファイルを再読込することなく設定を動的に変更する方法はありません。.htaccessで指定するような、アクセス制御、mod_rewrite、Basic認証等はnginx.confなどの設定ファイルにて記述し、nginxを再起動(再読込)を実行して設定ファイルを反映します。Digest認証がないnginxにはDigest認証を実現するモジュールは無いようです。以前はDigest認証を利用している箇所があったのですが、Basic認証は利用できるのでHTTPS+Basic認証で代用しました。PHP関連の設定を変更したらphp.iniやwww.confでPHP関連の設定を変更した場合、php-fpmを再起動(再読込)します。nginxを再起動したところでphp-fpmには反映されませんのでご注意を。/index.php?url=URLというURLへrewriteして処理を行います。いった状況で画面が真っ白になるという現象がありました。指定したパスに存在しない(アクセスできない)とこういった現象になるようです。どちらのログにも何も出力されなかったのではじめは嵌りました。同じ現象になった際はnginx.confのSCRIPT_FILENAMEの設定を確認してみて下さい。現時点(2011/05/19)で日本語で書かれたnginx解説本がこれしか無いということもありますが、nginxをこれから利用するにとっては分かりやすく解説されています。このあと30ページほどnginxをインストールする内容があって、ようやく本編がはじまります。その後はしっかりとnginxについて解説されていますのでご安心を。各ディレクティブの設定については公式WikiをはじめWebに情報があるのですが、設定の基本的な思想や細かなTipsなどは書籍にまとまっていると理解しやすいですね。php-fpmとの連携やApacheとの連携(リバースプロキシ)、Apacheからの移行なども簡単に解説されているので、Apahce+mod_phpから移行しようかなという方は一度手にとってみてください。サーバとしても軽くて良いですし。動作させてるので助言を一つ。利用することができます。以下のように書けば対応できます。相当するパラメータです。10:12wokamotoさん:はじめまして。コメントありがとうございます!nginx良いですね。静的ファイルを捌くならかなり軽いので重宝しています:D設定についてアドバイスありがとうございます−。files」にならないようにファイルディスクプリタの上限値にも気を付けたいですね。気にはなっていたけど手は出していなかった「NGINX」。さくらでVPS512で、軽く試してみた。試してみたといってもホントに軽くで、次のサイトを参考に動くところまでを確認した程度である。参考サイトの環境そのままですが、WordPressとCakePHPと振り分けているわけではないので、そこだけ単純な設定にしています。apacheからnginxへ。