ブログを始めるにあたり、wordpress 環境を構築する必要が出てきました。いつもの apache2 + mysql5 + PHP じゃつまらないので、nginx と fastcgi を使って少しだけ高速化してみました。メモですけど、ここに手順を記していきます。
※ wordpress から octopress に移行しました… (2012/03/07)
ただ、今回は nginx や mysql の基本的なオペレーション手順は割愛させてもらいます。
私の環境について…
% lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 6.0.3 (squeeze)
Release: 6.0.3
Codename: squeeze
インストールしたもの… メタパッケージを指定したのでその他必要なモノはインストールされます。
% sudo apt-get update
% sudo apt-get install spawn-fcgi php5 php5-mysql php5-cgi mysql-server nginx
まずはお決まりの gzip 圧縮転送。IE の古いモノ以外は対応しているので心配なし。今回のテーマと関係無いですけど、一応入れておきます。
% diff -u /etc/nginx/nginx.conf.org /etc/nginx/nginx.conf
--- /etc/nginx/nginx.conf.org 2012-01-14 15:27:45.000000000 +0900
+++ /etc/nginx/nginx.conf 2012-01-14 15:28:58.000000000 +0900
@@ -22,6 +22,10 @@
tcp_nodelay on;
gzip on;
+ gzip_http_version 1.0;
+ gzip_vary on;
+ gzip_comp_level 6;
+ gzip_types text/html text/xml text/css application/xhtml+xml application/xml application/rss+xml application/atom_xml application/x-javascript application/x-httpd-php;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
include /etc/nginx/conf.d/*.conf;
spawn-fcgi を稼働させるスクリプトを生成する。/usr/bin/php-fastcgi として下記の内容で保存する。
#! /bin/sh
/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 6 -u www-data -f /usr/bin/php5-cgi
% sudo chmod 755 /usr/bin/php-fastcgi
次にこれを実行する起動スクリプトの用意と実行。/etc/init.d/php-fastcgi
#!/bin/bash
### BEGIN INIT INFO
# Required-Start: $local_fs $remote_fs $network $syslog
# Required-Stop: $local_fs $remote_fs $network $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: php-fastcgi script
# Description: php-fastcgi script
### END INIT INFO
# env
SCRIPT=/usr/bin/php-fastcgi
USER=www-data
RETVAL=0
PIDFILE=/var/run/php5-cgi.pid
# start or stop
case "$1" in
start)
su - $USER -c $SCRIPT
pidof php5-cgi > $PIDFILE
RETVAL=$?
;;
stop)
killall -9 php5-cgi
echo '' > $PIDFILE
RETVAL=$?
;;
restart)
killall -9 php5-cgi
su - $USER -c $SCRIPT
pidof php5-cgi > $PIDFILE
RETVAL=$?
;;
*)
echo "Usage: php-fastcgi {start|stop|restart}"
exit 1
;;
esac
起動すると php-cgi のプロセスが立ち上がり localhost:9000 で LISTEN された状態になっているはずです。nginx はここへのプロキシのような動作をすることになります。 下記の手順で起動と起動スクリプトへの組み込みを行なってください。
% sudo chmod 755 /etc/init.d/php-fastcgi
% sudo update-rc.d php-fastcgi defaults
% sudo service php-fastcgi start
次に nginx の virtualhost を掘ります。変数 ${FQDN_HOSTNAME}, ${DOCUMENT_ROOT}は自分 の環境情報に読み替えてください。
server {
listen 80;
server_name ${FQDN_HOSTNAME}
access_log /var/log/nginx/${FQDN_HOSTNAME}.access.log;
error_log /var/log/nginx/${FQDN_HOSTNAME}.error.log;
location / {
root ${DOCUMENT_ROOT};
index index.html index.php;
}
location ~ \.php$ {
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME ${DOCUMENT_ROOT}$fastcgi_script_name;
}
}
nginx を stop/start してこれらの設定を有効にします。
% sudo service nginx stop
% sudo service nginx start
以上です。
その他にも proxy cache を有効にして wordpress の静的な出力をキャッシュするチューニング方法もあるそうなので、次回試してみます。