nginx + fcgi + php on Debian

Posted by okkez Mon, 20 Oct 2008 12:03:00 GMT

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 # 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

こんな感じです。 ローカルでの体感速度はかなり上がった気がします。(サーバもパワーアップしているので一概には言えませんが。。。)

Posted in | コメントはありません | タグ | atom

Trackbacks

Use the following link to trackback from your own site:
http://typo.okkez.net/trackbacks?article_id=nginx-fcgi-php-on-debian&day=20&month=10&year=2008

Comments

Leave a response

Leave a comment