Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
EN
Uploaded by
Tatsuhiko Kubo
2,773 views
mruby_nginx_module at pyfes 2013.11
Read more
4
Save
Share
Embed
Embed presentation
Download
Downloaded 11 times
1
/ 42
2
/ 42
3
/ 42
4
/ 42
5
/ 42
6
/ 42
7
/ 42
8
/ 42
9
/ 42
10
/ 42
11
/ 42
12
/ 42
13
/ 42
14
/ 42
15
/ 42
16
/ 42
17
/ 42
18
/ 42
19
/ 42
20
/ 42
21
/ 42
22
/ 42
23
/ 42
24
/ 42
25
/ 42
26
/ 42
27
/ 42
28
/ 42
29
/ 42
30
/ 42
31
/ 42
32
/ 42
33
/ 42
34
/ 42
35
/ 42
36
/ 42
37
/ 42
38
/ 42
39
/ 42
40
/ 42
41
/ 42
42
/ 42
More Related Content
PDF
mruby_nginx_module
by
Tatsuhiko Kubo
PDF
mruby_nginx_module〜Embedded mruby into Nginx〜
by
Tatsuhiko Kubo
PDF
Inside pixiv's infrastructure〜application cluster side〜
by
Tatsuhiko Kubo
PDF
React VR ことはじめ
by
Kazuhiro Hara
PDF
VSCodeで始めるAzure Static Web Apps開発
by
Yuta Matsumura
PDF
SwaggerとAPIのデザイン
by
Kazuhiro Hara
PDF
Re-frame and A-Frame
by
Kazuhiro Hara
PDF
0831 node学園lt
by
Kazuya Fukumoto
mruby_nginx_module
by
Tatsuhiko Kubo
mruby_nginx_module〜Embedded mruby into Nginx〜
by
Tatsuhiko Kubo
Inside pixiv's infrastructure〜application cluster side〜
by
Tatsuhiko Kubo
React VR ことはじめ
by
Kazuhiro Hara
VSCodeで始めるAzure Static Web Apps開発
by
Yuta Matsumura
SwaggerとAPIのデザイン
by
Kazuhiro Hara
Re-frame and A-Frame
by
Kazuhiro Hara
0831 node学園lt
by
Kazuya Fukumoto
What's hot
PDF
Grunt.jsを使った Expressの開発環境構築
by
kamiyam .
PDF
WordBench千葉「レベル別Nginx活用法」
by
Endoh Shingo
PDF
Harbor RegistryのReplication機能
by
Masanori Nara
PDF
イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方
by
Yuta Matsumura
PDF
第9回rest勉強会 ダウンロード・アップロード編
by
ksimoji
PDF
buddyのユーザ認証周りのデータ構造 - 使われているデータの取り回しについてのお話
by
Kazuhiro Hara
PDF
Riot + generator で始める新しいデータバインディング
by
Tsutomu Kawamura
PDF
Node js 入門
by
Satoshi Takami
PPTX
Gitを使おう
by
takemaedenki
PDF
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
by
zuya
PDF
今さら聞けないWebサーバの基本知識と選び方
by
Endoh Shingo
PDF
Clojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状について
by
Kazuhiro Hara
PPT
Node.js で Web アプリ開発
by
Tatsumi Naganuma
PDF
Bicep + VS Code で楽々Azure Deploy
by
Takekazu Omi
PDF
C# でブロックチェーン実装
by
Yuto Takei
PDF
海外で注目されてるJs framework “mithril”の特徴
by
Shoyo Kyou
PDF
Nuxt
by
卓馬 三浦
PDF
Vue.js with Go
by
Kazuhiro Kubota
PDF
Github codespaces すごく良い。もうこれで 十分なんじゃという話
by
xiidec
PDF
Vue
by
卓馬 三浦
Grunt.jsを使った Expressの開発環境構築
by
kamiyam .
WordBench千葉「レベル別Nginx活用法」
by
Endoh Shingo
Harbor RegistryのReplication機能
by
Masanori Nara
イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方
by
Yuta Matsumura
第9回rest勉強会 ダウンロード・アップロード編
by
ksimoji
buddyのユーザ認証周りのデータ構造 - 使われているデータの取り回しについてのお話
by
Kazuhiro Hara
Riot + generator で始める新しいデータバインディング
by
Tsutomu Kawamura
Node js 入門
by
Satoshi Takami
Gitを使おう
by
takemaedenki
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
by
zuya
今さら聞けないWebサーバの基本知識と選び方
by
Endoh Shingo
Clojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状について
by
Kazuhiro Hara
Node.js で Web アプリ開発
by
Tatsumi Naganuma
Bicep + VS Code で楽々Azure Deploy
by
Takekazu Omi
C# でブロックチェーン実装
by
Yuto Takei
海外で注目されてるJs framework “mithril”の特徴
by
Shoyo Kyou
Nuxt
by
卓馬 三浦
Vue.js with Go
by
Kazuhiro Kubota
Github codespaces すごく良い。もうこれで 十分なんじゃという話
by
xiidec
Vue
by
卓馬 三浦
Similar to mruby_nginx_module at pyfes 2013.11
PDF
Nginx
by
Soichi Takamura
PDF
Mod mrubyについて
by
Ryosuke MATSUMOTO
PDF
Openresty
by
ogawatti
PDF
いまさら聞けないNGINXコンフィグ_F5-NGINX-Community-20200805
by
shinyatsukasaki
PPTX
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
by
toshi_pp
PDF
nginx + lua + ObjectStorage ファイルアップロード/ダウンロードの高速化
by
Shuichi Yukimoto
PDF
mrubyを使った クラウド連携
by
三七男 山本
PDF
Webサーバ勉強会#4
by
oranie Narut
Nginx
by
Soichi Takamura
Mod mrubyについて
by
Ryosuke MATSUMOTO
Openresty
by
ogawatti
いまさら聞けないNGINXコンフィグ_F5-NGINX-Community-20200805
by
shinyatsukasaki
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
by
toshi_pp
nginx + lua + ObjectStorage ファイルアップロード/ダウンロードの高速化
by
Shuichi Yukimoto
mrubyを使った クラウド連携
by
三七男 山本
Webサーバ勉強会#4
by
oranie Narut
More from Tatsuhiko Kubo
PDF
memcached proxy server development and operation
by
Tatsuhiko Kubo
PDF
ngx_small_light
by
Tatsuhiko Kubo
PDF
ngx_small_lightで動的サムネイル生成 #yapcasia2012
by
Tatsuhiko Kubo
PDF
pixiv thumbnails
by
Tatsuhiko Kubo
PDF
ngx_small_light at 第2回闇鍋プログラミング勉強会
by
Tatsuhiko Kubo
PDF
ngx_small_light
by
Tatsuhiko Kubo
ZIP
memcachedからKyotoTycoonへ
by
Tatsuhiko Kubo
ZIP
dtl - diff template library
by
Tatsuhiko Kubo
PDF
pixivの画像アップロードシステム
by
Tatsuhiko Kubo
ZIP
Memorypool Key
by
Tatsuhiko Kubo
ZIP
String Match Algrithm
by
Tatsuhiko Kubo
ZIP
Diff
by
Tatsuhiko Kubo
memcached proxy server development and operation
by
Tatsuhiko Kubo
ngx_small_light
by
Tatsuhiko Kubo
ngx_small_lightで動的サムネイル生成 #yapcasia2012
by
Tatsuhiko Kubo
pixiv thumbnails
by
Tatsuhiko Kubo
ngx_small_light at 第2回闇鍋プログラミング勉強会
by
Tatsuhiko Kubo
ngx_small_light
by
Tatsuhiko Kubo
memcachedからKyotoTycoonへ
by
Tatsuhiko Kubo
dtl - diff template library
by
Tatsuhiko Kubo
pixivの画像アップロードシステム
by
Tatsuhiko Kubo
Memorypool Key
by
Tatsuhiko Kubo
String Match Algrithm
by
Tatsuhiko Kubo
Diff
by
Tatsuhiko Kubo
mruby_nginx_module at pyfes 2013.11
1.
mruby_nginx_module ∼ 久保 達彦 cubicdaiya@gmail.com pyfes 2013/11/30
2.
自己紹介 ✦ 久保 達彦(H.N:bokko) ✦ @cubicdaiya(twitter, github) ✦ Senior Software
Engineer@pixiv Inc. ✦ インフラチーム所属 ✦ ミドルウェアの開発・運用とかやってます
3.
Goはじめました
4.
普段はnginxのモジュールとか作ってます ✦ mruby_nginx_module ✦ ✦ ngx_small_light ✦ ✦ Dynamic Image Transformation
for nginx ngx_access_token ✦ ✦ Embed mruby into nginx Porting of mod_access_token into nginx Nginx本体にも2件ほどパッチ送りました
5.
WEB+DBでもnginxの記事を書きました WEB+DB PRESS Vol.72 ! □詳解nginx ! 設定の柔軟性と 優れたスケーラビリティ ! □共著者 @harukasan @semind
6.
nginx in pixiv ✦ リバースプロキシとかキャッシュとかWebDAVとか 色々な箇所で稼働しています ✦ Using
ngx_lua in pixiv ✦ http://www.slideshare.net/harukayon/ngx-lua-public ✦ @harukasan++
7.
とあるpixivを支えるインフラエンジニア談
8.
mruby_nginx_module ∼Embed mruby into
nginx∼
9.
mruby_nginx_module ✦ nginxの拡張モジュール ✦ nginx.confでmrubyが書ける ✦ nginxのモジュールがmrubyで書ける ✦ ngx_mrubyからfork at 2013/07 ✦ ✦ それまではPull
Request送る形で開発に参加してました http://git.io/d3sJtw
10.
ngx_mrubyとの違い ✦ (mod|ngx)_mrubyはWebサーバの拡張記述統一が目的の一つ ✦ ✦ ✦ Apacheでもnginxでもできる限り同じように書けるのが重要 機能は極力mrbgemsで実現する方向 mruby_nginx_moduleはnginxとの親和性を重視 ✦ 機能は極力nginxのAPIで実現する方向
11.
ドキュメント http://cubicdaiya.github.io/ mruby_nginx_module/
12.
mruby ✦ 軽量Ruby ✦ 組み込み分野向けにまつもとゆきひろ氏が開発 ✦ Cと連携しやすいように設計されてる ✦ 個人的にはリッチなLuaというイメージ
13.
Luaから見たmruby ✦ Cとの連携が非常に楽 ✦ ✦ Luaのスタック操作に比べるとかなり直感的 オブジェクト指向機能のサポート ✦ Luaでもtableで頑張ることはできるがmrubyに 比べると弱い
14.
ngx_luaとmruby_nginx_module (あるいはngx_mruby)
15.
ngx_lua ✦ ノンブロッキングアーキテクチャ ✦ nginxやその他拡張モジュールとの親和性が非常に高い ✦ 関連モジュールが豊富(lua-resty-xxx) ✦ 拡張モジュールというかもはやフレームワークの域 ✦ lua-jitと組み合わせたら鬼に金棒 ✦ OpenRestyの中核モジュール
16.
mruby_nginx_module ✦ まだまだ発展途上 ✦ 機能とかライブラリとかいろいろ足りてない ✦ ノンブロッキングなアーキテクチャにするのが当面の課題 ✦ フック関連のディレクティブ群はほぼ同等レベルまで実装済 ✦ mruby_(rewrite|access|content|log)_handler等
17.
今のところ使える機能 ✦ コードキャッシュ ✦ 各種ハンドラへのフック(rewrite,access,content,log) ✦ ヘッダおよびボディのフィルタリング ✦ nginxの変数へのアクセス(set & get) ✦ Nginx::(Request|Context|Time|Base64|Digest|etc) ✦ ✦ by
Nginx Core API(not mrbgems) Regexp(PCREベース)
18.
nginxの実行フェーズとディレクティブ一覧 nginxの処理フェーズ(実行順) mruby_nginx_moduleのディレクティブ start-up nginx
& modules mruby_init, server rewrite find config rewrite post rewrite pre-access access post-access try files content log 備考 mruby_require serverコンテキストのrewrite 該当するlocationの探索 mruby_rewrite_handler locationのrewrite ! mruby_access_handler ファイルへのアクセス ! try_files mruby_content_handler mruby_log_handler bodyの生成 ロギング
19.
その他のディレクティブ mruby_nginx_moduleのディレクティブ mruby_cache mruby_set 用途 コードキャッシュのOn/Off(default:On) mrubyの実行結果をnginxの変数にsetする mruby_header_filter HTTPヘッダの内容をフィルタリング or 上書きする mruby_body_filter HTTPボディの内容をフィルタリング
or 上書きする
20.
Hello, World!
21.
nginxの変数にset #=> 55
22.
ファイル指定も可能 ・先頭に「/」がある場合は絶対パス ・それ以外の場合は相対パス(conf_prefixがroot)
23.
ヘッダ書き換え # 本来はtext/html
24.
レスポンスボディも(ry
25.
各処理フェーズでデータ共有
26.
Builtin-Regexp based PCRE
27.
nginxとmrubyとPCRE ✦ nginxは正規表現処理にPCREを利用している ✦ mrubyには今のところRegexpが標準で入っていない ✦ ✦ PCREベースのmrbgemはnginxに組み込むのが困難 ✦ ✦ 別途mrbgemが必要(例:iij/mruby-regexp-pcre) nginxがpcre_(malloc|free)を上書きしてる でもPCREは使いたい
28.
なので、 ✦ iij/mruby-regexp-pcreのコードを直接取り込み & 改変 ✦ pcre_(malloc|free)をさらに上書き ✦ ✦ ngx_luaも似たようなことをやってる http://bokko.hatenablog.com/entry/2013/10/13/142154
29.
Nginx::Request ■処理中のリクエスト情報にアクセス location = /mruby
{ mruby_content_handler_code ' r = Nginx::Request.new Nginx.rputs(r.uri + "n") # => /mruby Nginx.rputs(r.method + "n") # => GET, POST, etc Nginx.rputs(r.protocol + "n") # => HTTP/1.x '; }
30.
Nginx::Request ■nginxの変数にアクセス location /mruby { set
$maintainer "bokko"; mruby_content_handler_code ' r = Nginx::Request.new maintainer = r.var.maintainer Nginx.rputs(maintainer + "n") # => bokko '; }
31.
Nginx::Headers_in ■リクエストヘッダへのアクセス hin = Nginx::Headers_in.new host
= hin["Host"] # Host header agent = hin["User-Agent"] # User-Agent header table = hin.headers_in_hash # all headers with hash table
32.
Nginx::Headers_out ■レスポンスヘッダへのアクセス time = Nginx::Time.time() http_time
= Nginx::Time.http_time(time + 60 * 60 * 24) ! # Expiresヘッダを設定 hout = Nginx::Headers_out.new hout["Expires"] = http_time.to_s
33.
Nginx::Time ■nginxのtime系APIのラッパー time = Nginx::Time.time
# => epoch value ! time = 1377710189 Nginx::Time.http_time(time) # => Wed, 28 Aug 2013 17:16:29 GMT Nginx::Time.cookie_time(time) # => Wed, 28-Aug-13 17:16:29 GMT ! Nginx::Time.utc_time Nginx::Time.local_time # => UTC Time(2013-11-30 xx:xx:xx) # => local time(2013-11-30 xx:xx:xx) ! http_time = Nginx::Time.http_time(time) Nginx::Time.parse_http_time(http_time) # => 1377710189
34.
Nginx::Digest ■MD5, SHA1, HMAC-SHA1,
etc md5 = Nginx::Digest.md5("bokko") Nginx::Digest.hexdigest(md5) # => fe9749… ! sha1 = Nginx::Digest.sha1("bokko") Nginx::Digest.hexdigest(sha1) # => cea3d1… ! hmac_sha1 = Nginx::Digest.hmac_sha1("data", "key") Nginx::Digest.hexdigest(hmac_sha1) # => 10415…
35.
Nginx::Base64 ■Base64 encode/decode encoded =
Nginx::Base64.encode("bokko") # => Ym9ra28= Nginx::Base64.decode(encoded) # => bokko
36.
少し発展的な例
37.
(mod|ngx)_access_token っぽいアクセス認証
38.
(mod|ngx)_access_token ✦ S3のクエリ文字列認証っぽい機能を提供 ✦ ✦ ✦ 特定のアクセストークンに基づいた認証 リソースの有効期限設定 mod_access_token ✦ ✦ livedoor(現LINE)が開発 ngx_access_token ✦ @cubicdaiyaが開発
39.
xxx_access_tokenの認証方式 以下のパラメータをリクエストURLに付加する ! ・AccessKey -> 公開 ・Expires 文字列 ->
有効期限(エポック値) ・Signature -> シグネチャ ! Text = Method + Uri + Expires + AccessKey Signature = Base64(HMAC_SHA1(Text, (※) SecretKey)) ! (※)秘密 文字列(サーバ側で設定)
40.
ngx_access_token by mruby_nginx_module
41.
(mod|ngx)_access_tokenと比べて、 ✦ mod_access_token by C ✦ ✦ ngx_access_token
by C ✦ ✦ 約200行 約300行 ngx_access_token by mruby ✦ 約10行 スクリプト言語の力ってすごいですね
42.
今後の課題 ✦ 共有メモリAPI(Nginx::Shared) ✦ サブリクエストAPI(Nginx::SubRequest) ✦ ノンブロッキングソケットAPI(Nginx::Socket) ✦ Fiber(コルーチン)導入 ✦ etc
Download