Nginx と FuelPHP 入れてみた
速いと噂の Nginx と何かといいらしい FuelPHP を導入してみた。導入だけだと簡単なので、hoge.foo.com に新しくサイトを作るという想定で Apache/Nginx、FuelPHP の設定をメモしておく。
FuelPHPの導入
まずは FuelPHP。こいつは git と CLI 版の PHP が必要なので入れておく。前回紹介した PHP の導入では CLI 版は入らないので、--enable-cli オプションつけてコンパイルし直すこと。一応追記してある。
で、導入は非常に簡単で下記のコマンドを叩くだけでいい。
# curl get.fuelphp.com/oil | sh
そしてバーチャルホストのディレクトリまで移動して雛形を作る。仮に /var/www/hoge とする。雛形を作るのも非常に簡単で、
oil create [ディレクトリ名]
とすればいい。
# cd /var/www # oil create hoge # chown apache:apache hoge # cd hoge # php oil refine install # これで一発で権限を変更してくれる
これだけで FuelPHP の導入は完了。超簡単。
Nginxの導入
Nginx も導入は簡単で、公式サイトが yum リポジトリを作って公開してくれているので、最新版も yum で管理できる。現時点で 1.2.0。超便利。このへんから rmp の情報は確認できる。今回は CentOS 6.2 なので、CentOS 6 用のリポジトリを入れる。
# cd /usr/local/src # wget http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm # rpm -ivh nginx-release-centos-6-0.el6.ngx.noarch.rpm # yum -y install nginx
yum で入れた場合の起動停止処理は /etc/init.d/nginx で start/stop/restart 等行えば良い。
設定ファイルは /etc/nginx/ 以下にある。Apache と同じようにメインは nginx.conf で、細かい設定は Include できるようになっており、デフォルトでは /etc/nginx/conf.d/ 以下の conf ファイルをすべて読むようになっている。
ログに関しては /var/log/nginx 以下に出るようになっている。
これらの設定を変更してバーチャルホストにアクセスできるようにしてみる。
まずは /etc/nginx/nginx.conf を編集。ユーザーを nginx じゃなくて apache に統一する。多分これは www-data とかに統一したほうがスマートなんだと思うけど、すでに apache で動いてるものがあるのでとりあえず今は apache にしておく。
user nginx; ↓ user apache;
それから Include の方のサンプルは全部バックアップして読み込まない様にしておく。
# mv /etc/nginx/conf.d{,.bak} # mkdir -m 755 /etc/nginx/conf.d
バーチャルホストの conf ファイルを編集する。今回は SSL の設定も一緒に書いてみた。先日ブログに書いた自己証明書を用いているので、きちんとしたサイトならしかるべき認証局から証明書を発行してもらうこと。
# vim /etc/nginx/conf.d/hoge.conf
server { listen 80; server_name hoge.foo.com; root /var/www/hoge/public/; charset utf-8; index index.php; access_log /var/www/hoge/fuel/app/logs/nginx.log main; error_log /var/www/hoge/fuel/app/logs/error.log warn; # 静的ファイルは nginx で処理 location ~ .*\.(jpg|JPG|gif|GIF|png|PNG|swf|SWF|css|CSS|js|JS|inc|INC|ico|ICO) { expires 1d; break; } # その他は Apache へ location / { try_files $uri /index.php?$uri; proxy_set_header Host $host; proxy_set_header X-RealIP $remote_addr; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://127.0.0.1:8080; break; } # すべての不可視ファイルをアクセス不可に location ~ /\. { access_log off; log_not_found off; deny all; } } server { listen 443; server_name hoge.foo.com; root /var/www/hoge/public/; charset utf-8; index index.php; access_log /var/www/hoge/fuel/app/logs/nginx-ssl.log main; error_log /var/www/hoge/fuel/app/logs/error.log warn; # SSL は nginx で処理 ssl on; ssl_certificate /etc/pki/tls/certs/server.crt; ssl_certificate_key /etc/pki/tls/certs/server.key; ssl_session_timeout 5m; ssl_protocols SSLv2 SSLv3 TLSv1; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; # 静的ファイルは nginx で処理 location ~ .*\.(jpg|JPG|gif|GIF|png|PNG|swf|SWF|css|CSS|js|JS|inc|INC|ico|ICO) { expires 1d; break; } # その他は Apache へ location / { try_files $uri /index.php?$uri; proxy_set_header Host $host; proxy_set_header X-RealIP $remote_addr; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://127.0.0.1:8080; break; } # すべての不可視ファイルをアクセス不可に location ~ /\. { access_log off; log_not_found off; deny all; } }
Nginx は静的なファイルの処理が速いので、画像やJSなどのコンテンツ、それから SSL の対応をしてもらう。PHP のような動的な部分を Apache で処理する。そして FuelPHP のルーティングが上手くいくように try_files を使ってリダイレクトを行っている。編集が完了したら Nginx を起動する。
# /etc/init.d/nginx start
Apache の設定
Nginx から Apache にプロキシするために、Apache にも設定を加える。フロント側に Nginx をたてるので、もちろん Apache は 80 で Listen はできなくなる。今回は 8080 ポートで待ち受ける。このときサーバー自体の 8080 ポートは閉じたままでよい。また、Apache は SSL の処理をしなくても良いので、8443 番ポート等での待ち受けもしなくてよい。
NameVirtualHost と Include の設定がなければ追加する
# vim /usr/local/apache2/conf/httpd.conf
NameVirtualHost 8080 Include conf.d/*.conf
次にバーチャルホスト用の設定ファイルを編集。
# vim /usr/local/apache2/conf.d/hoge.conf
<VirtualHost *:8080> ServerAdmin admin@foo.com DocumentRoot "/var/www/hoge/public" ServerName hoge.foo.com ServerAlias hoge.foo.com ErrorLog "/var/www/hoge/fuel/app/logs/error.log" CustomLog "/var/www/hoge/fuel/app/logs/access.log" common <Directory "/var/www/hoge/public"> Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> <FilesMatch "^\.ht"> Order allow,deny Deny from all Satisfy All </FilesMatch> </VirtualHost>
こんな感じで編集が完了したら、Apache を再起動しておく。
# /usr/local/apache2/bin/apachctl stop # /usr/local/apache2/bin/apachctl start
サイトの確認
ここまできたらとりあえず FuelPHP の Welcome ページが見れると思う。
http://hoge.foo.com
http://hoge.foo.com/hello
http://hoge.foo.com/hello/俺
http://hoge.foo.com/bad/uri
https://hoge.foo.com
それぞれ確認してみるべし。
んで、せっかくなので自分でも Hello world をやってみる。こちらのサイトを参考にした。
まずはコントローラークラス
# vim fuel/app/classes/controller/sample1.php
<?php class Controller_Sample1 extends Controller { public function action_index() { return Response::forge(View::forge('sample1/index')); } }
そしてビューを作成
# mkdir -m 755 fuel/app/views/sample1
# vim fuel/app/views/sample1/index.php
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>Sample1</title> </head> <body> <h1>Hello,World!</h1> <p>これはsample1のビューファイルです</p> </body> </html>
ページを確認してみる。
http://hoge.foo.com/sample1
これでとりあえず一連の導入作業は完了。