さくら VPS の Ubuntu 10.04 に nginx + PHP(FastCGI) な Web サーバーを構築する
追記: nginx + php-fpm で構築するほうがおすすめです。 Debian Squeeze に nginx + php-fpm な Web サーバーを構築する
さくらの VPS を借りたものの、Tiarra を入れるぐらいしかいじくっていなかったので、Coreserver で運用しているこのブログを VPS に移行する事にしました。 @key3 さんが nginx 良いよーと言っていたので定番の Apache ではなく結構軽くて流行っているらしい nginx + PHP(FastCGI) で Web サーバーを構築しました。 「nginx」名前がかっこいいですね!「えんじんえっくす」と呼ぶらしいです。
環境:
- Ubuntu 10.04 (not Server Edition)
- nginx 0.8.53
- PHP 5.3.2
nginx のインストール
Ubuntu に登録されている標準のリポジトリではバージョンが以下のように結構古いので、 nginx のリポジトリを追加します。
$ sudo aptitude show nginx
パッケージ: nginx
状態: インストールされていません
バージョン: 0.7.65-1ubuntu2
リポジトリの追加
以下のように su で root になって echo でも良いですが、なんかやだ!って人は sudo vim などで source.list を開いて書き加えると良いと思います。
$ sudo su -
# echo "deb http://ppa.launchpad.net/nginx/stable/ubuntu lucid main" >> /etc/apt/sources.list
# exit
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C300EE8C
$ sudo aptitude update
$ sudo aptitude show nginx
パッケージ: nginx
状態: インストールされていません
バージョン: 0.8.53-0ppa2
aptitude update で nginx の最新バージョンが反映されたので、aptitude install します。
$ sudo aptitude install nginx
$ nginx -v
nginx version: nginx/0.8.52
これで 2010/10/24 時点の最新バージョン 0.8.53 がインストールされまし... ...あ、あれ、0.8.52 になってますね... 変更し忘れたのかな? とりあえず nginx インストールは完了したという事にしましょう。
PHP + spawn-fcgi
PHP と spawn-fcgi のインストール
まっさらなサーバーなので、PHP と FastCGI を動作させるための spawn-fcgi をインストールします。
$ sudo aptitude install php5-cli php5-cgi php5-gd spawn-fcgi
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 a+x /usr/bin/php-fastcgi
fast-cgi の起動スクリプトを作成
/etc/init.d/ 以下に php-fastcgi というファイル名で作成します。
#!/bin/bash
PHP_SCRIPT=/usr/bin/php-fastcgi
FASTCGI_USER=www-data
RETVAL=0
case "$1" in
start)
su - $FASTCGI_USER -c $PHP_SCRIPT
RETVAL=$?
;;
stop)
killall -9 php5-cgi
RETVAL=$?
;;
restart)
killall -9 php5-cgi
su - $FASTCGI_USER -c $PHP_SCRIPT
RETVAL=$?
;;
*)
echo "Usage: php-fastcgi {start|stop|restart}"
exit 1
;;
esac
exit $RETVAL
console output
作成したら、スクリプトに実行権を与え、システム起動時に自動起動させるようにして、FastCGI を起動します。
$ sudo chmod a+x /etc/init.d/php-fastcgi
$ sudo update-rc.d php-fastcgi defaults
$ sudo /etc/init.d/php-fastcgi start
nginx の設定
サイトのファイルを置くディレクトリを作成
バーチャルホストを設定したいので、/var/www/ 以下にドメイン名ごとにディレクトリを置くようにしました。
$ sudo mkdir -p /var/www/hoge.com/{logs,public_html}
$ sudo chown -R www-data:www-data /var/www/hoge.com/
サイト用の設定ファイルを作成
/etc/nginx/sites-available/ 以下にサイト用の設定ファイルを作成します。 sites-available や sites-enabled は Ubuntu の Apache に似ていますね。 hoge.com は適宜読み替えてください。
初期状態で有効になっている default は sites-enabled から削除しておきます。
$ sudo rm /etc/nginx/sites-enabled/default
hoge.com 用の設定ファイルを作成
$ sudo vim /etc/nginx/sites-available/hoge.com
設定ファイルの内容はこんな感じ。
server {
listen 80;
server_name hoge.com;
access_log /var/www/hoge.com/logs/access.log;
error_log /var/www/hoge.com/logs/error.log;
location / {
root /var/www/hoge.com/public_html;
index index.html index.htm index.php;
}
location ~ \.php$ {
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/hoge.com/public_html$fastcgi_script_name;
}
location ~ /\.ht {
deny all;
}
}
内容自体はとてもシンプルなので、Apache を設定した事があれば説明は必要ないかと思います。
- listen: ポート番号を指定します。
- server_name: ドメイン名を指定します。複数指定したり、正規表現を使ったりできるようです。
- access_log/error_log: logs ディレクトリにアクセスログとエラーログを出力します。
- location / ブロック:
- root: サイト公開するディレクトリを指定します。
- index: ディレクトリのトップページを指定します。 nginx -> Apache に置き換えてみると、root -> DocumentRoot/index -> DirectoryIndex と考えれば分かりやすいと思います。
- location ~ .php$ ブロック: 拡張子が .php の時に FastCGI を呼び出す設定をしています。
- location ~ /.ht ブロック: .htaccess や .htpasswd へのアクセスをブロックしています。
サイトの有効化 Ubuntu の a2ensite や a2dissite のように、名前を指定すると sites-enabled にシンボリックリンクを張ってくれるコマンドは用意されていないので、手動でシンボリックリンクを張る必要があります。
sudo ln -s /etc/nginx/sites-available/hoge.com /etc/nginx/sites-enabled/
nginx の起動
今回は nginx.conf については手を加えませんでした。 worker_processes なんか面白そうですね。 その辺りは追々見ていきたいなと思います。
aptitude で nginx をインストールした場合は
$ sudo update-rc.d nginx defaults
して自動起動するように設定する必要はありません。
では、nginx を起動してみましょう。
$ sudo /etc/init.d/nginx start
とコマンドを叩くと、エラーが無ければ起動します。
ちなみに、設定ファイルをリロードするには
$ sudo nginx -s reload
文法をチェックするには
$sudo nginx -t
とコマンドを叩きます。
動作確認
public_html ディレクトリに適当な index.html や、phpinfo() を記述した index.php を作成し、サーバーにアクセスしてみましょう。 無事に内容が表示されたら成功です!
ちなみに...
さくら VPS は www1234u.sakura.ne.jp というドメインも標準で割り当てられているのですが、sites-enabled で有効にしているドメインにアクセスされてきた時のみ、そのサイトを表示させたいので、標準のドメインや IP アドレスでアクセスされた時にはエラーを表示するように、sites-available の default ファイルを新しく作りなおしました。 もっと良いやり方があれば教えていただきたいです。
server {
listen 80;
server_name www1234u.sakura.ne.jp 123.456.789.12;
deny all;
}
ついでに WordPress を動かしてみた
ついでに WordPress を動かしてみました。 データベースを作成し、/wp-admin/install.php にアクセス。 インストールが終了し、管理画面とトップページについては問題は起きず WordPress が動いてくれました。
まあ、この後、色々とハマりまくった訳ですが、それはまた今度...
比較的簡単に nginx をセットアップする事ができました! Apache と使い勝手が違う部分はありますが、これはこれで新鮮で良いですね。
参考サイト
Install(nginx Wiki) http://wiki.nginx.org/Install
Configuration(nginx Wiki) http://wiki.nginx.org/Configuration
PHP-FastCGI with Nginx - Nginx and PHP-FastCGI on Ubuntu 10.04 LTS (Lucid) - Linode Library http://library.linode.com/web-servers/nginx/php-fastcgi/ubuntu-10.04-lucid