NGINX + FastCGIでCakePHP環境構築 - Ubuntu 10.04編
CakePHPをUbuntu 10.04にNGINX+fast-cgiで構築する手順のメモです。
この内容は、ほぼこちらの記事の翻訳になります。
http://kevin.vanzonneveld.net/techblog/article/cakephp_and_nginx/
NGINXをfast-cgiで動作するPHPと連携する場合、lighttpdのCGIをプロセス実行するモジュールspawn-fcgiを利用します。
Ubuntu 10.04では標準の、リポジトリからNGINXおよびfast-cgi、spawn-fcgiをインストールできます。
spawn-fcgiは、aptでインストールしてもデーモンとしてインストールされないので、手動でデーモンとして登録する必要があります。
Ubuntu 10.10ではspawn-fcgiではなくPHP-FPMというモジュールを利用することが可能です。以下のページを参照:
http://www.howtoforge.com/installing-nginx-with-php5-and-php-fpm-and-mysql-support-on-ubuntu-10.10
swanp-cgiはデーモンの設定は手動で行う必要がありますが、PHP-FPMはaptを使って自動でデーモンとしてインストールすることができます。
ただし、PHP-FPMは非常に不安定だと、kevinさんのサイトに書いてあります。
以降、NGINXでCakePHPを動作させる必要最低限の手順を説明します。
NGINXのインストール
$ sudo apt-get install nginx
swanp-cgiをデーモンとして設定する
swanp-cgiはポート9000で起動するように設定します。
$ sudo vi /etc/init.d/spawn-fcgi
以下のスクリプトは、https://github.com/kvz/kvzlib/blob/master/configs/spawnfcgi_initdに掲載されています。
#!/bin/sh USER=www-data GROUP=www-data PATH=/sbin:/bin:/usr/sbin:/usr/bin SSD="/sbin/start-stop-daemon" PHP_FCGI_CHILDREN=10 PHP_FCGI_MAX_REQUESTS=1000 RETVAL=0 FCGI_DAEMON="/usr/bin/spawn-fcgi" FCGI_PROGRAM="/usr/bin/php5-cgi" FCGI_PORT="9000" FCGI_SOCKET="/tmp/php-fastcgi.sock" FCGI_PIDFILE="/var/run/spawn-fcgi.pid" #test -x $LIGHTY_DAEMON || exit 0 set -e export PHP_FCGI_CHILDREN PHP_FCGI_MAX_REQUESTS FCGI_WEB_SERVER_ADDRS . /lib/lsb/init-functions case "$1" in start) log_daemon_msg "Starting spawn-fcgi" if ! $FCGI_DAEMON -p $FCGI_PORT -f $FCGI_PROGRAM -u $USER -g $GROUP -C $PHP_FCGI_CHILDREN -P $FCGI_PIDFILE; then log_end_msg 1 else log_end_msg 0 fi RETVAL=$? ;; stop) log_daemon_msg "Killing all spawn-fcgi processes" if killall --signal 9 php5-cgi > /dev/null 2> /dev/null; then log_end_msg 0 else log_end_msg 1 fi RETVAL=$? ;; *) echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2 exit 1 ;; esac exit $RETVAL
spwan-fcgiに実効権限をつけて、デーモンとして登録します。
$ sudo chmod u+x /etc/init.d/spawn-fcgi $ sudo update-rc.d spawn-fcgi defaults
spwan-fcgiを起動しておきます。
/etc/init.d/spawn-fcgi start
NGINXにCakePHPへの構成を設定する
$ sudo vi /etc/nginx/sites-available/default
server { listen 80; server_name example.com www.example.com; access_log /var/log/nginx/example.com.access.log; error_log /var/log/nginx/example.com.error.log; rewrite_log on; root /var/www/example.com/app/webroot; index index.php index.html index.htm; # Not found this on disk? # Feed to CakePHP for further processing! if (!-e $request_filename) { rewrite ^/(.+)$ /index.php?url=$1 last; break; } # Pass the PHP scripts to FastCGI server # listening on 127.0.0.1:9000 location ~ \.php$ { # fastcgi_pass unix:/tmp/php-fastcgi.sock; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_intercept_errors on; # to support 404s for PHP files not found fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } # Static files. # Set expire headers, Turn off access log location ~* \favicon.ico$ { access_log off; expires 1d; add_header Cache-Control public; } location ~ ^/(img|cjs|ccss)/ { access_log off; expires 7d; add_header Cache-Control public; } # Deny access to .htaccess files, # git & svn repositories, etc location ~ /(\.ht|\.git|\.svn) { deny all; } }
NGINXをリスタートします。
$ sudo /etc/init.d/nginx restart
以上で、セットアップ終了です。