Update 2014-08-05
: DockerのHTTP Routing - Part8: xip.io と Nginx と confd 0.6 で動的リバースプロキシUpdate 2014-08-06
: DockerのHTTP Routing - Part9: xip.io と OpenResty で動的リバースプロキシUpdate 2014-08-07
: DockerのHTTP Routing - Part10: xip.io と Hipache で動的リバースプロキシ
前回NginxでリバースプロキシをしたマルチポートのNode.jsサンプルをbouncyで試してみます。Dockerコンテナのリバースプロキシには使えませんが、簡単なNode.jsアプリの場合、カジュアルにリバースプロキシできます。
Nginxのserver_name
の正規表現の名前付きキャプチャは、Node.jsのXRegExpを使います。
fluentdではRubyの正規表現で名前付きキャプチャをよく利用しますが、Node.jsの場合はXRegExpで同じことができます。
Dockerfile
Dockerfileは前回とほぼ同じで、Node.jsアプリのデプロイと、runitの設定ファイルだけ変更します。
|
Node.jsアプリ
package.jsonでデプロイするNode.jsアプリで利用するパッケージを定義します。
{ |
bouncyはbounce HTTP requests around for load balancing or as an HTTP host router
とREADMEに書かれているように、Nginxの代換えになります。
使い方はとても簡単です。Node.jsのアプリとして80で起動します。
XRegExpでhost名からポート名を名前付きキャプチャします。
var bouncy = require('bouncy') |
runitの設定ファイル
bouncyのrunitの設定ファイルです。
|
確認
Dockerイメージをbuildします。
$ docker build -t masato/bouncy . |
80ポートをポートマップしてDockerコンテナを起動します。
$ docker run --rm -i -p 80:80 -t masato/bouncy /sbin/my_init bash |
DockerコンテナのIPアドレスを確認します。
$ docker inspect 26aa2ff50a74 | jq -r '.[0].NetworkSettings.IPAddress' |
Dockerホストから、xip.ioを使ったURLを指定してブラウザで確認します。
まとめ
Dockerコンテナのリバースプロキシ用途ではありませんが、Node.jsアプリのリバースプロキシにNginxをインストールしなくても、Node.jsだけでカジュアルに実現できます。
また、XRegExpはJavaScriptの正規表現を拡張して、名前付きキャプチャ以外にも多くの機能が実装されています。
ブラウザでもNode.jsでもインストールできるので、フォームのバリデーションで使えそうです。