nginx_mrubyを試してみた

nginxの設定をrubyでダイナミックに設定できるnginx_mrubyを試してみた。

個人的にnginx_mrubyを使うことのメリットは、サーバーの設定をダウンタイムなしに変更できるという点と、
rubyを使ってアプリケーションコードを書くように、サーバーの設定扱うことができる(rack middlewareのように)という点と感じた。

nginx_mrubyのビルド

今回はOSをDocker + ubuntuで試してみた。

wikiのinstallを参考にした感じなのだが、以下のようになった。

mrubyはビルドの設定をbuild_config.rbというファイルで行う。今回はbasic認証を行ってみようと思うので
mrubyのgemであるmgemにmruby-base64を追加した。

ちなみに、同じようにapacheのconfをmrubyで制御できるmod_mrubyにはbasic認証のためにmrubyAuthnCheckPasswordというDirectiveが存在していた

ということで、今回は以下のようにした。

ngx_mrubyのwikiにあるように、サーバーの各イベントでrubyファイルをhookできるdirectiveがかある。

これをconfファイルで設定していく。
ファイルパスを渡すものとインラインでrubyのコードを書けるものが存在している。

実際に処理を行うのはrubyでかけるので、

これで dockerのコンテナにアクセス、basic_auth ディレクトリにアクセスでbasic認証ができている。

basic認証してみる

ブラウザでアクセスしてみる

今回はboot2dockerをつかったのでブラウザアクセスするために、
virtualboxとホストマシン間でのポートフォワーディングの設定が必要。

ブラウザで localhost:8080 でアクセスできるようになる。

basic認証だとあまり良い例にはならなかったけど、例えば、特定のディレクトリへのアクセスなどを制御したい時に、
nginxのconfに正規表現などでいろいろと書くより、rubyでかける方が個人的には敷居が低く感じる。

実際にインフラ周りの知識はあまりないけど、rubyでサーバーを柔軟に制御できるのは便利だと思った。

あと、mrubyのデバッグについて良い方法が知りたい。

今回作ったもの

参考にしたページ
nginx_mruby
ngx_mrubyを使って簡易ファイル共有システムを作る
mod_mrubyインストール後入門

Comments