SlideShare a Scribd company logo
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日水曜日

More Related Content

What's hot

Grunt.jsを使った Expressの開発環境構築
Grunt.jsを使った Expressの開発環境構築Grunt.jsを使った Expressの開発環境構築
Grunt.jsを使った Expressの開発環境構築
kamiyam .
 
JAWS Osaka July 2014, Opsworks + Node.js
JAWS Osaka July 2014, Opsworks + Node.js JAWS Osaka July 2014, Opsworks + Node.js
JAWS Osaka July 2014, Opsworks + Node.js
Martin Heidegger
 
buddyのユーザ認証周りのデータ構造 - 使われているデータの取り回しについてのお話
buddyのユーザ認証周りのデータ構造 - 使われているデータの取り回しについてのお話buddyのユーザ認証周りのデータ構造 - 使われているデータの取り回しについてのお話
buddyのユーザ認証周りのデータ構造 - 使われているデータの取り回しについてのお話
Kazuhiro Hara
 
イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方
イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方
イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方
Yuta Matsumura
 
Riot + generator で始める新しいデータバインディング
Riot + generator で始める新しいデータバインディングRiot + generator で始める新しいデータバインディング
Riot + generator で始める新しいデータバインディング
Tsutomu Kawamura
 
Devfes kyoto2017
Devfes kyoto2017Devfes kyoto2017
Devfes kyoto2017
Satomi Tsujita
 
Gitを使おう
Gitを使おうGitを使おう
Gitを使おう
takemaedenki
 
Concrete5×さくら
Concrete5×さくらConcrete5×さくら
Concrete5×さくら
Masaya Hayashi
 
Node js 入門
Node js 入門Node js 入門
Node js 入門
Satoshi Takami
 
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみるづや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
zuya
 
Clojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状について
Clojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状についてClojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状について
Clojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状について
Kazuhiro Hara
 
ActiveResourceモデルによるAPIの隠蔽の怖い話 ~レスポンスタイムへの致命的影響~ at #shinjukurb
ActiveResourceモデルによるAPIの隠蔽の怖い話~レスポンスタイムへの致命的影響~ at #shinjukurbActiveResourceモデルによるAPIの隠蔽の怖い話~レスポンスタイムへの致命的影響~ at #shinjukurb
ActiveResourceモデルによるAPIの隠蔽の怖い話 ~レスポンスタイムへの致命的影響~ at #shinjukurb
Koichiro Sumi
 
今さら聞けないWebサーバの基本知識と選び方
今さら聞けないWebサーバの基本知識と選び方今さら聞けないWebサーバの基本知識と選び方
今さら聞けないWebサーバの基本知識と選び方
Endoh Shingo
 
海外で注目されてるJs framework “mithril”の特徴
海外で注目されてるJs framework “mithril”の特徴海外で注目されてるJs framework “mithril”の特徴
海外で注目されてるJs framework “mithril”の特徴
Shoyo Kyou
 
concrete5とAWSのほどよい関係
concrete5とAWSのほどよい関係concrete5とAWSのほどよい関係
concrete5とAWSのほどよい関係
Takahisa Iwamoto
 
Vue.js with Go
Vue.js with GoVue.js with Go
Vue.js with Go
Kazuhiro Kubota
 
Ohs#7 学習API
Ohs#7 学習APIOhs#7 学習API
Ohs#7 学習API
祐理 大野
 
Vue
VueVue
毎日2000個のコンテナをstartする鯖が突然死して僕が驚愕した話
毎日2000個のコンテナをstartする鯖が突然死して僕が驚愕した話毎日2000個のコンテナをstartする鯖が突然死して僕が驚愕した話
毎日2000個のコンテナをstartする鯖が突然死して僕が驚愕した話
Koichiro Sumi
 

What's hot (20)

Grunt.jsを使った Expressの開発環境構築
Grunt.jsを使った Expressの開発環境構築Grunt.jsを使った Expressの開発環境構築
Grunt.jsを使った Expressの開発環境構築
 
JAWS Osaka July 2014, Opsworks + Node.js
JAWS Osaka July 2014, Opsworks + Node.js JAWS Osaka July 2014, Opsworks + Node.js
JAWS Osaka July 2014, Opsworks + Node.js
 
buddyのユーザ認証周りのデータ構造 - 使われているデータの取り回しについてのお話
buddyのユーザ認証周りのデータ構造 - 使われているデータの取り回しについてのお話buddyのユーザ認証周りのデータ構造 - 使われているデータの取り回しについてのお話
buddyのユーザ認証周りのデータ構造 - 使われているデータの取り回しについてのお話
 
イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方
イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方
イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方
 
Riot + generator で始める新しいデータバインディング
Riot + generator で始める新しいデータバインディングRiot + generator で始める新しいデータバインディング
Riot + generator で始める新しいデータバインディング
 
Devfes kyoto2017
Devfes kyoto2017Devfes kyoto2017
Devfes kyoto2017
 
Gitを使おう
Gitを使おうGitを使おう
Gitを使おう
 
Concrete5×さくら
Concrete5×さくらConcrete5×さくら
Concrete5×さくら
 
Node js 入門
Node js 入門Node js 入門
Node js 入門
 
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみるづや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
 
Clojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状について
Clojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状についてClojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状について
Clojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状について
 
ActiveResourceモデルによるAPIの隠蔽の怖い話 ~レスポンスタイムへの致命的影響~ at #shinjukurb
ActiveResourceモデルによるAPIの隠蔽の怖い話~レスポンスタイムへの致命的影響~ at #shinjukurbActiveResourceモデルによるAPIの隠蔽の怖い話~レスポンスタイムへの致命的影響~ at #shinjukurb
ActiveResourceモデルによるAPIの隠蔽の怖い話 ~レスポンスタイムへの致命的影響~ at #shinjukurb
 
今さら聞けないWebサーバの基本知識と選び方
今さら聞けないWebサーバの基本知識と選び方今さら聞けないWebサーバの基本知識と選び方
今さら聞けないWebサーバの基本知識と選び方
 
海外で注目されてるJs framework “mithril”の特徴
海外で注目されてるJs framework “mithril”の特徴海外で注目されてるJs framework “mithril”の特徴
海外で注目されてるJs framework “mithril”の特徴
 
concrete5とAWSのほどよい関係
concrete5とAWSのほどよい関係concrete5とAWSのほどよい関係
concrete5とAWSのほどよい関係
 
Nuxt
NuxtNuxt
Nuxt
 
Vue.js with Go
Vue.js with GoVue.js with Go
Vue.js with Go
 
Ohs#7 学習API
Ohs#7 学習APIOhs#7 学習API
Ohs#7 学習API
 
Vue
VueVue
Vue
 
毎日2000個のコンテナをstartする鯖が突然死して僕が驚愕した話
毎日2000個のコンテナをstartする鯖が突然死して僕が驚愕した話毎日2000個のコンテナをstartする鯖が突然死して僕が驚愕した話
毎日2000個のコンテナをstartする鯖が突然死して僕が驚愕した話
 

Similar to mruby_nginx_module

ngx_small_light
ngx_small_lightngx_small_light
ngx_small_light
Tatsuhiko Kubo
 
ngx_small_lightで動的サムネイル生成 #yapcasia2012
ngx_small_lightで動的サムネイル生成 #yapcasia2012ngx_small_lightで動的サムネイル生成 #yapcasia2012
ngx_small_lightで動的サムネイル生成 #yapcasia2012Tatsuhiko Kubo
 
BazelでビルドしたアプリをGCPにデプロイしようとしてハマった話
BazelでビルドしたアプリをGCPにデプロイしようとしてハマった話BazelでビルドしたアプリをGCPにデプロイしようとしてハマった話
BazelでビルドしたアプリをGCPにデプロイしようとしてハマった話
Katsunori Kanda
 
memcached proxy server development and operation
memcached proxy server development and operationmemcached proxy server development and operation
memcached proxy server development and operation
Tatsuhiko Kubo
 
nginxの紹介
nginxの紹介nginxの紹介
nginxの紹介
Takashi Takizawa
 
CyberAgentにおけるMongoDB
CyberAgentにおけるMongoDBCyberAgentにおけるMongoDB
CyberAgentにおけるMongoDBAkihiro Kuwano
 
Sidekiq Proを1年ほど使ってみて良かったところ、困ったところ | 新宿.rb 29th #shinjukurb
Sidekiq Proを1年ほど使ってみて良かったところ、困ったところ | 新宿.rb 29th #shinjukurbSidekiq Proを1年ほど使ってみて良かったところ、困ったところ | 新宿.rb 29th #shinjukurb
Sidekiq Proを1年ほど使ってみて良かったところ、困ったところ | 新宿.rb 29th #shinjukurb
Koichiro Sumi
 
