第5回ペパボテックカンファレンス〜インフラエンジニア大特集〜 で発表した資料です http://pepabo.connpass.com/event/30348/

第5回ペパボテックカンファレンス〜インフラエンジニア大特集〜 で発表した資料です http://pepabo.connpass.com/event/30348/
何の因果かわかりませんが、お仕事でちょっと賢いリバースプロキシサーバ(以降、RPサーバ)を作る機会が2回ありました。 HTTPヘッダの内容によってプロキシ先のサーバを動的に切り替えるようなものです。 この要件を満たすため、RPサーバには以下のようなプログラムが必要になります。 HTTPヘッダの内容を知るためにHTTPリクエストをパース プロキシ先のサーバへHTTPリクエストをプロキシ プロキシ先のサーバはRedisから取得 レスポンスをクライアントへ返す 大量のリクエストも捌ける 1回目はRubyとI/O多重化のライブラリを使ってイベント駆動型のRPサーバを自作してみました。 が、振り返ってみるとこれは失敗でした。 なぜ失敗だったのか? Rubyでイベント駆動型のサーバを書こうとすると様々なものが途端に大変になります。 イベント駆動型サーバではほとんどの箇所でブロックする処理を書けません。
タイトルの通りなのですが、つい先日Homebrewでngx_mrubyがインストールできるようになりました。 github.com うおお、なるほど超便利と思って手元で試すと、mrbgemで使うライブラリのリンクまわりでコケていてビルドできませんでした。 そこで、必殺の「Hi, I'm ngx_mruby author.」PRによってバグ修正を最速でマージしていただき、無事ビルドできるようになりました事をここにお知らせします。 github.com 実際、ngx_mrubyをちょっと検証してみようかな、という用途でめちゃくちゃ便利で、以下のようにするだけであっという間にMac上でngx_mrubyを組み込んだnginxが動くようになります。 brew tap homebrew/nginx brew install nginx-full --with-mruby-module または、最新の
こんな感じ。(ほんとはもうちょいifが多い) error_page 503 /maintenance.html; location = /maintenance.html { internal; } mruby_access_handler_code ' c = Nginx::Connection.new r = Nginx::Request.new Nginx.return -> do if File.exists?("/var/tmp/maint_ignore_office") && c.remote_ip == "192.168.1.3" return Nginx::DECLINED end if !File.exists?("/var/tmp/maint") return Nginx::DECLINED end # 503 return Nginx::HTTP_SERVICE_UN
人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 ようやくngx_mrubyでもmod_mrubyのように動的なリバースプロキシ設定ができるようになりました。タイトルは完全に@hibomaさんによる「lua-nginx-module の紹介 ならびに Nginx+Lua+Redisによる動的なリバースプロキシの実装案」をパク … inspireしたものになっています。 今回の工夫点としては、 ngxin内部の変数をうまく使う redisとのセッションはnginx起動時に一度だけ行なって、そのオブジェクトを使いまわす proxy_passを使って汎用的な設定にする の3点です。 1に関しては、前回の「ngx_mrubyでnginxの内部変数を操作する」で紹介しました。 2に関しては、リクエスト
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く