新しいblogに移行しました

新ブログ "All Yout Bugs Are Belong To Ass" に移行しました!

2011-03-24

[Linux]nginxをさくらVPSのCentOS5.5に入れてみた

最近借りた「さくらのVPS(CentOS5.5)」にnginx-0.8.54をインストールしてみました。

nginxとは

nginx - Wikipedia

ダウンロード

http://wiki.nginx.org/InstallJaからダウンロードできます。
CentOSにはrpmforge含めyumパッケージが無いので、ソースからインストールします。
今回は「安定版」とされている0.8系を選択しました。

インストール

僕が試した限り、以下のyumパッケージを予めインストールしておく必要がありました。
  • pcre-devel
  • openssl-devel
その後は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!もう君には(よほどの事がない限り)世話にならないだろう!

0 件のコメント: