PoundでReverse Proxy環境を構築してHTTPとRTMPTを共存

(2009/03/04 22:55追記) typesterさんから

mod_proxyでできるんじゃないのかな

なコメントをいただきましたが、ご指摘とおり、mod_proxyだけでも共存は可能だと思います。今回は試験的な意味もこめてPoundを使って環境構築をしましたが、おいおいmod_proxyも試してみたいと思っています。(ここまで追記)

Wowza Media ServerなんかのRTMPサーバは、標準の1935番ポートへの接続ができないクライアントのために、HTTPでカプセル化した通信(RTMPT)を受け付けるために、80番ポートでの待ち受けが可能です。(さらにSSL化した443番ポートでの通信RTMPSなんかもあります)

ただ、1台のマシンでWebサーバと共存させる場合、80番ポートが競合するのでこのままではうまく共存できません。そこで、Reverse Proxyを利用してHTTP, RTMPTそれぞれのアクセスを別ドメインへのアクセスとして、自身のHTTP, RTMPT待ち受けポートを80番以外のものにしてあげると共存が可能になります。たとえば、ポート番号をReverse Proxy=80, HTTP=81, RTMPT=82なんかにして、Reverse ProxyがHTTP, RTMPTをそれぞれのサービスに振り分けてあげればいいわけですね。

さて、こんな環境を構築しようと思って「Reverse Proxy何にしよう?Squidとか使えば言いわけ??」と思って@kawatasoに相談したところ、「それPoundでできるよ」とアドバイスをもらいました。Poundは初めて使ったのですが、単純なReverse Proxy環境を構築するにはものすごく簡単に実現できました。と、いうわけで今回はその構築メモを残しておきたいと思います。環境はFedora9です。

Poundのインストール

まず、Poundのビルドに必要な次のものをインストールします。

$sudo yum -y install openssl-devel
$sudo yum -y install pcre-devel
$sudo yum -y install google-perftools-devel
$sudo yum -y install rpmbuild

Poundはソースのrpmが公式サイトにあります。

これをDL後、ビルド、インストールします。

$ sudo /usr/bin/rpmbuild --rebuild pound-2.4.4-1.src.rpm
$ cd /usr/src/redhat/RPMS/i386
$ sudo rpm -ivh pound-2.4.4-1.i386.rpm 

インストールしたら、サービスにも登録しておきましょう。

$ sudo /sbin/chkconfig pound on

mod_rpafの導入

いきなりPoundの話でもいいのですが、その話はもう少し後にしましょう。

Reverse Proxyを導入すると、Apacheのログがクライアントからのアクセスではなく、全部Reverse Proxyからのアクセスになってしまってしまいます。これは、ログとしては好ましくないので、まずはこれを回避します。方法は簡単で、mod_rpafを導入すればOKです。

Apacheのモジュールのインストールは、apxsが必要になりますが、これはhttpd-develがインストールされてある必要があります。

$ sudo yum -y install httpd-devel

その上で、ソースを公式サイトからDLしておきます。

$ wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
$ tar zxf mod_rpaf-0.6.tar.gz
$ cd mod_rpaf-0.6

その後、Makefileを修正します。Apacheは2.x系が入っていることとします。先頭のAPXS2の実際の場所を指定してあげます。

APXS2=/usr/sbin/apxs

その後、Apache2.x系用のmake, make installを行います。

make rpaf-2.0
sudo make-install-2.0

ここで、mod_rpafを有効にするため、/etc/httpd/conf.d/ にrpaf.confの名前で次の内容のconfファイルを作成しておきます。ここでは、Reverse Proxyの場所を指定していますが、Reverse Proxyは同一マシン上に存在している前提で、127.0.0.1の自分自身を指定しておきます。

LoadModule rpaf_module modules/mod_rpaf-2.0.so
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1

Poundのログの場所を修正

Poundのログは標準では/var/log/messagesに出力されるので、messages がどんどん肥大化してしまいます。そこで、/var/log/pound に出力されるように変更します。

Fedora9では標準でrsyslogが起動しているかと思いますので、/etc/rsyslog.confを編集します。

# *.info;mail.none;authpriv.none;cron.none; /var/log/messages を
*.info;mail.none;authpriv.none;cron.none;local1.none /var/log/messages # に変更

# 以下の行も追加
local1.*                                  /var/log/pound

