2013/08/16

ApacheでWebSocketを通すリバースプロキシ(mod_proxy_wstunnel)

mod_proxyがWebSocketを通してくれないので困っていましたが,Apache 2.4.5になってmod_proxyがWebSocketも通してくれるようになるモジュールmod_proxy_wstunnelが出来たようです.

まずはApacheのバージョンを2.4.5以降にあげてください.Apache 2.2のままやる方法もあるそうですが知りません.
そうしたらhttpd.confに次のような行が追加されると思います.コメントアウトされていたら外してください.
LoadModule proxy_wstunnel_module libexec/apache24/mod_proxy_wstunnel.so
最後にプロキシの設定をします.
ProxyPassなどは上から順にマッチさせていくので,厳しい条件から書かなくてはいけません.また,httpとwsの2つのプロトコルを同じパスで共存させることはできないようですので,うまくhttpとwebsocketのパスを分けてマッチさせる必要があります.
ProxyPass /socket.io/1/websocket/ ws://81.la:8080/socket.io/1/websocket/
ProxyPass / http://81.la:8080/ retry=3
ProxyPassReverse /socket.io/1/websocket/ ws://81.la:8080/socket.io/1/websocket/
ProxyPassReverse / http://81.la:8080/
上はNode.jsのWebSocketライブラリであるsocket.ioのサーバの設定例です.httpもwsも喋るNodeアプリを8080番で起動し,8080番ポートは開かずに80番のApacheがクライアントとの間を仲介するというようなユースケースです.websocket通信が/socket.io/1/websocket/以下で行われるという前提を利用して条件が書かれています.

0 件のコメント: