フロントエンドのJettyに来たリクエストを、他のサーバーにForwardさせたい。
Googleで検索したところ、ForwardHandlerというのがありそうなのだが、そんなクラスは存在しない。おそらく、昔のVersionには、そんなものがあったのだろうが、少なくとも、Version 6にはそんな機能はない。
JettyのAPI Docを調べて、org.mortby.jetty.handlerパッケージを眺めてみたが、Forwardしてくれそうなものは見あたらない。
RewriteHandlerというのは、なんか似ていそうだが、やりたいことは、URLを書き換えるのではなく、リバースプロキシのように動作させること。ファイアウォールの内側にある、別のサーバーの内容を、公開サーバーから返したい。Apacheでいう、mod_proxyのようなこと。ちなみに、ApacheのProxyからJettyに接続する方法はドキュメントにちゃんと書いてある。
そういう意味で、ForwardではなくProxyの方が正しいか。Proxyで検索しなおしてみると、org.mortbay.servlet.ProxyServletというのがJettyの中に入っている。相変わらず、Java Docの説明には何も書いていないんだけど、一言だけEXPERIMENTALというコメントが。ちょっと使うのは怖いかな。こちらでいちおう動作報告がされてはいますが。
forwardやproxyやdispatcherやらで、いろいろ検索してみたものの、良いものは見つからない。そうなると、自分で実装するしかなくなる。
1つ目の方法は、ProxyServletを使う(あるいは自作)すること。いったん、リクエストをWeb Applicationで受け取り、その中で、HttpClientを立ち上げ、そのまま別のサーバーにディスパッチ。
もう1つは、Handlerを自作すること。これも中にはProxyServletと同じ。HandlerかServletの違いがあるだけ。
Handlerの方が、Jetty内部でWeb Applicationにリクエストを渡すなどの余計な処理がないので、スマートそうだが、ServletならTomcatなどでも使い回せる。まあ、実装するなら、ロジックは共通化して、皮だけを変更すればよいのですが。
うーん、しかし、こういう機能がデフォルトでないのなら、結局Tomcatのように、前段にHTTP Serverを別に用意しなくてはならなくなってしまう。
mod_proxyだってそんなに単純なことをやっているわけではないだろうから、自作するというのは、あまり賢明な方法とは思えない。
0 コメント:
コメントを投稿