Download - mruby_nginx_module

Transcript
Page 1: mruby_nginx_module

mruby_nginx_module~ Embed mruby into Nginx ~

久保 達彦[email protected]

2013/10/16 渋谷.rb13年10月16日水曜日

Page 2: mruby_nginx_module

自己紹介

✦ 久保 達彦(H.N:bokko)

✦ @cubicdaiya(twitter, github)✦ Senior Software Engineer@pixiv Inc.

13年10月16日水曜日

Page 3: mruby_nginx_module

最近はNginxのモジュール開発に凝ってます

✦ mruby_nginx_module✦ Embed mruby into Nginx

✦ ngx_small_light✦ Dynamic Image Transformation for Nginx

✦ ngx_access_token✦ Porting of mod_access_token into Nginx

✦ Nginx本体にも2件ほどパッチ送りました

13年10月16日水曜日

Page 4: mruby_nginx_module

WEB+DBでもNginxの記事を書きましたWEB+DB PRESS Vol.72

□詳解nginx

設定の柔軟性と優れたスケーラビリティ

□共著者@harukasan@semind

13年10月16日水曜日

Page 5: mruby_nginx_module

WEB+DBでもNginxの記事を書きましたWEB+DB PRESS Vol.72

□詳解nginx

設定の柔軟性と優れたスケーラビリティ

□共著者@harukasan@semind

13年10月16日水曜日

Page 6: mruby_nginx_module

Nginx in pixiv

✦ 6000行を越えるnginx.conf

✦ lua_nginx_module導入&運用中

✦ Using ngx_lua in pixiv✦ http://www.slideshare.net/harukayon/

ngx-lua-public

13年10月16日水曜日

Page 7: mruby_nginx_module

とあるpixivを支えるインフラエンジニア

13年10月16日水曜日

Page 8: mruby_nginx_module

一方自分は・・・

13年10月16日水曜日

Page 9: mruby_nginx_module

ngx_mrubyにPull request送る日々(50~60件くらい)

13年10月16日水曜日

Page 10: mruby_nginx_module

今年の夏にfork

13年10月16日水曜日

Page 11: mruby_nginx_module

mruby_nginx_module✦ nginx.confでmrubyが書ける

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

✦ ngx_mrubyからfork by bokko

✦ 鋭意開発中

✦ http://git.io/d3sJtw

13年10月16日水曜日

Page 13: mruby_nginx_module

mruby

✦ 軽量Ruby

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

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

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

13年10月16日水曜日

Page 14: mruby_nginx_module

ngx_mrubyとの違い

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

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

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

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

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

13年10月16日水曜日

Page 15: mruby_nginx_module

Hello, World!

13年10月16日水曜日

Page 16: mruby_nginx_module

nginxの変数にset

#=> 55

13年10月16日水曜日

Page 17: mruby_nginx_module

ファイル指定も可能

・先頭に「/」がある場合は絶対パス・それ以外の場合は相対パス(conf_prefixがroot)

13年10月16日水曜日

Page 18: mruby_nginx_module

ヘッダ書き換え

# 本来はtext/html

13年10月16日水曜日

Page 19: mruby_nginx_module

レスポンスボディも(ry

13年10月16日水曜日

Page 20: mruby_nginx_module

各処理フェーズでデータ共有

13年10月16日水曜日

Page 21: mruby_nginx_module

Regexpクラス

13年10月16日水曜日

Page 22: mruby_nginx_module

少し発展的な例

13年10月16日水曜日

Page 23: mruby_nginx_module

(mod|ngx)_access_tokenっぽいアクセス認証

13年10月16日水曜日

Page 24: mruby_nginx_module

(mod|ngx)_access_token✦ S3のクエリ文字列認証っぽい機能を提供

✦ 特定のアクセストークンに基づいた認証

✦ リソースの有効期限設定

✦ mod_access_token✦ livedoor(現NHN Japan)が開発

✦ ngx_access_token✦ @cubicdaiyaが開発

13年10月16日水曜日

Page 25: mruby_nginx_module

xxx_access_tokenの認証方式以下のパラメータをリクエストURLに付加する

・AccessKey -> 公開鍵文字列・Expires -> 有効期限(エポック値)

・Signature -> シグネチャ

Text = Method + Uri + Expires + AccessKeySignature = Base64(HMAC_SHA1(Text, (※) SecretKey))

(※)秘密鍵文字列(サーバ側で設定)

13年10月16日水曜日

Page 26: mruby_nginx_module

ngx_access_tokenwith mruby_nginx_module

13年10月16日水曜日

Page 27: mruby_nginx_module

今のところ使える機能✦ バイトコードキャッシュ

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

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

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

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

✦ by Nginx Core API(not mrbgems)

✦ Regexp(PCREベース)

13年10月16日水曜日

Page 28: mruby_nginx_module

今後の予定✦ 共有メモリAPI(Nginx::Shared)

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

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

✦ Fiber(コルーチン)導入

✦ 宣伝活動

✦ etc

13年10月16日水曜日


Top Related