最近借りた「さくらのVPS(CentOS5.5)」にnginx-0.8.54をインストールしてみました。
nginxとは
nginx - Wikipedia
ダウンロード
http://wiki.nginx.org/InstallJaからダウンロードできます。
CentOSにはrpmforge含めyumパッケージが無いので、ソースからインストールします。
今回は「安定版」とされている0.8系を選択しました。
インストール
僕が試した限り、以下のyumパッケージを予めインストールしておく必要がありました。
その後はtarballを復元し、configure, make, make installの順に実行してあげればOKでした。
コマンドをまとめると、以下の様になるはずです。
# yum -y install pcre-devel openssl-devel
# tar zxvf ./nginx-0.8.54.tar.gz
# cd ./nginx-0.8.54
# ./configure && make && make install
/usr/local/nginxにいろいろ入っていればインストール成功です。
nginxを起動する
では、httpサーバとしてnginxを起動してみます。
# /usr/local/nginx/sbin/nginx
これだけです。
nginxを停止する
停止する場合は
# /usr/local/nginx/sbin/nginx -s stop
と実行するだけです。
ネームバーチャルを設定する
ドメイン毎にドキュメントルートを変えたりしたかったので、ネームバーチャルを設定しました。
設定ファイルは /usr/local/nginx/conf/nginx.conf です。
server {
listen 80;
server_name alpha.ytnobody.net;
location / {
root vhosts/alpha;
index index.html;
}
}
server {
listen 80;
server_name beta.ytnobody.net;
location / {
root vhosts/beta;
index index.html;
}
}
こんな感じの記述を http { ... } の中に書いてやります。
プロキシとして動作させる
バックエンドでstarmanとか動かしたいので、プロキシとして動作させてみました。
nginx.confに以下のようなネームバーチャルを追加し、ネームバーチャルをまるごとプロキシとしました。
server {
listen 80;
server_name lab.ytnobody.net;
location / {
proxy_pass http://127.0.0.1:5000;
}
}
で、急ごしらえの動確用PSGIアプリを
sub {
[ 200,
[ 'Content-Type' => 'text/html' ],
[ '<html><head><title>PLACK</title></head><body>PLACK!</body></html>' ]
];
};
こんな感じででっち上げて、plackupで起こしてやります。
$ plackup ./hoge.pl
これで、lab.ytnobody.netにアクセスすると、PSGIアプリにリクエストが流れます。
ロードバランシングさせる
さきほどのlab.ytnobody.netを改造して、ロードバランサとして設定してみます。
upstream mybalancer {
server www.google.com:80;
server www.cpan.org:80;
server www.yahoo.co.jp:80;
}
server {
listen 80;
server_name lab.ytnobody.net;
location / {
proxy_pass http://mybalancer;
}
}
これだけで、upstreamのserver達にリクエストがバランシングされます。
フォアグラウンドで走らせて、daemontoolsに食わせやすくする
nginxをフォアグラウンドで動かすには、
# /usr/local/nginx/sbin/nginx -g 'daemon off;'
のように、グローバル指定子"daemon off;"を指定する必要があります。
しかし、これだけだとログがローテートされません。放っておくと、アホみたいなサイズになってしまいます。
これもdaemontoolsに任せてしまいたいので、どうにかログを標準出力に吐いておきたいところ。
そこで、/dev/stdoutにログを吐いてやるように設定したところ、期待通りの動作となりました。
server {
listen 80;
server_name lab.ytnobody.net;
access_log /dev/stdout;
location / {
proxy_pass http://mybalancer;
}
}
さいごに
いままでnginx使ってなかった理由がわからない!!!!というほど、簡単に導入できました!!
さようならapache!もう君には(よほどの事がない限り)世話にならないだろう!