mruby_nginx_module
∼ Embed mruby into Nginx ∼
久保 達彦
cubicdaiya@gmail.com
2013/10/16 渋谷.rb
13年10月16日水曜日
自己紹介
✦

久保 達彦(H.N:bokko)

✦

@cubicdaiya(twitter, github)

✦

Senior Software Engineer@pixiv Inc.

13年10月16日水曜日
最近はNginxのモジュール開発に凝ってます
✦

mruby_nginx_module
✦

✦

ngx_small_light
✦

✦

13年10月16日水曜日

Dynamic Image Transformation for Nginx

ngx_access_token
✦

✦

Embed mruby into Nginx

Porting of mod_access_token into Nginx

Nginx本体にも2件ほどパッチ送りました
WEB+DBでもNginxの記事を書きました
WEB+DB PRESS Vol.72
□詳解nginx
設定の柔軟性と
優れたスケーラビリティ
□共著者
@harukasan
@semind
13年10月16日水曜日
WEB+DBでもNginxの記事を書きました
WEB+DB PRESS Vol.72
□詳解nginx
設定の柔軟性と
優れたスケーラビリティ
□共著者
@harukasan
@semind
13年10月16日水曜日
Nginx in pixiv
✦

6000行を越えるnginx.conf

✦

lua_nginx_module導入&運用中
✦

Using ngx_lua in pixiv
✦

13年10月16日水曜日

http://www.slideshare.net/harukayon/
ngx-lua-public
とあるpixivを支えるインフラエンジニア

13年10月16日水曜日
一方自分は・・・

13年10月16日水曜日
ngx_mrubyにPull request送る日々(50∼60件くらい)

13年10月16日水曜日
今年の夏にfork

13年10月16日水曜日
mruby_nginx_module
✦

nginx.confでmrubyが書ける

✦

Nginxのモジュールがmrubyで書ける

✦

ngx_mrubyからfork by bokko

✦

鋭意開発中

✦

http://git.io/d3sJtw

13年10月16日水曜日
公式サイト
http://cubicdaiya.github.io/
mruby_nginx_module/

13年10月16日水曜日
mruby
✦

軽量Ruby

✦

組み込み分野向けにまつもとゆきひろ氏が開発

✦

Cと連携しやすいように設計されてる

✦

リッチなLuaというイメージ

13年10月16日水曜日
ngx_mrubyとの違い
✦

(mod|ngx)_mrubyはWebサーバの拡張記述統一が目的の一つ

✦

mruby_nginx_moduleはNginxにより特化したものを目指しています
✦

✦

共有メモリ・ノンブロッキングソケットAPI(予定)

✦

13年10月16日水曜日

Nginx Core APIバインディングの拡充

Nginxの拡張モジュールは全部mrubyで書ける!くらいにしたいです
Hello, World!

13年10月16日水曜日
nginxの変数にset

#=> 55
13年10月16日水曜日
ファイル指定も可能

・先頭に「/」がある場合は絶対パス
・それ以外の場合は相対パス(conf_prefixがroot)
13年10月16日水曜日
ヘッダ書き換え

# 本来はtext/html

13年10月16日水曜日
レスポンスボディも(ry

13年10月16日水曜日
各処理フェーズでデータ共有

13年10月16日水曜日
Regexpクラス

13年10月16日水曜日
少し発展的な例

13年10月16日水曜日
(mod|ngx)_access_token
っぽいアクセス認証

13年10月16日水曜日
(mod|ngx)_access_token
✦

S3のクエリ文字列認証っぽい機能を提供
✦

✦

✦

特定のアクセストークンに基づいた認証
リソースの有効期限設定

mod_access_token
✦

✦

ngx_access_token
✦

13年10月16日水曜日

livedoor(現NHN Japan)が開発

@cubicdaiyaが開発
xxx_access_tokenの認証方式
以下のパラメータをリクエストURLに付加する
・AccessKey -> 公開
・Expires

文字列

-> 有効期限(エポック値)

・Signature -> シグネチャ
Text = Method + Uri + Expires + AccessKey
Signature = Base64(HMAC_SHA1(Text, (※) SecretKey))
(※)秘密
13年10月16日水曜日

文字列(サーバ側で設定)
ngx_access_token
with mruby_nginx_module

13年10月16日水曜日
今のところ使える機能
✦

バイトコードキャッシュ

✦

各種ハンドラへのフック(rewrite,access,content,log)

✦

ヘッダおよびボディのフィルタリング

✦

Nginx変数へのアクセス(set & get)

✦

Nginx::(Request|Context|Time|Base64|Digest|etc)
✦

✦

13年10月16日水曜日

by Nginx Core API(not mrbgems)

Regexp(PCREベース)
今後の予定
✦

共有メモリAPI(Nginx::Shared)

✦

サブリクエストAPI(Nginx::SubRequest)

✦

ノンブロッキングソケットAPI(Nginx::Socket)

✦

Fiber(コルーチン)導入

✦

宣伝活動

✦

etc

13年10月16日水曜日

mruby_nginx_module