その後、rsyslogを再起動しておきます。

$ sudo /etc/init.d/rsyslog restart

Apacheの待ち受けポートの変更

/etc/httpd/conf/httpd.conf で、次のように待ち受けポートを変更しておきます。今回は81番ポートに変更します。

#Listen 80 これを次のように変更
Listen 81

RTMPTサーバの待ち受けポートの変更

Wowza Media Server では、/usr/local/WowzaMediaServer/conf/VHost.xmlを編集します。

 <HostPort>
         <ProcessorCount>4</ProcessorCount>
         <IpAddress>*</IpAddress>
         <Port>80</Port>
         <SocketConfiguration>
                 <ReuseAddress>true</ReuseAddress>
                 <ReceiveBufferSize>24000</ReceiveBufferSize>
                 <SendBufferSize>65000</SendBufferSize>
                 <KeepAlive>true</KeepAlive>
         </SocketConfiguration>
         <HTTPProvider>
                 <BaseClass>com.wowza.wms.http.HTTPServerVersion</BaseClass>
                 <Properties>
                 </Properties>
         </HTTPProvider>
 </HostPort>

の箇所をコメントアウトを外し、ポート番号を80 → 82に設定しておきます。

Poundの設定

やっとこさ、Poundの設定です。今回は、HTTPの通信はwww.katsuma.tv, RTMPTの通信はrtmpt.katsuma.tvとしてアクセスを受け付けることとします。実際のApacheは81番, RTMPサーバは82番ポートでの待ち受けを行っていることを想定しています。(DNSの設定は別途行っておく必要はあります)

ここでは、/etc/pound/pound.confを次のように書き直します。(pound.confは念のためバックアップしておくことをおすすめします)

User "nobody"
Group "nobody"
RootJail "/usr/share/pound"
Control "/var/run/pound/ctl_socket"

LogLevel    3
Alive       60
Daemon      1
LogFacility local1

# Main listening ports
ListenHTTP
    Address 0.0.0.0
    Port    80
    xHTTP   1
End


# Catch-all server(s)

# Apache
Service
    HeadRequire "Host: .*www.katsuma.tv.*"
    BackEnd
       Address 127.0.0.1
       Port 81
    End
End

# RTMPT
Service
    HeadRequire "Host: .*rtmpt.katsuma.tv.*"
   BackEnd
       Address 127.0.0.1
       Port 82
    End
End

Service
    BackEnd
        Address 127.0.0.1
        Port    81
    End
    Session
        Type    BASIC
        TTL     300
    End
End

上から読むと、そのまま理解できるかと思います。ListenHTTPのディレクティブでProxyとしては80番ポート待ち受け、Serviceディレクティブで内部サーバ(ここでは自分自身ですがもちろん他のサーバを指定することは可能です)のリクエスト先のホスト情報、サーバアドレス、サーバポートを指定します。

先頭のLogLevelは次のとおりです。

  • 0 - no logging
  • 1 - normal log
  • 2 - full log
  • 3 - Apache combined log format
  • 4 - Apache combined log format without virtual host

LogFacilityについては、先に書いたrsyslogとの兼ね合いですね。その他の情報についてはman poundを見られるのが一番よいかと思われます。

サービスの再起動

これで全部準備は揃ったので、全サービスを再起動します。

$ sudo /etc/init.d/httpd restart
$ sudo /etc/init.d/WowzaMediaServer restart
$ sudo /etc/init.d/pound start

これで、HTTPとRTMPTを1台のマシンでハンドリングさせることが可能になりました。

まとめ

今回は実質Pound以外の設定のほうが面倒なことが多かったかと思いますが、Pound自身の設定は簡単だったと思います。HTTPサーバとRTMPTサーバの共存、という形で設定を行いましたが、もちろんHTTPサーバの負荷分散という形での利用もOKです。(むしろそっちの利用方法のほうが今どきっぽく正しいはず)

参考

手軽なロードバランサ Pound を導入してみました

関連広告

Trackbacks:0

TrackBack URL for this entry
http://blog.katsuma.tv/mt-tb.cgi/197
Listed below are links to weblogs that reference
PoundでReverse Proxy環境を構築してHTTPとRTMPTを共存 from blog.katsuma.tv

Home > develop > PoundでReverse Proxy環境を構築してHTTPとRTMPTを共存

Search
Feeds

Return to page top