本当に勢いだけで参加させて頂いた FuelPHP Advent Calendar 2011 23日目 担当 @akibe です。
昨日22日は @kenji_s さんの「 FuelPHP でのセキュリティ対策(2) 」でした。
丁度 Nginx に FuelPHP入れる時、あまり纏まった情報が見つからなかったので、
今回はその設定と手順をメモしてみました。
インストール
FuelPHPのインストールはNginxとか関係ないので、通常通りインストールします。
インストールには、公式サイトのマニュアル通り、oil を使ったインストールが簡単です。
尚、ユーザーに sudo 権限があることと、Gitがインストールされている必要があります。
FuelPHPはコマンドライン無しでインストールも稼働も可能ですが、使える場合は使った方が楽です。
$ curl get.fuelphp.com/oil | sh
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 244 100 244 0 0 396 0 --:--:-- --:--:-- --:--:-- 0
[sudo] password for username:
これで oil コマンドがインストールされました。
次に、サーバのウェブディレクトリに行って、oilコマンドでFuelPHPのプロジェクトを作成します。
$ cd /var/www/
$ oil create hogehoge
これで /var/www/hogehoge にFuelPHPがインストールされました。
手動でファイルをインストールする場合
sudo権限とかGitとか無い場合は、手動でもインストール可能です。
フレームワークをダウンロードします。
http://docs.fuelphp.com/installation/download.htmlzipファイルを解凍します。
以下のディレクトリとファイルをサーバにアップロードします。
fuel/ app/ core/ packages/ public/ .htaccess assets/ index.php oil以下のディレクトリの権限を書き込み可能にします。
fuel/app/cache fuel/app/logs fuel/app/tmp fuel/app/config
これで完了です。
Nginxの設定
FuelPHPに含まれる .htaccess ファイルのrewrite設定等を、
Nginx用のホスト設定に try_files で書き換えて設定してあげます。
ドメインやディレクトリパスは適宜変更してください。
server {
listen 80;
server_name hogehoge.example.com;
access_log /var/log/nginx/hogehoge.access.log;
error_log /var/log/nginx/hogehoge.error.log;
root /var/www/hogehoge/public;
charset utf-8;
index index.php;
# すべてのアクセスをindex.phpに振ります。
location / {
try_files $uri /index.php?$uri&$args;
}
# phpを実行できるようにします。
location ~ .*\.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#fastcgi_param FUEL_ENV production; #リリース時にはコメントを外して有効にします。
include fastcgi_params;
}
# すべての不可視ファイルをアクセス不可にします。
location ~ /\. {
access_log off;
log_not_found off;
deny all;
}
}
publicをルートにできない場合
サーバの都合でpublicをルートにできない場合は、上のコードの location / {…} のブロックを以下のようにします。
# すべてのアクセスをindex.phpに振ります。
location / {
try_files $uri /public/index.php?$uri&$args;
}
# FuelPHPの実行ファイルをアクセス不可にします。
location /fuel/ {
deny all;
}
これで、ルートにアクセスしても、public/index.php を呼び出してくれます。
また、この配置だとFuelPHPの実行ファイルが見えてしまうので、アクセス不可にします。
サブディレクトリに置く場合
さらに、既存サイトの一部分に使う等で、サブディレクトリに入れる場合は、以下のようになります。
location ~ ^/sub_directory/(.*)$ {
try_files $uri /sub_directory/public/$1 /sub_directory/public/index.php?$1;
}
location /sub_directory/fuel/ {
deny all;
}
この場合、設定ファイル「fuel/app/config/config.php」の base_url の設定も必要です。
'base_url' => null,
↓
'base_url' => '/sub_directory/',
リリース時の環境変数の変更
FuelPHPはデフォルトの設定で、詳細なエラー表示や、デバッグ用の設定ができるように、開発モードにセットされています。リリース時にはこれを切り替える為に、環境変数 FUEL_ENV に production を設定する必要があります。
Nginxで記述する場合は、location ~ .*\.php$ {…} のブロックに fastcgi_param で設定します。
location ~ .*\.php$ {
...
fastcgi_param FUEL_ENV production;
}
動作チェック
rewrite がちゃんと動いているか確認する為に、 /hello/akibe にアクセスしてみましょう。
http://hogehoge.example.com/hello/akibe

「Hello,akibe!」と表示されればOKです。
最後に
基本的にApache向けのシステムをNginxで動かす時に変更しなくちゃいけないのはrewriteの設定なのですが、慣れないうちは意外と悩み所なので、参考になればと思います。
FuelPHPはやっと触り始めた段階ですが、サクリと何か作るには非常にレスポンスが良くていいフレームワークのような気がします。 scaffoldとか使いこなせるようになれば、かなり素早く開発ができそう。
あと、開発にCodeIgniterの開発者も参加してるそうですが、ネーミングが点火装置とかオイルとか燃料とか、。
このノリは嫌いじゃないです。;-P
いよいよ FuelPHP Advent Calendar 2011 もあと2日。
明日24日は @kenji_s さんの「 FuelPHP でのセキュリティ対策(3) 」です。