Djangoとweb2pyをapacheに組込む
Djangoとweb2pyをapacheに組込むDjangoとweb2pyをapacheに組込む
Djangoとweb2pyをapacheに組込む2bo 2bo
 
RakSulのInternal API開発で gRPCを導入した話
RakSulのInternal API開発で gRPCを導入した話RakSulのInternal API開発で gRPCを導入した話
RakSulのInternal API開発で gRPCを導入した話
nixiesan
 
GitLabを骨までしゃぶりつくす@ゆるUniStudy#7
GitLabを骨までしゃぶりつくす@ゆるUniStudy#7GitLabを骨までしゃぶりつくす@ゆるUniStudy#7
GitLabを骨までしゃぶりつくす@ゆるUniStudy#7
Wataru NOGUCHI
 
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
R S
 
Config mapについて
Config mapについてConfig mapについて
Config mapについて
Arata Honda
 
Trac 0.12 と今後の動向および Trac への貢献 - tanabata.trac 2010-07-07
Trac 0.12 と今後の動向および Trac への貢献 - tanabata.trac 2010-07-07Trac 0.12 と今後の動向および Trac への貢献 - tanabata.trac 2010-07-07
Trac 0.12 と今後の動向および Trac への貢献 - tanabata.trac 2010-07-07Jun Omae
 
使えるDjango1.4
使えるDjango1.4使えるDjango1.4
使えるDjango1.4
hirokiky
 
Rancher2.3とwindows Containerで作るkubernetesクラスタ
Rancher2.3とwindows Containerで作るkubernetesクラスタRancher2.3とwindows Containerで作るkubernetesクラスタ
Rancher2.3とwindows Containerで作るkubernetesクラスタ
Takashi Kanai
 
Docker基礎+docker0.9, 0.10概要
Docker基礎+docker0.9, 0.10概要Docker基礎+docker0.9, 0.10概要
Docker基礎+docker0.9, 0.10概要Kazuyuki Mori
 
The History of Reactive Extensions
The History of Reactive ExtensionsThe History of Reactive Extensions
The History of Reactive Extensions
Yoshifumi Kawai
 
GitLabを16万8千光年ワープさせた話 GITLAB BIG UPGRADE PROJECT
GitLabを16万8千光年ワープさせた話 GITLAB BIG UPGRADE PROJECTGitLabを16万8千光年ワープさせた話 GITLAB BIG UPGRADE PROJECT
GitLabを16万8千光年ワープさせた話 GITLAB BIG UPGRADE PROJECT
Wataru NOGUCHI
 

Similar to mruby_nginx_module (18)

ngx_small_light
ngx_small_lightngx_small_light
ngx_small_light
 
ngx_small_lightで動的サムネイル生成 #yapcasia2012
ngx_small_lightで動的サムネイル生成 #yapcasia2012ngx_small_lightで動的サムネイル生成 #yapcasia2012
ngx_small_lightで動的サムネイル生成 #yapcasia2012
 
BazelでビルドしたアプリをGCPにデプロイしようとしてハマった話
BazelでビルドしたアプリをGCPにデプロイしようとしてハマった話BazelでビルドしたアプリをGCPにデプロイしようとしてハマった話
BazelでビルドしたアプリをGCPにデプロイしようとしてハマった話
 
memcached proxy server development and operation
memcached proxy server development and operationmemcached proxy server development and operation
memcached proxy server development and operation
 
nginxの紹介
nginxの紹介nginxの紹介
nginxの紹介
 
CyberAgentにおけるMongoDB
CyberAgentにおけるMongoDBCyberAgentにおけるMongoDB
CyberAgentにおけるMongoDB
 
Sidekiq Proを1年ほど使ってみて良かったところ、困ったところ | 新宿.rb 29th #shinjukurb
Sidekiq Proを1年ほど使ってみて良かったところ、困ったところ | 新宿.rb 29th #shinjukurbSidekiq Proを1年ほど使ってみて良かったところ、困ったところ | 新宿.rb 29th #shinjukurb
Sidekiq Proを1年ほど使ってみて良かったところ、困ったところ | 新宿.rb 29th #shinjukurb
 
Djangoとweb2pyをapacheに組込む
Djangoとweb2pyをapacheに組込むDjangoとweb2pyをapacheに組込む
Djangoとweb2pyをapacheに組込む
 
