カメニッキ

カメとインコと釣りの人です

nginx1.9.9にngx_mrubyを組み込む

以下の環境に組み込みました。

tapira.hatenablog.com

そもそも ngx_mruby とは?

ngx_mruby is A Fast and Memory-Efficient TCP Load Balancing and Web Server Extension Mechanism Using Scripting Language mruby for nginx.

github.com

とりあえずやりたいのは後者、nginxの制御にmrubyを使うところ。

手順

(1) ruby2.2.3を導入 - ruby-buildをつかいます。

cd /usr/local/src
git clone https://github.com/sstephenson/ruby-build.git
cd ruby-build
# 途中怒られるから入れとく
yum install -y readline-devel
./install.sh
ruby-build 2.2.3 /usr/local/ruby2.2
export PATH=/usr/local/ruby2.2/bin:$PATH
[root@v7885 nginx-1.9.9]# ruby -v
ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-linux]

※ ちなみに、最初面倒くさくて yum install ruby で 1.8.xを入れたのですが、腐ってたのでやめました

(2) ngx_mruby導入 ref: Install · matsumoto-r/ngx_mruby Wiki · GitHub

$ cd /usr/local/src
$ git clone git://github.com/matsumoto-r/ngx_mruby.git
$ cd ngx_mruby
$ ./configure --with-ngx-src-root=/usr/local/src/nginx-1.9.9
$ make build_mruby
$ make generate_gems_config
$ cd /usr/local/src/nginx-1.9.9
$ ./configure --user=nginx --group=nginx --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --with-http_ssl_module --with-mail --with-http_stub_status_module  --with-http_v2_module --with-http_realip_module  --with-http_addition_module --without-http_userid_module --add-module=/usr/local/src/ngx_mruby --add-module=/usr/local/src/ngx_mruby/dependence/ngx_devel_kit
$ make
$ make install

(3) nginx.confにmrubyのコードを書いてみる

# Locationディレクティブ内に適当に
mruby_content_handler_code '
   Nginx::rputs "Hello world!"
';

(4) nginx reload & 確認

nginx -s reload

https://hogefuga.inf/へアクセスし、

f:id:tapira:20151213124452p:plain

と表示されれば、よさそう!