暇人じゃない

Debian Squeeze に nginx + php-fpm な Web サーバーを構築する

環境:

最近はデスクトップは Ubuntu ,サーバーは Debian ,という感じで使い分けています.

可愛い Debian に Apache を入れるのはなんか嫌だよねー,という事で, nginx + php-fpm な環境を構築しました.

以前,nginx + spawn-fcgi な環境を構築する記事を書きましたが,現在は nginx + php-fpm の方が簡単に構築できるかと思います. というのも,元々サードパーティのツールだった FPM(FastCGI Process Manager) が PHP 5.3.3 から PHP に統合されて余計な設定をほとんど行わずに利用することができるようになったからです.fpm と spawn-fcgi は良く比較されていましたが,こうなってくると spawn-fcgi を使う理由もあまり無いのではないでしょうか.

以下の作業はすべて root にて行っています.

リポジトリの追加

Debian Squeeze 標準のリポジトリでは少し古い nginx や PHP がインストールされるので, dotdeb というリポジトリを追加して使用します.

設定ファイルにソースを追加:

% vim /etc/apt/sources.list

# 最後に追加
deb http://packages.dotdeb.org stable all
deb-src http://packages.dotdeb.org stable all

GnuPG キーの追加:

% wget http://www.dotdeb.org/dotdeb.gpg
% cat dotdeb.gpg | apt-key add -
OK

# リポジトリ情報のアップデート
% aptitude update

nginx のインストール

% aptitude show nginx
Package: nginx
State: not installed
Version: 0.8.54-3.dotdeb.1
Priority: optional
Section: httpd
Maintainer: Guillaume Plessis <gui@dotdeb.org>
Uncompressed Size: 57.3 k
Depends: nginx-full
Provided by: nginx-extras, nginx-full, nginx-light
Description: small, but very powerful and efficient web server and mail proxy
 Nginx (engine x) is a web server created by Igor Sysoev and kindly provided to
 the open-source community. This server can be used as standalone HTTP server and
 as a reverse proxy server before some Apache or another big server to reduce load
 to backend servers by many concurrent HTTP-sessions.

 This is a dummy package that selects nginx-full.
Homepage: http://nginx.net

Stable version の 0.8.54 がインストールされます.nginx-light/nginx-full/nginx-extras という3つのバージョンのパッケージがあり,aptitude install nginx すると, nginx-full というパッケージがインストールされるようです.

今回は nginx-full をインストールします.

% aptitude install nginx-full

PHP のインストール

% aptitude show php5-common
Package: php5-common
State: not installed
Version: 5.3.6-6~dotdeb.1
Priority: optional
Section: php
Maintainer: Guillaume Plessis <gui@dotdeb.org>
Uncompressed Size: 746 k
Depends: sed (>= 4.1.1-1), libc6 (>= 2.4)
Recommends: php5-suhosin
Conflicts: php5-json, php5-mhash
Provides: php5-json, php5-mhash
Description: Common files for packages built from the php5 source
 This package contains the documentation and example files relevant to all the other packages built from the php5
 source.

 PHP5 is a widely-used general-purpose scripting language that is especially suited for Web development and can be
 embedded into HTML. The goal of the language is to allow web developers to write dynamically generated pages quickly.
 This version of PHP5 was built with the Suhosin patch.
Homepage: http://www.php.net/

2011/4/10 現在の最新バージョンである PHP 5.3.6 がリポジトリに登録されています. 以下のパッケージをインストールします.

% aptitude install php5-common php5-cli php5-cgi php5-fpm

インストールが終わったら,php5-fpm を動かしてみましょう.

% /etc/init.d/php5-fpm start
% ps -aux | grep php
Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html
root      2353  0.5  0.7  77472  3932 ?        Ss   09:48   0:00 php-fpm: master process (/etc/php5/fpm/php-fpm.conf)
www-data  2354  0.0  0.6  77464  3508 ?        S    09:48   0:00 php-fpm: pool www
www-data  2355  0.0  0.6  77464  3508 ?        S    09:48   0:00 php-fpm: pool www
www-data  2356  0.0  0.6  77464  3508 ?        S    09:48   0:00 php-fpm: pool www
www-data  2357  0.0  0.6  77464  3508 ?        S    09:48   0:00 php-fpm: pool www
www-data  2358  0.0  0.6  77464  3508 ?        S    09:48   0:00 php-fpm: pool www
www-data  2359  0.0  0.6  77464  3508 ?        S    09:48   0:00 php-fpm: pool www
www-data  2360  0.0  0.6  77464  3508 ?        S    09:48   0:00 php-fpm: pool www
www-data  2361  0.0  0.6  77464  3508 ?        S    09:48   0:00 php-fpm: pool www
www-data  2362  0.0  0.6  77464  3508 ?        S    09:48   0:00 php-fpm: pool www
www-data  2363  0.0  0.6  77464  3508 ?        S    09:48   0:00 php-fpm: pool www
www-data  2364  0.0  0.6  77464  3508 ?        S    09:48   0:00 php-fpm: pool www
www-data  2365  0.0  0.6  77464  3508 ?        S    09:48   0:00 php-fpm: pool www
www-data  2366  0.0  0.6  77464  3508 ?        S    09:48   0:00 php-fpm: pool www
www-data  2367  0.0  0.6  77464  3512 ?        S    09:48   0:00 php-fpm: pool www
www-data  2368  0.0  0.6  77464  3512 ?        S    09:48   0:00 php-fpm: pool www
www-data  2369  0.0  0.6  77464  3512 ?        S    09:48   0:00 php-fpm: pool www
www-data  2370  0.0  0.6  77464  3512 ?        S    09:48   0:00 php-fpm: pool www
www-data  2371  0.0  0.6  77464  3512 ?        S    09:48   0:00 php-fpm: pool www
www-data  2372  0.0  0.6  77464  3512 ?        S    09:48   0:00 php-fpm: pool www
www-data  2373  0.0  0.6  77464  3512 ?        S    09:48   0:00 php-fpm: pool www
root      2375  0.0  0.1  11324   916 pts/0    S+   09:48   0:00 grep php

どうやら動いていますね.

nginx の設定

デフォルトの設定ファイルを削除:

% rm /etc/nginx/sites-enabled/default

サイト用のファイルやログを置くディレクトリの作成:

% mkdir -p /var/www/test/{logs,public_html}

設定ファイルの作成:

% vim /etc/nginx/sites-available/test
server {
     listen 80;
     server_name localhost;

     access_log /var/www/test/logs/access.log;
     error_log /var/www/test/logs/error.log;

     location / {
          root /var/www/test/public_html;
          index index.html index.php;
     }

     location ~ \.php$ {
          fastcgi_pass 127.0.0.1:9000;
          fastcgi_index index.php;
          include fastcgi_params;
          fastcgi_param SCRIPT_FILENAME /var/www/test/public_html$fastcgi_script_name;
     }

     location ~ /\.ht {
          deny all;
     }
}

サイトの有効化:

# sites-enabled ディレクトリにシンボリックリンクを貼ると,nginx に読み込まれるようになる
% ln -s /etc/nginx/sites-available/test /etc/nginx/sites-enabled/
# 設定ファイルのシンタックスチェック
% nginx -t
the configuration file /etc/nginx/nginx.conf syntax is ok
configuration file /etc/nginx/nginx.conf test is successful
# 設定ファイルのリロード
% nginx -s reload

/var/www/test/public_html/ に

<?php phpinfo(); ?>

などを記述したファイルを設置し,ブラウザからアクセスして表示されれば完了です.