今までbutterflyやGateOneなどの、webを使ったターミナルエミュレータを試してきたのだが、なぜか全てのターミナルエミューレータがまともに動かない。
これらのターミナルエミュレータはそれぞれのポートを使ってインターフェースを公開しているのだが、それを80番ポートで公開するために、ProxyPassとVirtualHostを使っていた。 実は、ここに問題があったようで、通常のhttp, https通信はきちんとそれぞれのポートに渡してくれるのだが、WebSocket通信(ws, wss)についてはProxyPassがきちんと効いてないことが分かった。(こちら)
そこで、wstunnelのパッチを当てて、モジュールだけコンパイルして使ってみたのだが、動かず、結局最新版のapache2.4.9をコンパイルして入れることになった。
ProxyPass / http://127.0.0.1:8080/ ProxyPass /ws/ ws://127.0.0.1:8080/ws/ ProxyReserve...(以下略)
のように設定することで、めでたくProxyPassでWebSocket通信を渡すことができた。
その他の手段
wstunnel.patchを当てる、apache2.4を入れる以外にも解決手段はあり、 最終的にはそちらを採用したため、ここに書き留めておく。
具体的には、node-http-proxyを使う方法、 nginxを入れる方法がある。
node-http-proxyを使う方法では、ほぼJavaScriptでリバースプロキシサーバを自分で作るような方法なので(割と簡単だけど)他の方法よりかなり柔軟に対応できると思う。今回の状況では、
############# #################### ################### #Apache:8080# ← #node-http-proxy:80# → #Application1:5555# ############# #################### ################### ↓ ################### #Application2:8888# ###################
みたいに、Apacheを別のポートでListenさせて、80番ポートに来たリクエストをnode-http-proxyが振り分ける、とすればよい。
自分の環境では、node-http-proxyがエラーのために設置できなかったので、結局がんばって入れたApacheを削除して、nginxに総入れ替えをした。