RakSulのInternal API開発で gRPCを導入した話
RakSulのInternal API開発で gRPCを導入した話RakSulのInternal API開発で gRPCを導入した話
RakSulのInternal API開発で gRPCを導入した話
 
GitLabを骨までしゃぶりつくす@ゆるUniStudy#7
GitLabを骨までしゃぶりつくす@ゆるUniStudy#7GitLabを骨までしゃぶりつくす@ゆるUniStudy#7
GitLabを骨までしゃぶりつくす@ゆるUniStudy#7
 
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
 
Config mapについて
Config mapについてConfig mapについて
Config mapについて
 
Trac 0.12 と今後の動向および Trac への貢献 - tanabata.trac 2010-07-07
Trac 0.12 と今後の動向および Trac への貢献 - tanabata.trac 2010-07-07Trac 0.12 と今後の動向および Trac への貢献 - tanabata.trac 2010-07-07
Trac 0.12 と今後の動向および Trac への貢献 - tanabata.trac 2010-07-07
 
使えるDjango1.4
使えるDjango1.4使えるDjango1.4
使えるDjango1.4
 
Rancher2.3とwindows Containerで作るkubernetesクラスタ
Rancher2.3とwindows Containerで作るkubernetesクラスタRancher2.3とwindows Containerで作るkubernetesクラスタ
Rancher2.3とwindows Containerで作るkubernetesクラスタ
 
Docker基礎+docker0.9, 0.10概要
Docker基礎+docker0.9, 0.10概要Docker基礎+docker0.9, 0.10概要
Docker基礎+docker0.9, 0.10概要
 
The History of Reactive Extensions
The History of Reactive ExtensionsThe History of Reactive Extensions
The History of Reactive Extensions
 
GitLabを16万8千光年ワープさせた話 GITLAB BIG UPGRADE PROJECT
GitLabを16万8千光年ワープさせた話 GITLAB BIG UPGRADE PROJECTGitLabを16万8千光年ワープさせた話 GITLAB BIG UPGRADE PROJECT
GitLabを16万8千光年ワープさせた話 GITLAB BIG UPGRADE PROJECT
 

More from Tatsuhiko Kubo

pixiv thumbnails
pixiv thumbnailspixiv thumbnails
pixiv thumbnails
Tatsuhiko Kubo
 
ngx_small_light at 第2回闇鍋プログラミング勉強会
ngx_small_light at 第2回闇鍋プログラミング勉強会ngx_small_light at 第2回闇鍋プログラミング勉強会
ngx_small_light at 第2回闇鍋プログラミング勉強会
Tatsuhiko Kubo
 
memcachedからKyotoTycoonへ
memcachedからKyotoTycoonへmemcachedからKyotoTycoonへ
memcachedからKyotoTycoonへ
Tatsuhiko Kubo
 
dtl - diff template library
dtl - diff template librarydtl - diff template library
dtl - diff template library
Tatsuhiko Kubo
 
pixivの画像アップロードシステム
pixivの画像アップロードシステムpixivの画像アップロードシステム
pixivの画像アップロードシステム
Tatsuhiko Kubo
 
Memorypool Key
Memorypool KeyMemorypool Key
Memorypool Key
Tatsuhiko Kubo
 
String Match Algrithm
String Match AlgrithmString Match Algrithm
String Match Algrithm
Tatsuhiko Kubo
 
Diff
DiffDiff

More from Tatsuhiko Kubo (9)

pixiv thumbnails
pixiv thumbnailspixiv thumbnails
pixiv thumbnails
 
ngx_small_light at 第2回闇鍋プログラミング勉強会
ngx_small_light at 第2回闇鍋プログラミング勉強会ngx_small_light at 第2回闇鍋プログラミング勉強会
ngx_small_light at 第2回闇鍋プログラミング勉強会
 
ngx_small_light
ngx_small_lightngx_small_light
ngx_small_light
 
memcachedからKyotoTycoonへ
memcachedからKyotoTycoonへmemcachedからKyotoTycoonへ
memcachedからKyotoTycoonへ
 
dtl - diff template library
dtl - diff template librarydtl - diff template library
dtl - diff template library
 
pixivの画像アップロードシステム
pixivの画像アップロードシステムpixivの画像アップロードシステム
pixivの画像アップロードシステム
 
Memorypool Key
Memorypool KeyMemorypool Key
Memorypool Key
 
String Match Algrithm
String Match AlgrithmString Match Algrithm
String Match Algrithm
 
Diff
DiffDiff
Diff
 

mruby_nginx_module