nginx + fcgi + php on Debian
投稿者 okkez
Debian sid で nginx + fcgi + php な環境を作ったのでメモ。
インストール
Debian なので全部パッケージで手に入る。 普通に aptitude で入れれば OK
とりあえず php5-cgi を忘れなければ良い。 ついでに fcgi の起動に spawn-fcgi を使用するので lighttpd を入れておく。
ちなみに自動起動の停止は以下のコマンド。ついでに設定ファイルで listen するポートも変更しておくといいかもしれない。
$ sudo update-rc.d -f lighttpd remove
設定
まずは nginx は以下のような感じで設定します。 Debian での Apache と同じように /etc/nginx/sites-enabled と /etc/nginx/sites-available 以下に virtual host ごとの 設定ファイルを置くようになっているのでそのようにする。基本的には /etc/nginx/nginx.conf はいじらない。
注意するのは以下の点。 * SCRIPT_FILENAME がフルパスになるようにする * 行末のセミコロンを忘れない * 設定ファイルの書式チェックは sudo nginx -c nginx.conf -t で行う。 * リロードは /etc/init.d/nginx reload で。
server {
listen 80;
server_name xxx.okkez.net;
access_log /var/log/nginx/xxx.okkez.net-access.log combined;
server_name_in_redirect off;
location / {
index index.php index.html;
root /var/www/xxx.okkez.net;
}
location ~ \.php$ {
#fastcgi_pass 127.0.0.1:9000;
fastcgi_pass unix:/tmp/php.fastcgi.socket;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/xxx.okkez.net$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
location ~ /\.ht {
deny all;
}
location ~ /\.git {
deny all;
}
}次に spawn-fcgi を用いて fcgi の起動停止スクリプトを書きます。 私は FreeBSD: Nginx FastCGI PHP Configuration を参考にして UNIX Socket を使用して fcgi を起動するようにしました。
オリジナルとの違いは以下。 * pcgi_restart で stop -> start の間に sleep を入れた ** 入れないとたまにエラーメッセージを吐くことがあったため * fcgi の起動方法を socket にした * コマンドのパスを自分の環境に合わせた
#!/bin/sh
# NGINX FastCGI php5 startup shell script
# Feedback <vivek@nixcraft.com>
# http://bash.cyberciti.biz/web-server/fastcgi-php-server-start-stop-script/
# Set ME #
PROVIDES=php-cgi
SPAWN_FCGI=/usr/bin/spawn-fcgi
SERVER_IP=127.0.0.1
SERVER_PORT=9000
SERVER_USER=www-data
SERVER_GROUP=www-data
SOCKET_PATH=/tmp/php.fastcgi.socket
PHP_CGI=/usr/bin/php-cgi
PGREP=/usr/bin/pgrep
KILLALL=/usr/bin/killall
### No editing below ####
cmd=$1
pcgi_start(){
echo "Starting $PROVIDES..."
#$SPAWN_FCGI -a $SERVER_IP -p $SERVER_PORT -u $SERVER_USER -g $SERVER_GROUP -f $PHP_CGI
$SPAWN_FCGI -s $SOCKET_PATH -u $SERVER_USER -g $SERVER_GROUP -f $PHP_CGI
}
pcgi_stop(){
echo "Killing $PROVIDES..."
$KILLALL $PROVIDES
}
pcgi_restart(){
pcgi_stop
sleep 2
pcgi_start
}
pcgi_status(){
$PGREP $PROVIDES > /dev/null
[ $? -eq 0 ] && echo "$PROVIDES running" || echo "$PROVIDES NOT running"
}
pcgi_help(){
echo "Usage: $0 {start|stop|restart|status}"
}
case ${cmd} in
[Ss][Tt][Aa][Rr][Tt]) pcgi_start;;
[Ss][Tt][Oo][Pp]) pcgi_stop;;
[Rr][Ee][Ss][Tt][Aa][Rr][Tt]) pcgi_restart;;
[Ss][Tt][Aa][Tt][Uu][Ss]) pcgi_status ;;
*) pcgi_help ;;
esacこんな感じです。 ローカルでの体感速度はかなり上がった気がします。(サーバもパワーアップしているので一概には言えませんが。。。)


