Napier
ogochan
脱クラウド計画(0)の続きです。
あれからちょっと改良して、認証とか転送ルール(プロファイルと呼んでます)を実装しました。
ローカルで試した範囲では、バーチャルホストも動いているようです。
原理はこの前書いた通りです。
「セション」という概念を作りました。
これは「プロキシする振り分け」の単位です。トンネルはこれ毎に存在しています。
この振り分けのためのルールを「プロファイル」ということにして、ホスト名やパスを指定します。
「ユーザ」は複数の「プロファイル」を持てますが、'start'する時にどのプロファイルを使用するか指定します。
この辺まで動いているので、次のステップではユーザ情報やプロファイルを永続化するためにDBを使うようにしようと思ってます。
テストしていて気がついたのですが、URLの構造で
http://ホスト名/振り分け用パス/それ以下
というのを仮定しているのですが、単純にプロキシ先に転送すると、URLは
/振り分け用パス/それ以下
というものが送られてしまうので、「振り分け用パス」を考慮しないでいると、コンテンツは見つかりませんね。
他方、これを嫌って転送前に「振り分け用パス」を消してしまうと、コンテンツの中で使うURLに「振り分け用パス」がついていないので、うまくリクエストが振り分けられません。
当たり前と言えば当たり前なんですが、ちょっと使い辛いような気がしないでもないです。ちゃんとbaseが書いてあったり相対パスで参照していれば期待通りの動きをすると思うので、「そんなもの」とも言えますけどね。
バーチャルホストの場合はホスト名だけで振り分けますから、このような問題は起きません。
一応、今は「振り分け用パス」は転送時に書き換えてしまって、「それ以下」だけにして転送してます。
上記の変更をしたものを、pushしておきました。
PS.
ポートの管理がおかしいので修正しました。これでクライアントが切断/接続しても問題なくなりました。