nginxは「エンジンエックス」と読み、軽量高性能なHTTP、リバースプロキシ、メールプロキシだ。
公式からの説明を引用すると以下のようになる。
nginx [えんじんえっくす] は Igor Sysoev によって作られた HTTP とリバースプロキシのサーバで、メールプロキシサーバでもあります。Rambler (RamblerMedia.com) を含むロシアの多くの高負荷サイトで5年以上も動いています。Netcraft によると、nginx は 2010 年 4 月時点で 4.70% の人気サイトでサーバーとして、もしくはプロキシとして利用されています。成功例としては FastMail.FM や WordPress.com があります。
node.jsと同じくイベント駆動型アーキテクチャである。
nginxを表に置きリバースプロキシと静的ファイルの取り扱いを行い、裏に動的ファイルを扱う形でNode.jsを置く方法でVPSサーバーを構築していこうと考えている。
またwebsockeでリアルタイム通信を行う場合、そのままではリバースプロキシできないのでnginx_tcp_proxy_moduleというモジュールを使用する。この説明も加えておく。
まず今回はモジュールを組み込んだnginxのインストールと自動起動の設定までを行う。
<追記>いろいろと見直しをし再インストールした。
モジュールの組み込みとnginxのインストール
nginxではsocket.ioのプロキシがうまく行かないようで、yaoweibinさんという方がモジュールを書いてくれている。このnginx_tcp_proxy_moduleを使用してリバースプロキシでもリアルタイム通信が出来るようにする。
nginx_tcp_proxy_module
nginxのインストールは、nginx連載2回目: nginxのインストールでも書かれているようにいくつかありyumコマンドでもインストールできるのだけど、モジュールの組み込みがインストール時にしかできないため、ソースをダウンロードしてパッチを当てる方法を取ることとした。
wgetする前に最新版の確認をする。
http://nginx.org/download/
現時点ではnginx-1.2.0.tar.gzが最新版だった。
ということで、ソース及びnginx_tcp_proxy_moduleをダウンロードしパッチを当てる。
$ mkdir nginx $ cd nginx/ $ wget http://nginx.org/download/nginx-1.2.0.tar.gz $ git clone https://github.com/yaoweibin/nginx_tcp_proxy_module.git $ tar zxvf nginx-1.2.0.tar.gz $ cd nginx-1.2.0 $ patch -p1 < ../nginx_tcp_proxy_module/tcp.patch
nginx_tcp_proxy_moduleをオプションとしてconfigureしてみる。
$ ./configure --add-module=../nginx_tcp_proxy_module/ ./configure: error: the HTTP rewrite module requires the PCRE library. You can either disable the module by using --without-http_rewrite_module option, or install the PCRE library into the system, or build the PCRE library statically from the source with nginx by using --with-pcre=<path> option.
PCREライブラリというのがないらしいのでググってみると同じ症状の方がいてた。
CentOS5.5へのNginxのインストール
pcre-develを入れれば良いみたいなので、yumでインストールし再度configureする。
$ sudo yum -y install pcre-devel $ ./configure --add-module=../nginx_tcp_proxy_module/ Configuration summary + using system PCRE library + OpenSSL library is not used + md5: using system crypto library + sha1: using system crypto library + using system zlib library nginx path prefix: "/usr/local/nginx" nginx binary file: "/usr/local/nginx/sbin/nginx" nginx configuration prefix: "/usr/local/nginx/conf" nginx configuration file: "/usr/local/nginx/conf/nginx.conf" nginx pid file: "/usr/local/nginx/logs/nginx.pid" nginx error log file: "/usr/local/nginx/logs/error.log" nginx http access log file: "/usr/local/nginx/logs/access.log" nginx http client request body temporary files: "client_body_temp" nginx http proxy temporary files: "proxy_temp" nginx http fastcgi temporary files: "fastcgi_temp" nginx http uwsgi temporary files: "uwsgi_temp" nginx http scgi temporary files: "scgi_temp"
大丈夫なようだ。configパスなどは上記を参考にしていけば良いのだろうと検討を付けておきながらインストールをする。
$ sudo make $ sudo make install
入門! nginxを参考にして、シンボリックリンクを張り機動してみる。
$ sudo ln -s /usr/local/nginx/sbin/nginx /sbin/nginx $ sudo nginx
サイトで「Welcome to nginx!」の表示を確認できたので起動停止しておく。
$ sudo nginx -s quit
Nginx自動起動スクリプトの作成
サーバーを起動したらnginxも自動起動するように設定ファイルを作成する。
nginxをソースからインストール(+基本設定)を参考にしてRed Hat Nginx Init Scriptのファイルをベースに機動パスと設定ファイルのパスを変更した。
$ sudo nano /etc/init.d/nginx
Red Hat Nginx Init Scriptをコピー&ペーストする。
機動パス変更
# NGINX_CONF_FILE="/etc/nginx/nginx.conf" NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"
設定ファイルのパス変更
# nginx="/usr/sbin/nginx" nginx="/usr/local/nginx/sbin/nginx"
そして、コチラを参考に起動時設定スクリプトとして登録する。
CentOS用 Nginx起動スクリプト
実行権限を付与する。
$ sudo chmod a+x /etc/init.d/nginx
起動時に実行するスクリプトとして登録する。
ランレベル3と5の時に起動スクリプトを実行する。
$ sudo /sbin/chkconfig --add nginx $ sudo /sbin/chkconfig --list | grep nginx nginx 0:off 1:off 2:off 3:off 4:off 5:off 6:off $ sudo /sbin/chkconfig --level 35 nginx on $ sudo /sbin/chkconfig --list | grep nginx nginx 0:off 1:off 2:off 3:on 4:off 5:on 6:off
VPSのコントロールパネルで再起動して、サイトで確認すると、「Welcome to nginx!」の表示になっており無事に自動機動の確認できた。
今回はここまで。リバースプロクシとNode.jsアプリの移動は次回行う予定にしている。
./configureオプションでできることあたりの把握がまだできていないので、必要になったときに再インストールしつつ調べようかなと考えている。